使用機器人操作系統(tǒng)ROS 2和仿真軟件Gazebo 9搭建機器人教程(一)
參考鏈接:https://github.com/bunchofcoders/basic_bocbot
本文為使用ROS 2和Gazebo9搭建仿真機器人詳細指南。
確保已按如下說明安裝ROS和Gazebo:
ROS 2安裝。?二進制軟件包的安裝足以滿足該項目的需求,但是如果感興趣,還可以選擇從源代碼搭建。Dashing或Eloquent均可。
Gazebo安裝。推薦9+以上版本。
盡管此項目基于Ubuntu 18.04說明,但如果是其他安裝了ROS 2和Gazebo?9的系統(tǒng),這些說明同樣適用,比如Windows 10、Mac OS等,同時通過學習和實踐,將會了解到它們的API、命令和過程大致相同。
本文假定已經(jīng)具備以下基礎:
具有C++和Python編程基礎知識的開發(fā)人員,或者
已經(jīng)知道ROS 1并期望轉移到ROS 2開發(fā),可以直接跳到下面的機器人。
目錄
介紹
基礎
機器人
ROS
Gazebo
機器人
設置
介紹
為什么要學習機器人技術?
機器人應用已經(jīng)越來越普遍。除了在制造過程中很常見之外,近年來,兒童玩具、智能吸塵器、自動駕駛汽車、無人駕駛飛機等不勝枚舉。這些只是幾個例子,將來還會有更多例子。不感興趣,不愿學習,沒關系,它們一樣會進入到你的生活中,無處不在……
怎么學呢?
在搭建實際的機器人之前,可能需要先使用模擬器來測試新想法。對模擬機器人滿意之后,就可以繼續(xù)搭建實際的機器人了。
ROS提供了搭建機器人各種組件并在它們之間建立安全通信的框架,Gazebo提供了仿真工具,可以使用實際場景測試算法和機器人設計。
本文能學到什么?
學習如何將ROS2和Gazebo9組合在一起,創(chuàng)建具有四輪(差動模型)、攝像頭和激光掃描傳感器的機器人,并在模擬的環(huán)境中測試其操作。
先熟悉一些基本概念。
基礎
機器人
無論要搭建哪種類型的機器人,機器人都需要執(zhí)行感知、決策和行動的三個步驟,屬于輸入-控制-輸出這類結構。
感知
就像我們人類通過眼睛、耳朵、鼻子和觸摸感知或感知周圍的環(huán)境一樣,機器人使用一個或多個傳感器感知周圍的環(huán)境??赡芤呀?jīng)知道的一些傳感器如雷達、激光掃描、照相機、激光雷達、溫度傳感器、聲納、化學檢測傳感器等。
決策
根據(jù)來自傳感器的輸入和機器人的當前狀態(tài),機器人可以執(zhí)行一些決策。決策可以簡單地回答是或否的天氣問題,也可以簡單地在不同星球上未知地形的路徑上行駛。
行動
機器人可以根據(jù)使用輸入做出的決定執(zhí)行各種動作。例如,從一個地方移動到另一個地方,移動機器人手臂等各種部件,將消息發(fā)送到另一機器人,加快、減速、停止等。
本文中將了解ROS2如何提供執(zhí)行這三個基本過程的框架。
ROS
機器人操作系統(tǒng)不是如Linux或Windows那樣的操作系統(tǒng),而是一個位于操作系統(tǒng)之上的框架,可為開發(fā)和運行機器人的各種組件提供便利。
就像Microsoft基礎類(MFC)是用于Windows中C++開發(fā)和運行桌面應用程序的框架一樣,ASP.Net也是用于開發(fā)和運行網(wǎng)站的框架。同樣,ROS是一個框架,并提供使用C++和Python等開發(fā)和運行機器人的工具和庫。
ROS 2是ROS 1的下一個版本。大多數(shù)概念在ROS 2中仍然相同,與ROS 1保持一致,但是各個組件之間的設計和通信有了顯著改進。ROS 2使用DDS。
學習ROS 1會有所幫助,但不是必需的。由于一些概念文檔仍在ROS 1維基中。如下是一些了解ROS的有用鏈接。
ROS 1教程
ROS 2教程
節(jié)點概念
ROS 2中的節(jié)點
主題
服務端/客戶端
發(fā)布器/訂閱器
服務質量
編譯系統(tǒng)colcon
Gazebo
Gazebo是ROS使用最廣泛的模擬器。在線上有許多非常好的教程。如下是一些入門指南。
教程:http://gazebosim.org/tutorials
ROS:https://subscription.packtpub.com/book/hardware_and_creative/9781783554713/1/ch01lvl1sec11/simulators-of-ros
假設現(xiàn)在已經(jīng)熟悉ROS和Gazebo,那么將它們融合應用。
機器人
目標是根據(jù)從傳感器收集的輸入執(zhí)行一些操作(驅動機器人)。將按照以下步驟進行操作。
1?在Gazebo模擬器中搭建簡單的室內環(huán)境(請參見下圖)
2 搭建機器人(mobot)
底盤(藍色)
4個輪子(灰色)
相機(紅色)
激光雷達(黑色)
3?編寫C++節(jié)點處理相機和激光雷達掃描輸入
4?編寫C++節(jié)點將命令發(fā)送到輪子以驅動機器人
機器人
世界環(huán)境?(室內)
設置:
具體步驟如下。
打開一個新的終端并更新ROS 2安裝配置,這樣ROS2命令可以使用。
relaybot@TPS2:~$ source /opt/ros/dashing/setup.bash
relaybot@TPS2:~$ echo $ROS_DISTRO
dashing
創(chuàng)建工作區(qū)
relaybot@TPS2:~$ mkdir -p mobot/src
relaybot@TPS2:~$ cd mobot/src/
1.在Gazebo模擬器中搭建室內環(huán)境
創(chuàng)建mobot包
relaybot@TPS2:~/mobot/src$ ros2 pkg create --build-type ament_cmake mobot
going to create a new package
package name: mobot
destination directory: /home/relaybot/mobot/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['relaybot
licenses: ['TODO: License declaration']
build type: ament_cmake
dependencies: []
creating folder ./mobot
creating ./mobot/package.xml
creating source and include folder
creating folder ./mobot/src
creating folder ./mobot/include/mobot
creating ./mobot/CMakeLists.txt
relaybot@TPS2:~/mobot/src$ cd mobot/
relaybot@TPS2:~/mobot/src/mobot$
為室內環(huán)境的world文件新建文件夾:
relaybot@TPS2:~/mobot/src/mobot$ mkdir worlds
relaybot@TPS2:~/mobot/src/mobot$ cd worlds/
relaybot@TPS2:~/mobot/src/mobot/worlds$ gedit mobot_room.world
Gazebo中的世界文件包含模擬環(huán)境中的所有對象。這些對象是機器人模型、環(huán)境、照明、傳感器和其他對象等。
Gazebo使用SDF?xml文件格式來保存模擬配置。世界文件通常具有.world擴展名。
mobot_room.world代碼(補充):
mobot_room.world-ROS2Gazebo9附1
此時,運行如下命令在Gazebo中啟動世界環(huán)境:
relaybot@TPS2:~/mobot/src/mobot/worlds$ gazebo mobot_room.world
另外,可以按照以下教程創(chuàng)建自定義世界環(huán)境。
建立世界環(huán)境
在世界環(huán)境中創(chuàng)造建筑物
請確保在世界環(huán)境的文件保存為mobot_room.world在mobot/src/mobot/worlds文件中。
2.搭建機器人
現(xiàn)在,已熟悉用來描述仿真對象的SDF文件。ROS使用通用機器人描述格式(URDF)對機器人進行建模,該機器人在xml中描述了各種動態(tài)和運動學特性。可以點擊此處了解更多信息簡單的URDF如下:
在URDF中定義各種機器人元素時,功能很豐富。為了單獨管理各種xacro組件并重用它們,ROS提供了一個名為(XML Macro)的程序包,可以將不同的URDF文件組合到一個文件中。它還提供了模板工具來定義這些文件中的變量。使用.xacro擴展名保存這些文件??梢渣c擊此處了解有關XACRO的更多信息。
創(chuàng)建兩個xacro文件,一個用于描述機器人,另一個用于描述在下面簡要說明的Gazebo插件,用于在仿真中進行交互。
為使Gazebo插件正常工作,請確保已安裝以下ROS 2軟件包。
gazebo_dev
gazebo_msgs
gazebo_plugins
gazebo_ros
gazebo_ros_pkgs
可以通過運行以下命令進行檢查:
$ ros2 pkg list
與Gazebo接口的ROS 2軟件包集包含在名為gazebo_ros_pkgs的元軟件包中。
注意:所有ROS功能包都使用如下形式ros-
3.Gazebo插件
插件是一段代碼,被編譯為共享庫并插入到仿真中。該插件可通過標準C++類直接訪問Gazebo的所有功能。
插件很有用,因為它們具有如下功能:
讓開發(fā)人員控制Gazebo的幾乎任何方面
是易于共享的獨立例程
可以從正在運行的系統(tǒng)中插入和刪除
可以點擊此處了解有關插件的更多信息。
除了使用自定義插件,也可以使用gazebo_ros_pkgs提供的現(xiàn)有插件。具體使用如下:
滑行轉向差動驅動控制器可實現(xiàn)移動機器人控制,由libgazebo_ros_diff_drive.so提供,詳情請點擊此處。
相機控制器可讀取相機在模擬中捕獲的圖像,由libgazebo_ros_camera.so提供,此處點擊有更多詳細信息。
激光雷達控制器從讀取激光掃描儀中的點云數(shù)據(jù),由libgazebo_ros_ray_sensor.so提供,此處點擊有更多詳細信息。
在/opt/ros/dashing/lib目錄中找到這些庫。
在mobot.gazebo文件中定義這些控制器所需的各種屬性。
為urdf文件創(chuàng)建目錄。
$ cd ~/mobot/src/mobot
$ mkdir urdf
$ cd urdf
$ gedit?mobot.gazebo
將以下代碼粘貼到mobot.gazebo文件
mobot.gazebo代碼補充:
mobot模型-ROS2Gazebo9附2
現(xiàn)在,在mobot.urdf.xacro文件中定義機器人描述。
$ cd urdf
$ gedit?mobot.urdf.xacro
將以下代碼粘貼到mobot.urdf.xacro文件。
mobot.urdf.xacro代碼補充:
mobot模型-ROS2Gazebo9附2
Xacro代碼說明:
在mobot.urdf.xacro文件中
創(chuàng)建鏈接robot_footprint,chassis,front_left_wheel,front_right_wheel,back_left_wheel,back_right_wheel,camera和hokuyo激光傳感器
通過指定以下關節(jié)將它們連接在一起,robot_footprint_joint連接chassis和robot_footprint。輪子通過front_left_wheel_joint連接到chassis,front_right_wheel_joint,back_left_wheel_joint,back_right_wheel_joint。camera和hokuyo分別由camera_joint與hokuyo_joint連接到chassis
通過xacro使用行引用的文件中,
指定libgazebo_ros_diff_drive.so控制器配置機器人運動,它們的輪距和直徑,扭矩產(chǎn)生的時間和頻率發(fā)布等,里程計通過/odom更新。還指定/cmd_vel訂閱速度命令的主題。
同樣,對于libgazebo_ros_camera.so插件配置,指定了相機屬性,并重新映射了由插件發(fā)布的原始主題,發(fā)布RGB圖像,發(fā)布/mobot/camera/image,相機的信息發(fā)布/mobot/camera/image/camera_info。
配置libgazebo_ros_ray_sensor.so為使用hokuyo激光傳感器發(fā)布數(shù)據(jù)/mobot/scan。如果未指定名稱空間,
此時,~\mobot_ws\src\mobot目錄應如下所示:
relaybot@TPS2:~/mobot/src/mobot$ tree
.
├── CMakeLists.txt
├── include
│?? └── mobot
├── package.xml
├── src
├── urdf
│?? ├── mobot.gazebo
│?? └── mobot.urdf.xacro
└── worlds
└── mobot_room.world
5 directories, 5 files
在colcon編譯過程中調用xacro
需要配置編譯過程調用xacro工具,從mobot.urdf.xacro和mobot.gazebo文件生成urdf文件。為此,需要編輯CMakeLists.txt文件以指定依賴項。
# Generate .urdf files from .urdf.xacro files
# 從.urdf.xacro文件生成.urdf文件
find_package(xacro REQUIRED)
# Xacro files Xacro文件
file(GLOB xacro_files urdf/*.urdf.xacro)
foreach(it ${xacro_files})
# remove .xacro extension 刪除.xacro擴展
string(REGEX MATCH "(.*)[.]xacro$" unused ${it})
set(output_filename ${CMAKE_MATCH_1})
# create a rule to generate ${output_filename} from {it} 從{it}創(chuàng)建一條${output_filename}規(guī)則
xacro_add_xacro_file(${it} ${output_filename})
list(APPEND urdf_files ${output_filename})
endforeach(it)
# add an abstract target to actually trigger the builds 添加一個抽象目標實際觸發(fā)編譯
add_custom_target(media_files ALL DEPENDS ${urdf_files})
此外,需要配置編譯過程安裝urdf、worlds和meshes目錄到install文件夾中。因為所有的軟件包都將有ROS環(huán)境中的安裝目錄提供,所以在編譯軟件包時創(chuàng)建該目錄。在CMakeLists.txt中添加以下。
install(DIRECTORY worlds
DESTINATION share/${PROJECT_NAME})
install(DIRECTORY urdf
DESTINATION share/${PROJECT_NAME})
#install(DIRECTORY meshes
# DESTINATION share/${PROJECT_NAME})
可以從下面復制整個CMakeLists.txt
CMakeLists.txt代碼補充:
CMakeLists部分-ROS2Gazebo9附3
此時,可以編譯程序包啦!開啟新終端,請確保更新為ros環(huán)境。
$ source /opt/ros/dashing/setup.bash
$ cd ~/mobot
$ colcon build
Starting >>> mobot
Finished <<< mobot?[1.08s]
Summary: 1 package finished [1.15s]
$
配置mobot.urdf文件urdf在編譯后在目錄中生成。
要在Gazebo中看到機器人,需要創(chuàng)建啟動(launch)文件夾和啟動文件??梢栽诖颂幜私釸OS 2中的啟動系統(tǒng)。
$ cd ~/mobot/src/mobot
$ mkdir launch
$ cd launch
$ gedit?world.launch.py
在啟動文件中,將做兩件事。
使用預定義的設置和啟動Gazebo?mobot_room.world
調用gazebo提供的spawn_entity服務以生成mobot.urdf在世界上定義的機器人。
將以下代碼粘貼到world.launch.py中。
world.launch.py代碼補充:
world.launch.py部分-ROS2Gazebo9附4
在CMakeLists.txt添加以下代碼實現(xiàn)編譯后安裝到啟動文件夾。
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME})
此部分已經(jīng)在附3中,添加完成了。
最終~\mobot\src目錄結構應如下所示:
relaybot@TPS2:~/mobot/src/mobot$ tree
.
├── CMakeLists.txt
├── include
│?? └── mobot
├── launch
│?? └── world.launch.py
├── package.xml
├── src
├── urdf
│?? ├── mobot.gazebo
│?? ├── mobot.urdf
│?? └── mobot.urdf.xacro
└── worlds
└── mobot_room.world
編譯并啟動:
$ cd ~/mobot
$ colcon build
在啟動mobot之前,必須更新bash文件。mobot工作區(qū)bash文件將程序包mobot添加到現(xiàn)有ros環(huán)境中,使它可使用各種ros2命令,就像其他ros程序包一樣。
$ source install/setup.bash
$ ros2 launch mobot?world.launch.py
注意:可以使用Tab鍵完成補全所有ros2命令,在鍵入ros2后,按Tab鍵查看可用選項。
應該看到如下圖所示的機器人和世界環(huán)境。恭喜!此時已經(jīng)成功在ROS2和Gazebo9搭建了第一個仿真機器人。下一節(jié)將學習ROS2各種命令。
華為開源鏡像站 Mirrors 機器人
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。