書名: ROS機器人項目開發11例(原書第2版)作者名: (印)拉姆庫瑪·甘地那坦 郎坦·約瑟夫本章字數: 727字更新時間: 2021-01-26 17:17:38
3.4.2 Gazebo及ROS機器人模型格式設定
正如我們所知,Gazebo是一個支持ROS的物理模擬引擎,它也可以在沒有ROS的情況下獨立運行。在Gazebo中創建的大多數模型都符合一種稱為模擬描述格式(Simulation Description Format,SDF)的XML格式。ROS則有不同的方法來表示機器人模型:以一種稱為通用機器人描述格式(Universal Robotic Description Format,URDF)的XML格式定義。對用戶而言,雖然Gazebo和ROS下的機器人模型格式不同,但無須過多擔心,因為如果模型是用URDF創建的,則雖然文件中有一些額外的XML標記,但是Gazebo可以很容易地理解它們——URDF文件能夠在Gazebo的保護下自動轉換成SDF。但是如果模型是在SDF中定義的,則在引入某些基于ROS的特性時則可能會存在一些問題。
目前有多種基于SDF的插件能夠在ROS下工作或者向ROS發送消息,但這些插件僅限于少數傳感器和控制器。我們在安裝ROS-1 Melodic Morenia的同時安裝了Gazebo 9。盡管我們有最新版本的Gazebo和ROS(截至撰寫本書時),但大多數ros_controllers仍然不支持SDF,需要我們創建自定義的控制器來與SDF一同工作。鑒于此,我們將以URDF格式創建機器人模型,并允許Gazebo的內置API(URDF2SDF:http://osrf-distributions.s3.amazonaws.com/sdformat/api/6.0.0/classsdf_1_1URDF2SDF.html)完成轉換工作,生成Gazebo支持的格式。
為了實現ROS與Gazebo的集成,我們需要在兩者之間建立一定的依賴關系,并將ROS消息轉換為Gazebo可接受的信息。我們還需要一個框架實現準實時的機器人控制器,實現對機器人運動的控制。前者構成了gazebo_ros_pkgs包,它是一堆ROS包的封裝,用于幫助Gazebo理解ROS消息和服務;后者構成了ros_control和ros_controller包,提供機器人關節和執行器空間轉換處理以及基于現有控制器對位置、速度以及力的控制處理功能。讀者可以通過以下命令安裝上述所需的功能包:
由于已經定義了抽象層,因此我們將使用ros_control的hardware_interface::RobotHW類,此外我們將使用ros_controllers的joint_trajectory_controller和diff_drive_controller來分別實現對機械臂和機器人底座的控制。
讀者可以從http://www.theoj.org/joss-papers/joss.00456/10.21105.joss.00456.pdf了解更多關于ros_control和ros_controllers的信息。
至此,讀者已經了解了移動機械臂構建的基礎內容,下面我們開始構建機器人底座。