多个机器人中让领导者导航,相比于单个机器人导航需要修改的参数如下
主要是多机器人中的领导者与单个机器人发布的话题名称不一样
小车启动文件设置与简化
1设置
在小车的xacro文件的diff插件中添加
<commandTopic>$(arg bodyframe)/cmd_vel</commandTopic>
<odometryTopic>$(arg bodyframe)/odom</odometryTopic>
<robotBaseFrame>$(arg bodyframe)/base_footprint</robotBaseFrame>
多机器人launch里其中一个小车的描述如下
<group ns="ares1">
<param name="robot_description" command="$(find xacro)/xacro.py '$(find mastering_ros_robot_description_pkg)/urdf/diff_wheeled_robot_model.xacro' bodyframe:=ares1 ns:= ares1" />
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" output="screen" >
<param name="publish_frequency" type="double" value="50.0" />
<param name="tf_prefix" value="ares1" />
</node>
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model ares1 -param robot_description -x 0 -y -2"/>
</group>
对以上代码解释如下
<group ns="ares1">
<param name="robot_description" command="$(find xacro)/xacro.py '$(find mastering_ros_robot_description_pkg)/urdf/diff_wheeled_robot_model.xacro' bodyframe:=ares1 ns:= ares1" />
group ns="ares1"指定该小车的命名空间为ares1,这样xacro中的topic话题前就会加上命名空间(前提时话题名称必须是相对名称即名称前面没有全局命名空间“/”),例如激光话题名为scan而不是/scan。这样节点发布时就会自动在前方加入/ares1从而将相对名称解析为全局名称称:/ares+scan=>/ares/scan
注意:此时这种添加命名空间的方式不对diff插件起作用。diff插件的参数传递是通过该语句的bodyframe实现的。这是因为diff插件中有一句
<robotNamespace>/</robotNamespace>
这样就已经指定插件中的topic和frame为全局的,不能更改了。这也是需要优化的地方
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" output="screen" >
<param name="publish_frequency" type="double" value="50.0" />
这些是导航所需要的
<param name="tf_prefix" value="ares1" />
上述语句是为了将命名空间加到xarco中的frame中(之间只是让topic话题加上命名空间),这样小车发布的tf关系中就带有命名空间了。当然也不对diff插件起作用,原因同上。
2简化
去掉小车xacro文件里diff插件中的这一句
<robotNamespace>/</robotNamespace>
这样可以去掉
<commandTopic>$(arg bodyframe)/cmd_vel</commandTopic>
<odometryTopic>$(arg bodyframe)/odom</odometryTopic>
<robotBaseFrame>$(arg bodyframe)/base_footprint</robotBaseFrame>
以及launch文件中
bodyframe:=ares1
只需保证diff插件中需要加入命名空间的topic和frame的名称为相对名称即可。
<commandTopic>cmd_vel</commandTopic>
<odometryFrame>/odom</odometryFrame>
<odometryTopic>odom</odometryTopic>
<robotBaseFrame>base_footprint</robotBaseFrame>
这里odom坐标系的名称设为全局名称。原因我现在也不太清楚,欢迎各位指教!
参考
https://www.guyuehome.com/8912
https://www.cnblogs.com/zjiaxing/p/5541841.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)