gazebo多机器人仿真和move_base,diff_drive等gazebo包配置

2023-05-16

gazebo中的多机器人仿真指的是在gazebo中加入多个urdf,并控制机器人运动。下面是我总结的一些名称的命名规律

1 joint名称

在spawn_model中,通过-model model_name添加参数,则joint名称为: model_name::joint_name,该名称可以通过gazebo仿真查看,和命名空间无关。

2 topic名称

topic名称的修改是通过在launch file中加入命名空间实现的。值得注意的是:topic名称只需要修改一次,如果在最外层group加入了ns参数,或者通过include标签加入了ns参数,则里面包含的文件和节点都不应该添加命名空间ns参数。

举例:

  <include file="$(find agv_gazebo)/launch/agv_gazebo.launch" ns="agv_car0">
	<arg name="ns" value="agv_car0"/>
  </include>

那么在agv_gazebo.launch中所有的节点包括group就不应该再次添加ns标签。而我传入ns参数的原因是为了修改gazebo包中的一些参考系名称,所以传入了ns.

3 节点名称

节点名称也受命名空间影响,因此不同命名空间下的可以有同名的节点,不需要修改节点名称。如果指定节点name属性为node_name,那么实际情况下,节点名称会变为: ns\node_name

4 urdf中gazebo包配置相关的

如何将参数传入urdf或者xacro文件中:在加载入参数服务器时候添加参数,比如:

<param name="robot_description" 
		command="$(find xacro)/xacro '$(find agv_gazebo)/urdf/agv_car.urdf.xacro' ns:=$(arg ns)" />

然后在xacro文件中通过$(arg xxx)使用该参数,注意xacro中使用变量的方法是${xxx}

4.1 坐标系frame

可能在配置gazebo包,比如diff_drive中遇到,该值不受命名空间影响,需要自己修改为需要的值。比如说:

<odometryFrame>$(arg ns)/odom</odometryFrame>

4.2 配置topic

受到命名空间影响,不需要自己配置,比如

<odometryTopic>odom</odometryTopic>

实际发布的位置是ns/odom

4.3 配置 robotNamespace

需要自己配置,不受命名空间影响

<robotNamespace>$(arg ns)</robotNamespace>

5 launch文件中配置

5.1 坐标系frame配置

都需要自己添加,不受命名空间影响。比如

<param name="odom_frame_id" value="$(arg ns)/odom"/>

以及

<param name="local_costmap/robot_base_frame" value="$(arg ns)/base_footprint"/>

5.2 传感器配置

move_base中的scan需要自己添加命名空间:

<param name="scan" value="{sensor_frame: $(arg ns)/laser, data_type: LaserScan, topic: $(arg ns)/scan, marking: true, clearing: true}"/>

值得注意的是,这个laser的坐标系出现的位置是在urdf中指定的:

<plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so">
  <topicName>scan</topicName>
  <frameName>$(arg ns)/laser</frameName>
</plugin>

这个例子也很好体现了在urdf中,命名空间只影响topic,不影响frame

6 坐标系分析

有两种可行的坐标系,分别是每个机器人有一个独立的odom坐标系,以及共用一个odom坐标系,odom坐标系是里程计坐标系,不知道这两种的区别。我使用的是独立的odom坐标系。

独立的odom坐标系,例子是:https://blog.csdn.net/weixin_44388819/article/details/125875872

gmapping包会自动public
如果没用gmapping则用tf public
gazebo diff_drive包public
map
ns1/odom
ns2/odom
ns1/base_link
ns1/base_footprint

下面看下公用的odom参考系,例子是: https://www.guyuehome.com/4889

自己用tf public
gazebo diff_drive包public
map
odom
ns1/base_link
ns2/base_link
ns1/base_footprint

这里需要注意了:

  • 在urdf里面配置gazebo的diff_drive中parent标签和child标签必须填两种中的一种,
  • 如果是第二种,则需要自己用tf发布map和odom的关系,而且odom前面不能有命名空间。

我一开始同时参考他们两个例子,结果发现不对。后来发现两个例子的思路是有区别的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gazebo多机器人仿真和move_base,diff_drive等gazebo包配置 的相关文章

