前言
單個機器人的各項仿真實驗都基本完成,也實現(xiàn)了遠程控制,接下來主要對多機器人編隊進行仿真實驗,在進行多機器人編隊控制前,先要在gazebo仿真中加載多個機器人。
一、基本概念
在gazebo中添加多個機器人需要寫或修改launch文件,通過在網(wǎng)上翻看別人的代碼,大致明白了調用gazebo仿真launch文件中各部分代碼的意思。下面是一些最最基本的概念,在修改launch前稍微了解一下。
1、xacro
類似于函數(shù)實現(xiàn),提高代碼復用率,優(yōu)化代碼結構,提高安全性
(1)宏定義
<xacro:macro name="宏名稱" params="參數(shù)列表(多參數(shù)之前使用空格分隔)">
....
參數(shù)調用格式:${參數(shù)名}
</xacro:macro>
(2)宏調用
<xacro:宏名稱 參數(shù)1=xxx 參數(shù)2=xxx/>
(3)文件包含
機器人由多部件組成,不同部件可能封裝為單獨的xacro文件,最后再將不同的文件集成,組合為完整機器人,可以使用文件包含實現(xiàn)。
<robot name="xxx" xmls:xacro="http://wiki.ros.org/xacro">
<xacro:include filename="my_base.xacro">
<xacro:include filename="my_camera.xacro">
<xacro:include filename="my_laser.xacro">
....
</robot>
在launch文件中直接加載xacro的方法
command="$(find xacro)/xacro $(find 文件名)/urdf/.urdf.xacro(文件名)"
2、Gazebo 加載單個機器人模型
<launch>
<!-- 將Urdf文件的內容加載到參數(shù)服務器-->
<param name="robot_description"textfile=“$(find文件夾名)/urdf/.urdf文件“>
<!--啟動gazebo-->
<include file="$(find gazebo_ros)/launch/empty_world.launch"/>
<!--在gazebo中顯示機器人模型-->
<node pkg="gazebo_ros"type="spawn_model"name="model"args="-urdf-model mycar-param robot_description"/>
</launch>
二、原先launch文件代碼
在大致看了上述的說明后就能看懂,在gazebo仿真環(huán)境中加載一個機器人的launch文件了。
復制粘貼如下:根據(jù)上面的基本概念可以大概的明白代碼所描述的內容。
(如我在圖中添加的注釋)
<launch>
<!--在所提供的burger, waffle, waffle_pi三種機器人呢模型中選擇要加載的類型-->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<!--設置機器人的x,y,z坐標,相當于宏定義方面下面使用和后面的修改-->
<arg name="x_pos" default="-2.0"/>
<arg name="y_pos" default="-0.5"/>
<arg name="z_pos" default="0.0"/>
<!-- 運行gazebo仿真環(huán)境 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
<!--在launch文件中直接加載機器人xacro模型描述文件-->
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />
<!--在gazeb中顯示機器人模型,并設置初始的坐標位置-->
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
</launch>
gazebo啟動結果如下:
三、 修改launch文件加載多個機器人
在理解了launch調用和加載的各項指令后,接下來實現(xiàn)在gazebo中加載多個機器人,相比于單機器人,多機器人仿真需要在原基礎上加入標簽,做到用同樣的descripion配置文件加載多個獨立的機器人。
具有ns屬性,可以將節(jié)點組推送到單獨的命名空間中。在前面的基礎上,我通過指令touch + test(文件名).launch
創(chuàng)建了新的test.launch文件在launch文件中改寫成以下內容:
<launch>
<!--首先我將原先選擇機器人模型,全部設置為了waffle機器人模型-->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type turtlebot3_waffle"/>
<!--因為需要給每個機器人設置初始位置,我將原先的宏定義刪除,選擇直接在加載的時候定義機器人的初始位置-->
<!-- 運行gazebo仿真環(huán)境 --> <!-- 沒有變化 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
<!-- 加載多個機器人時需要加入<group>標簽 -->
<!-- 注意每個機器人都要有一個命名空間,且名字不同-->
<!--在.urdf.xacro后要聲明且在下面顯示模型后面也要跟上命名空間的名字 -->
<group ns="1">
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=1" />
<!--在-param robot_description后可以指定機器人的初始位置,類似于默認參數(shù),如果不傳入數(shù)據(jù)默認機器人的初始位置是(0,0,0),傳入實參后會改變初始位置 -->
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 1 -param robot_description -x -2.0" />
</group>
<group ns="2">
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=2" />
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 2 -param robot_description -x -1.5" />
</group>
<group ns="3">
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=3" />
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 3 -param robot_description -x -2.0 -y 0.7" />
</group>
<group ns="4">
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=4" />
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 4 -param robot_description -x -1.5 -y 0.7" />
</group>
</launch>
運行test.launch文件,即可在Gazebo仿真環(huán)境中加載多個機器人模型。文章來源:http://www.zghlxwxcb.cn/news/detail-860311.html
總結
在Gazebo仿真環(huán)境中成功加載了多個機器人模型,接下來想辦法實現(xiàn)在Gazebo中實現(xiàn)多機器人的編隊控制。文章來源地址http://www.zghlxwxcb.cn/news/detail-860311.html
到了這里,關于在gazebo仿真環(huán)境中加載多個機器人的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!