在gazebo下进行机器人cartographer算法仿真,出现的异常情况

在Gazebo环境下使用Cartographer进行机器人建图时遇到TF变换异常,错误源于robot_state_publisher和gazebo同时发布轮子坐标变换。解决方法是修改gazebo插件配置,关闭gazebo的轮子TF发布。此外,还可能出现机器人未发布odom话题或无法接收cmd_vel话题的问题,这可能与惯性矩阵配置或xacro文件编写有关,需确保xacro宏定义正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述-1

在gazebo下仿真cartographer建图算法的时候,出现以下TF变换异常报错:

[ERROR] [1584194344.911065094]: Ignoring transform for child_frame_id “left_wheel_link” from authority “unknown_publisher”

分析之后可以发现该问题主要是由于robot_state_publisher和gazebo中都发布了关于轮子的坐标变换,导致cartograoppher工作异常。

解决办法-1

将机器人的gazebo插件配置改为以下内容:

<gazebo>
        <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
            <rosDebugLevel>Debug</rosDebugLevel>
            <publishWheelTF>false</publishWheelTF>  <!-- 此处将gazebo的发布关闭 -->
            <robotNamespace>/</robotNamespace>
            <publishTf>1</publishTf>
            <publishWheelJointState>true</publishWheelJointState>
            <alwaysOn>true</alwaysOn>
            <updateRate>100.0</updateRate>
            <legacyMode>true</legacyMode>
            <leftJoint>left_wheel2base_link</leftJoint>
            <rightJoint>right_wheel2base_link</rightJoint> 
            <wheelSeparation>${base_link_radius * 2}</wheelSeparation> 
            <wheelDiameter>${wheel_radius * 2}</wheelDiameter> 
            <broadcastTF>1</broadcastTF>
            <wheelTorque>30</wheelTorque>
            <wheelAcceleration>1.8</wheelAcceleration>
            <commandTopic>cmd_vel</commandTopic> 
            <odometryFrame>odom</odometryFrame> 
            <odometryTopic>odom</odometryTopic>
            <odometrySource>world</odometrySource>
            <publishOdomTF>true</publishOdomTF>
            <robotBaseFrame>base_footprint</robotBaseFrame> 
        </plugin>
    </gazebo>

问题描述-2

在noetic 的ros版本, 如果使用gazebo工具进行cartographer机器人建图仿真, 可能会出现机器人未发布odom话题, 也无法接收cmd_vel的话题, 但是从启动时的加载log来看, 又可以知道libgazebo_ros_diff_drive.so插件加载正常。
而有时候,还会出现机器人的颜色不对,或者模型丢失。

解决办法-2

这时候很有可能是机器人的惯性矩阵没有正确配置,也很有可能是xacro文件没有正确编写, 而这其中很大一部分可能是因为使用xacro中宏定义函数, 在调用该函数的时候, 务必在使用前加上 xacro:, 才能保证gazebo加载正常, 举例如下:

  <xacro:macro name="foo" params="x">
    <in_foo the_x="${x}" />
  </xacro:macro>

  <xacro:macro name="foo" params="x:=0"/>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值