当前位置:   article > 正文

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

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

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

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

rostopic hz /mavros/imu/data_raw
  • 1

通常情况下固定在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
  • 1

执行完上述命令后,如果终端显示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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

<launch>
    <node name="set_message_interval_node" pkg="YOUR_PACKAGE_NAME" type="set_message_interval.py" output="screen"/>
</launch>
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/422026
推荐阅读
相关标签
  

闽ICP备14008679号