使用機器人操作系統(tǒng)ROS 2和仿真軟件Gazebo 9搭建機器人教程(一)

      網(wǎng)友投稿 1692 2022-05-29

      參考鏈接: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的更多信息。

      使用機器人操作系統(tǒng)ROS 2和仿真軟件Gazebo 9搭建機器人教程(一)

      創(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--,ros-發(fā)行版-功能包名

      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使用行引用的文件中,導入了mobot.gazebo文件,在其中指定了插件的配置。

      指定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則數(shù)據(jù)將在/scan主題中發(fā)布。以上插件都是如此。

      此時,~\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小時內刪除侵權內容。

      上一篇:⑥?全網(wǎng)首發(fā)??數(shù)據(jù)有道之數(shù)據(jù)庫技術??干貨大全【持續(xù)更新】???
      下一篇:XXL-JOB分布式任務調度平臺快速入門
      相關文章
      亚洲xxxxxx| 最新亚洲春色Av无码专区| 亚洲国产午夜中文字幕精品黄网站| 亚洲日韩国产一区二区三区在线| 亚洲人6666成人观看| 亚洲欧洲国产经精品香蕉网| 久久夜色精品国产噜噜噜亚洲AV | 亚洲熟妇无码AV在线播放| 亚洲男女内射在线播放| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲中文无码mv| 亚洲欧美日韩中文二区| 亚洲欧美日韩综合久久久| 亚洲人成色77777在线观看| 亚洲国产区男人本色| 亚洲av日韩专区在线观看| 理论亚洲区美一区二区三区| 女bbbbxxxx另类亚洲| 大胆亚洲人体视频| 亚洲午夜福利精品无码| 亚洲午夜未满十八勿入网站2| 精品亚洲综合在线第一区| 亚洲狠狠综合久久| 亚洲色成人网一二三区| 亚洲国产精品免费在线观看| www.亚洲成在线| 亚洲乱亚洲乱妇24p| 亚洲日韩AV无码一区二区三区人| 亚洲色欲色欱wwW在线| 国产精品亚洲综合一区在线观看| 亚洲日韩VA无码中文字幕| 亚洲人色婷婷成人网站在线观看| 亚洲AV永久无码精品| 亚洲黄色免费在线观看| ass亚洲**毛茸茸pics| 亚洲熟妇丰满xxxxx| 一本久久综合亚洲鲁鲁五月天| 亚洲人成无码久久电影网站| 亚洲国产精品成人精品无码区在线 | 亚洲乱码中文字幕小综合| 亚洲午夜无码久久久久软件|