dbc文件的value description 如何编辑_如何在Gazebo中实现多机器人仿真?

本文介绍了如何在Gazebo环境中实现多机器人仿真,包括同时控制多个机器人和单独控制一个机器人的方法。此外,还提及了dbc文件的value description编辑,鼓励读者访问古月居网站(guyuehome.com)投稿,成为签约作者。
摘要由CSDN通过智能技术生成
gazebo是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境,以可视化的方式进行显示。 在ros学习及研发过程中,经常需要使用gazebo来进行3D仿真,对模型的各种物理参数、控制代码等进行实物前的操练。在多智能体协同控制的研究中,需要在gazebo中添加多个机器人用于仿真,那么,应该如何将一个乃至多个机器人,放入gazebo仿真环境中呢? 单机器人仿真 在gazebo中放入机器人的操作通常用launch文件实现,步骤可归纳为: 设置launch文件参数-运行gazebo仿真环境-加载机器人模型描述参数-加载机器人模型 其中有关于urdf模型的构建可以参考古月学院的课程《一起从零手写URDF模型》( 在我的仿真任务中代码如下:
                                                                                                                   args="-urdf -model ares -param robot_description"/>

4bcf107c55a37e36a14e00e564e877e7.png

多机器人仿真 相比于单机器人,多机器人仿真需要在原基础上加入标签,做到用同样的descripion配置文件加载多个独立的机器人。 具有ns属性,可以将节点组推送到单独的命名空间中。 在前面的基础上,在launch文件中改写成以下内容:
                      args="-urdf -model 命名空间 -param robot_description -x 0"/>   
命名空间根据工程定义,在我的仿真中为ares1、ares2、ares3;“ -x 0 ”为机器人在gazebo中的初始位置。 将原本有关机器人状态的节点以及机器人模型放在标签内,这样被标签包围的节点,话题,参数,服务,都会在前面加入的前缀,如 /ares2/joint_state_publisher f14c6ab6286811948547ad2481b19028.png (在命名空间为ares2下的节点、话题等) 这样便可以加入独立的多个机器人模型,效果如下: c6ce24a6d2e6ca2e303c8673232e0eb2.png (多机器人仿真效果) 当及命名空间使用正确时,机器人的输入输出都应独立,如下图中三车搭载的摄像头所看的图像正确,无相互影响:

6f69520029ad2644917731d501efbe91.png

2a08e8032c06332c736c7fafb28c73ff.png

a4be60d64244f6450e2b4074f1766e0b.png

(ares1、ares2、ares3视角图像) 多机器人运动控制 在加入多个机器人后,想再做一下键盘对其的简单控制。

1)同时控制多个机器人

这里我使用的方法,是在机器人配置文件控制驱动插件代码中设置全局名称/cmd_vel
/cmd_vel/odomodomwheel_lf_jointwheel_rf_jointwheel_lb_jointwheel_rb_joint20.0base_link
然后在键盘控制节点中发布全局名称 /cmd_vel ,这样就可以简单地做到多机器人同时接收一致的控制指令:
vel_pub = rospy.Publisher('/cmd_vel',  Twist,   queue_size=1)
0667774090efc8b35ad1b6b0504caf1d.png (整体控制时的rqt_graph)

b176771e7d05ef880679b81d86f78050.gif

(整体控制时的效果)

2)单独控制一个机器人

与前面相对,在这里我们将发布和接收的cmd_vel全部设置为相对名称(相对名称的典型特征是它缺少全局名称带有的前斜杠“/”),在我们设置的命名空间内发布后,ROS将当前命名空间的名称加在相对名称的前面,从而将相对名解析为全局名称。 即做以下修改:
<commandTopic>cmd_velcommandTopic>vel_pub = rospy.Publisher('cmd_vel',  Twist,   queue_size=1)
在终端启动键盘控制节点时加上命名空间,即可实现对单个机器人的控制:
$ ROS_NAMESPACE=ares1 rosrun ares_teleop ares_teleop.py
dc77b96e3d51549e16315eaaf2b215bf.png (单独控制时的rqt_graph)

e55abd908a7147ffe2a6f5ec8a879f5a.gif

bacc4d0c91b262be7dd191bab75a3b40.gif

(单独控制时的效果) 在命名空间下,还有经常使用的重映射操作,这里就不再赘述,感兴趣的小伙伴可以参考古月君的文章《ROS探索总结(五十六)—— launch文件》。 在gazebo中加载多机器人仅仅是多智能体协同控制研究的第一步,之后还有大量的研究要做,我写的也只是个人总结 ,一定有很多不足之处,欢迎大家一起留言讨论,引用古月君的话作为总结,“怕什么真理无穷,进一寸有一寸的欢喜”,共勉!完整代码
<launch>      <arg name="world_name" value="$(find ares_gazebo)/worlds/playground.world"/>   <arg name="paused" default="false"/>   <arg name="use_sim_time" default="true"/>   <arg name="gui" default="true"/>   <arg name="headless" default="false"/>   <arg name="debug" default="false"/>      <include file="$(find gazebo_ros)/launch/empty_world.launch">       <arg name="world_name" value="$(arg world_name)" />       <arg name="debug" value="$(arg debug)" />       <arg name="gui" value="$(arg gui)" />       <arg name="paused" value="$(arg paused)"/>       <arg name="use_sim_time" value="$(arg use_sim_time)"/>       <arg name="headless" value="$(arg headless)"/>   include>   <group ns="ares1">     <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find ares_description)/urdf/ares_laser.xacro' ns:=ares1" />          <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >node>       <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >       <param name="publish_frequency" type="double" value="50.0" />node>          <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"           args="-urdf -model ares1 -param robot_description -x 0"/> group><group ns="ares2">     <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find ares_description)/urdf/ares_laser.xacro' ns:=ares2" />          <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >node>       <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >       <param name="publish_frequency" type="double" value="50.0" />node>          <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"           args="-urdf -model ares2 -param robot_description -x 0.8"/>group><group ns="ares3">     <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find ares_description)/urdf/ares_laser.xacro' ns:=ares3" />          <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >node>       <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >       <param name="publish_frequency" type="double" value="50.0" />node>          <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"           args="-urdf -model ares3 -param robot_description -y 0.8"/>group>launch>

古月居原创作者签约计划已开启,网站(guyuehome.com)已上线【投稿】功能,欢迎大家积极投稿,原创优质文章作者将有机会成为古月居签约作者。

d69372b39b6364e8516195c1726f6faf.png

67b8ebcaeffbe934c11c7ef99dbbc13b.gif 点击下方“阅读全文”查看课程《一起从零手写URDF模型》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值