清爽css網(wǎng)站框架花關(guān)鍵詞排名系統(tǒng)
文章目錄
- 前言
- 一、基本概念
- 1、xacro
- 2、Gazebo 加載單個(gè)機(jī)器人模型
- 二、原先launch文件代碼
- 三、 修改launch文件加載多個(gè)機(jī)器人
- 總結(jié)
前言
單個(gè)機(jī)器人的各項(xiàng)仿真實(shí)驗(yàn)都基本完成,也實(shí)現(xiàn)了遠(yuǎn)程控制,接下來(lái)主要對(duì)多機(jī)器人編隊(duì)進(jìn)行仿真實(shí)驗(yàn),在進(jìn)行多機(jī)器人編隊(duì)控制前,先要在gazebo仿真中加載多個(gè)機(jī)器人。
一、基本概念
在gazebo中添加多個(gè)機(jī)器人需要寫或修改launch文件,通過在網(wǎng)上翻看別人的代碼,大致明白了調(diào)用gazebo仿真launch文件中各部分代碼的意思。下面是一些最最基本的概念,在修改launch前稍微了解一下。
1、xacro
類似于函數(shù)實(shí)現(xiàn),提高代碼復(fù)用率,優(yōu)化代碼結(jié)構(gòu),提高安全性
(1)宏定義
<xacro:macro name="宏名稱" params="參數(shù)列表(多參數(shù)之前使用空格分隔)">
....參數(shù)調(diào)用格式:${參數(shù)名}
</xacro:macro>
(2)宏調(diào)用
<xacro:宏名稱 參數(shù)1=xxx 參數(shù)2=xxx/>
(3)文件包含
機(jī)器人由多部件組成,不同部件可能封裝為單獨(dú)的xacro文件,最后再將不同的文件集成,組合為完整機(jī)器人,可以使用文件包含實(shí)現(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 加載單個(gè)機(jī)器人模型
<launch><!-- 將Urdf文件的內(nèi)容加載到參數(shù)服務(wù)器--><param name="robot_description"textfile=“$(find文件夾名)/urdf/.urdf文件“><!--啟動(dòng)gazebo--><include file="$(find gazebo_ros)/launch/empty_world.launch"/><!--在gazebo中顯示機(jī)器人模型--><node pkg="gazebo_ros"type="spawn_model"name="model"args="-urdf-model mycar-param robot_description"/></launch>
二、原先launch文件代碼
在大致看了上述的說(shuō)明后就能看懂,在gazebo仿真環(huán)境中加載一個(gè)機(jī)器人的launch文件了。
復(fù)制粘貼如下:根據(jù)上面的基本概念可以大概的明白代碼所描述的內(nèi)容。
(如我在圖中添加的注釋)
<launch>
<!--在所提供的burger, waffle, waffle_pi三種機(jī)器人呢模型中選擇要加載的類型--><arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> <!--設(shè)置機(jī)器人的x,y,z坐標(biāo),相當(dāng)于宏定義方面下面使用和后面的修改--><arg name="x_pos" default="-2.0"/><arg name="y_pos" default="-0.5"/><arg name="z_pos" default="0.0"/><!-- 運(yùn)行g(shù)azebo仿真環(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文件中直接加載機(jī)器人xacro模型描述文件--><param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /><!--在gazeb中顯示機(jī)器人模型,并設(shè)置初始的坐標(biāo)位置--><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啟動(dòng)結(jié)果如下:
三、 修改launch文件加載多個(gè)機(jī)器人
在理解了launch調(diào)用和加載的各項(xiàng)指令后,接下來(lái)實(shí)現(xiàn)在gazebo中加載多個(gè)機(jī)器人,相比于單機(jī)器人,多機(jī)器人仿真需要在原基礎(chǔ)上加入標(biāo)簽,做到用同樣的descripion配置文件加載多個(gè)獨(dú)立的機(jī)器人。
具有ns屬性,可以將節(jié)點(diǎn)組推送到單獨(dú)的命名空間中。在前面的基礎(chǔ)上,我通過指令touch + test(文件名).launch
創(chuàng)建了新的test.launch文件在launch文件中改寫成以下內(nèi)容:
<launch>
<!--首先我將原先選擇機(jī)器人模型,全部設(shè)置為了waffle機(jī)器人模型--><arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type turtlebot3_waffle"/><!--因?yàn)樾枰o每個(gè)機(jī)器人設(shè)置初始位置,我將原先的宏定義刪除,選擇直接在加載的時(shí)候定義機(jī)器人的初始位置--><!-- 運(yùn)行g(shù)azebo仿真環(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><!-- 加載多個(gè)機(jī)器人時(shí)需要加入<group>標(biāo)簽 --><!-- 注意每個(gè)機(jī)器人都要有一個(gè)命名空間,且名字不同--><!--在.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后可以指定機(jī)器人的初始位置,類似于默認(rèn)參數(shù),如果不傳入數(shù)據(jù)默認(rèn)機(jī)器人的初始位置是(0,0,0),傳入實(shí)參后會(huì)改變初始位置 --><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>
運(yùn)行test.launch文件,即可在Gazebo仿真環(huán)境中加載多個(gè)機(jī)器人模型。
總結(jié)
在Gazebo仿真環(huán)境中成功加載了多個(gè)機(jī)器人模型,接下來(lái)想辦法實(shí)現(xiàn)在Gazebo中實(shí)現(xiàn)多機(jī)器人的編隊(duì)控制。