四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)

系列文章目录

文章1:四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)
文章2:四旋翼无人机仿真之hector_quadrotor(二)键盘teleop_twist_keyboard控制无人机飞行


文章目录

  • 系列文章目录
  • 前言
    • hector无人机内部传感器数据读取(以IMU为例)
  • 一、运行hector与键盘操纵
  • 二、传感器数据读取与复现
    • 1.通过bag文件记录话题消息
    • 2.数据重现
    • 3.数据导出
    • 4.数据可视化
  • 总结


前言

前面两部分已经详细介绍了关于hector无人机的主要内容、安装方式以及如何通过键盘操控无人机等,在又经历了一段时间的学习之后(主要是研究如何更换世界环境world以及插入所需传感器等,目前已经可以使用IMU、GPS等传感器,已经通过urdf的形式,作为xacro提供给无人机模型urdf文件进行引用。主要放置在quadrotor_plugins.gazebo.xacro文件中)

本节将会基于以上进展,展示如何进行无人机上传感器数据的读取、记录以及复现工作。

需要掌握ROS+Gazebo基础,并对hector无人机功能包结构有简单了解

hector无人机内部传感器数据读取(以IMU为例)

一、运行hector与键盘操纵

首先,按照文章(二)的方式,打开hetcor无人机以及键盘操纵命令(均在工作区运行):

source devel/setup.bash
 roslaunch hector_quadrotor_demo test.launch

其中的test.launch是我进行world场景修改后的发布文件
Gazebo显示:

运行无人机电机,并通过键盘操纵:

source devel/setup.bash
rosservice call /enable_motors "enable: true"
rosrun teleop_twist_keyboard teleop_twist_keyboard.py

成功运行:
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第1张图片

二、传感器数据读取与复现

1.通过bag文件记录话题消息

可以先创建一个文件夹存放数据:

mkdir bagfile
cd bagfile

记录话题:

rosbag record -a

此命令为记录所有话题。
当然,在本工程中无人机通过ROS发布了许多topic话题,全部记录是不现实的,我们可以先查看话题名称,之后记录选定的话题:

rostopic list -v  #查询已有话题
rosbag record -O imu /raw_imu

这里,-O选项指定了我们要保存的bag文件的名字,本次以读取IMU数据为例(imu.bag),后面的/raw_imu则指定了我们要记录信息的话题。
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第2张图片

按ctrl+C结束记录,此时在该文件夹下就会存在imu.bag文件。

2.数据重现

rosbag info imu.bag

此时会显示记录文件中数据的详细信息:
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第3张图片输入rosbag play imu.bag
即可利用里面的数据重现我们节点的运行状态:
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第4张图片
默认情况下,rosbag play命令会等待0.2秒之后才开始发布信息,这是为了在发布信息之前通知所有订阅信息的节点,以使它们能够及时地接收到rosbag play发布的信息。这个等待时间可以用-d选项指定。

因为rosbag record记录数据是有延迟的,所以在执行rosbag play最初的一小段时间里消息不会发布,使用-s选项后跟秒数可以跳过bag文件记录的前几秒。-r,它可以改变信息发布的速度:

rosbag play -r 2 <bagfile_name>   #以两倍的速度发布记录的消息

3.数据导出

通过上面的操作可以发现,数据是以.bag文件的形式被封装,无法直接打开,因此也就不能读取里面的数据,此时,如果想要读取被记录的数据,需要通过命令进行格式转换,用到的是显示数据命令rostopic echo

rostopic echo -b imu.bag -p /raw_imu > imu.txt

通过此命令,就可以将imu.bag文件中/raw_imu话题的消息转换到imu.txt文件中,得到带有数据主题等信息的、可读取的文本文件:
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第5张图片可以看到数据还是比较多的,因为IMU读取数据的内容还是比较丰富的,而我们可能仅需要查看部分数据(如线性加速度等),此时便可在转换时设置,即指定新的话题名称与文件名称:

rostopic echo -b imu.bag -p /raw_imu/linear_acceleration > imu_linear.txt

四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第6张图片
可以看到里面的数据就是我们想要的线性加速度数据,清晰了许多。

4.数据可视化

经过如上的操作之后,得到了需要的IMU数据信息,在读取的同时,也可以进行数据可视化,即rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据。
首先,在一个新终端中输入: rosrun rqt_plot rqt_plot开启绘图工具GUI界面。
输入rosbag play imu.bag,重现数据,此时在左上角文本框中便可以输入想要绘制话题的名称,本次为线性角速度(/raw_imu/linear_acceleration),这样在数据复现时,便会得到数据的图像信息:
四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)_第7张图片

总结

通过上述方式,简要介绍了在ROS+Gazebo中如何通过ROS命令读取无人机hector上所需的传感器数据,以及数据的读写、复现、成图等工作,一定程度上实现了平台的有效利用,提高了操作效率。

参考教程:https://www.freesion.com/article/4698118426/

你可能感兴趣的:(自动驾驶,人工智能,机器学习,ubuntu,团队开发)