文章1:四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)
文章2:四旋翼无人机仿真之hector_quadrotor(二)键盘teleop_twist_keyboard控制无人机飞行
前面两部分已经详细介绍了关于hector无人机的主要内容、安装方式以及如何通过键盘操控无人机等,在又经历了一段时间的学习之后(主要是研究如何更换世界环境world以及插入所需传感器等,目前已经可以使用IMU、GPS等传感器,已经通过urdf的形式,作为xacro提供给无人机模型urdf文件进行引用。主要放置在quadrotor_plugins.gazebo.xacro文件中)
本节将会基于以上进展,展示如何进行无人机上传感器数据的读取、记录以及复现工作。
需要掌握ROS+Gazebo基础,并对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
可以先创建一个文件夹存放数据:
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则指定了我们要记录信息的话题。
按ctrl+C结束记录,此时在该文件夹下就会存在imu.bag文件。
rosbag info imu.bag
此时会显示记录文件中数据的详细信息:
输入rosbag play imu.bag
即可利用里面的数据重现我们节点的运行状态:
默认情况下,rosbag play命令会等待0.2秒之后才开始发布信息,这是为了在发布信息之前通知所有订阅信息的节点,以使它们能够及时地接收到rosbag play发布的信息。这个等待时间可以用-d选项指定。
因为rosbag record记录数据是有延迟的,所以在执行rosbag play最初的一小段时间里消息不会发布,使用-s选项后跟秒数可以跳过bag文件记录的前几秒。-r,它可以改变信息发布的速度:
rosbag play -r 2 <bagfile_name> #以两倍的速度发布记录的消息
通过上面的操作可以发现,数据是以.bag文件的形式被封装,无法直接打开,因此也就不能读取里面的数据,此时,如果想要读取被记录的数据,需要通过命令进行格式转换,用到的是显示数据命令rostopic echo
。
rostopic echo -b imu.bag -p /raw_imu > imu.txt
通过此命令,就可以将imu.bag文件中/raw_imu话题的消息转换到imu.txt文件中,得到带有数据主题等信息的、可读取的文本文件:
可以看到数据还是比较多的,因为IMU读取数据的内容还是比较丰富的,而我们可能仅需要查看部分数据(如线性加速度等),此时便可在转换时设置,即指定新的话题名称与文件名称:
rostopic echo -b imu.bag -p /raw_imu/linear_acceleration > imu_linear.txt
可以看到里面的数据就是我们想要的线性加速度数据,清晰了许多。
经过如上的操作之后,得到了需要的IMU数据信息,在读取的同时,也可以进行数据可视化,即rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据。
首先,在一个新终端中输入: rosrun rqt_plot rqt_plot
开启绘图工具GUI界面。
输入rosbag play imu.bag
,重现数据,此时在左上角文本框中便可以输入想要绘制话题的名称,本次为线性角速度(/raw_imu/linear_acceleration),这样在数据复现时,便会得到数据的图像信息:
通过上述方式,简要介绍了在ROS+Gazebo中如何通过ROS命令读取无人机hector上所需的传感器数据,以及数据的读写、复现、成图等工作,一定程度上实现了平台的有效利用,提高了操作效率。
参考教程:https://www.freesion.com/article/4698118426/