随机推荐

  • C/C++Linux服务器开发 一、磁盘存储链式的B树与B+树

    在前一篇博客中我们分析了 随处可见的红黑树 xff0c 相信大家都有了一定的了解 想了解的朋友可以去上面瞅瞅呢 而今天我们就要介绍适合磁盘存储的B树 b树的介绍 以及性质网上有很多 xff0c 不是很了解得可以先找找 xff0c 要知道B树
  • QWidget指定父类设置样式无效的解决方案

    第一种 xff1a 在派生的类种重写事件 xff0c 并添加下面几段代码 void NEWWidget paintEvent QPaintEvent QStyleOption opt opt init this QPainter p thi
  • Qt局域网聊天(群聊和私聊)

    本次设计是一个简易的局域网聊天 xff0c 功能设计主要分为群聊和私聊两部分 xff0c 每部分都支持基础聊天以及文件传输功能 参考了 Qt及Qt Quick开发实战精解 中群聊实例 xff0c 在群聊的基础设计了私聊这部分内容以及其他一些
  • 基于Qt、FFMpeg的音视频播放器设计一(准备环境)

    前言 xff1a 整个项目的源代码 https download csdn net download hfuu1504011020 10672140 最近刚完成基于Qt FFMpeg的音视频播放器相关C 43 43 程序 xff0c 实现了
  • 基于Qt、FFMpeg的音视频播放器设计二(FFMpeg视频处理)

    在上一篇中我们介绍了如何在VS2013中配置文件以及FFMpeg的开发环境准备 xff0c 本篇我们说下视频处理的原理以及实现 对于视频的处理我们这里对它分开总结 xff0c 不然看起来会显得很冗余复杂 xff0c 不易理解 主要分为以下几
  • 基于Qt、FFMpeg的音视频播放器设计三(Qt界面设计及OpenGL绘制视频)

    本部分总结了一下界面绘制和OpenGL绘制视频 xff0c 由于使用的是Qt的openGL xff0c 功能上没有那么复杂 xff0c 实现起来也比较简单 xff0c 毕竟人家已经给封好的 xff0c 完整的代码中使用OpenGL绘制视频
  • 基于Qt、FFMpeg的音视频播放器设计四(视频播放进度控制)

    上面介绍了如何使用opengl绘制视频和Qt的界面设计 xff0c 也比较简单 xff0c 现在我们看下如何控制视频播放及进度的控制 xff0c 内容主要分为以下几个部分 1 创建解码线程控制播放速度 2 通过Qt打开外部视频 3 视频总时
  • VS2008中Unicode编码转UTF-8编码

    今天在pc客户端传数据 Json格式 给服务端时 在存储到数据库 Mysql 时总是出现乱码现象 xff0c 使用的是http协议 xff0c 以及json的解码 后一篇说明 这里我们先说下转码 在vs2008中编码方式有Unicode编码
  • 串口显示乱码的原因总结

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • Linux出现Input/output error

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 错误 expected '}' before ' ' token

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 浅谈C语言中的布尔(bool)类型

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • C++类成员空间分配和虚函数表

    C 43 43 类成员空间分配和虚函数表 xff0c 非常详细的一篇文章 xff0c 受益匪浅 https www cnblogs com secondtonone1 p 7205108 html utm source 61 itdadao
  • 外部时钟与内部时钟区别 作用 使用条件

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • Ghostscript的介绍和移植

    关于ghostscript 以下简称gs Gs是一个地下工作者 xff0c 一般用户不熟悉它 xff0c 因为它上不和用户直接打交道 xff0c 下不直接接触打印机 但是在打印工作中它却扮演了极为重要的解色 一般从用户常见文件如图片或者wo
  • PPPoE on Android

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow P
  • 文件编程 创建目录mkdir 函数

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow L
  • VFY unable to resolve virtual method Landroid/support/v4/

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow 使
  • CUPS移植记录

    分享一下我老师大神的人工智能教程 零基础 xff01 通俗易懂 xff01 风趣幽默 xff01 还带黄段子 xff01 希望你也加入到我们人工智能的队伍中来 xff01 https blog csdn net jiangjunshow C
  • gazebo多机器人仿真和move_base,diff_drive等gazebo包配置

    gazebo中的多机器人仿真指的是在gazebo中加入多个urdf xff0c 并控制机器人运动 下面是我总结的一些名称的命名规律 1 joint名称 在spawn model中 xff0c 通过 model model name添加参数