【PX4仿真】使用PX4+Gazebo+MAVROS+ROS进行无人机仿真中提高IMU消息频率的方法

在无人机仿真中,IMU(惯性测量单元)消息频率对于路径规划和感知的仿真至关重要。然而,在使用PX4+Gazebo+MAVROS+ROS进行仿真时,可能会遇到频率受限的情况。本文将介绍如何提高IMU消息频率。

通过以下命令可以查看到IMU消息的发布频率

rostopic hz /mavros/imu/data_raw

通常情况下固定在50Hz。
然而,通过gz topic --hz /gazebo/default/iris/imu命令查看到在Gazebo仿真环境中,IMU消息的频率可能会达到800~1000Hz,远高于ROS中的消息频率。

经过查询资料发现需要通过调整MAVROS节点的参数来提高IMU消息的发布频率(https://github.com/mavlink/mavros/issues/1455)。具体步骤如下:

  1. 首先,我们需要知道IMU消息在MAVLink中的ID。通过查询MavLink文档(https://mavlink.io/en/messages/common.html),我们可以得知IMU对应的ID为HIGHRES_IMU (#105)
  2. 使用rosservice call /mavros/set_message_interval命令来设置消息发布频率。例如,要将IMU消息的频率修改为200Hz,可以执行以下命令:
rosservice call /mavros/set_message_interval 105 200

执行完上述命令后,如果终端显示success: True,表示设置成功。

  1. 最后,通过rostopic hz /mavros/imu/data_raw命令再次查看IMU消息的频率,应该会看到频率已经提高。

通过第三部可以成功提高IMU消息的发布频率,但是我的电脑上显示频率为125Hz,并非200Hz。

我试了多组数值,如果设置/mavros/set_message_interval为150或者180,IMU频率可以到达148Hz左右,如果设置为500或者100,IMU频率可以到达230Hz左右。这一点具体的原因还没有查明,如果有懂的大佬可以在评论区留言交流。

注:若要修改/mavros/imu/data的频率,修改ATTITUDE_QUATERNION ( #31 )的interval即可。
鉴于每次重启仿真,都需要重新执行指令,会比较麻烦,所以可以写成脚本,并且加入launch文件中。

#!/usr/bin/env python
import rospy
from mavros_msgs.srv import MessageInterval

def set_message_interval():
    rospy.init_node('set_message_interval_client')
    rospy.wait_for_service('/mavros/set_message_interval')
    try:
        set_interval = rospy.ServiceProxy('/mavros/set_message_interval', MessageInterval)
        resp = set_interval(105, 1000)
        print("Set /mavros/imu/data_raw message interval: %s" % resp.success)
        resp = set_interval(31, 1000)
        print("Set /mavros/imu/data message interval: %s" % resp.success)

    except rospy.ServiceException as e:
        print("Service call failed: %s" % e)

if __name__ == "__main__":
    set_message_interval()

在仿真启动的launch文件添加下面的内容(将package换成自己的名称)

<launch>
    <node name="set_message_interval_node" pkg="YOUR_PACKAGE_NAME" type="set_message_interval.py" output="screen"/>
</launch>
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值