赞
踩
官方教程链接见:
https://docs.taobotics.com/docs/hfi-imu/
IMU 内有 加速度计,陀螺仪,磁力计这些传感器,通过固定 imu 到物体上后,可以获取物体在运动过程中的一些信息,如物体的三轴加速度信息,三轴角速度信息,三轴角度信息,三轴磁场信息。通过这些信息,可以得知物体运动过程中的状态。
IMU 是惯性测量单元(英文:Inertial measurement unit)的简称,是测量物体三轴姿态角(或角速率)以及加速度的装置。
一般情况,一个 IMU 包含了三个单轴的加速度计和三个单轴的陀螺仪,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺仪检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。
陀螺仪和加速度计是 IMU 的主要元件,其精度直接影响到惯性系统的精度。在实际工作中,由于不可避免的各种干扰因素,而导致陀螺仪及加速度计产生误差,从初始对准开始,其导航误差就随时间而增长,尤其是位置误差,这是惯导系统的主要缺点。
一般 xx 轴 IMU区别。
三轴陀螺仪: 三轴陀螺仪是惯性导航系统的核心敏感器件,其最大的作用就是“测量角速度,以判别物体的运动状态,所以也称为运动传感器“
三轴加速度计: 是测量运载体线加速度的仪表
磁力计: 用于测试磁场强度和方向
气压计: 通过测量大气压强,来计算出高度
6 轴融合算法: 加速计对机体振动非常敏感,稍有扰动,加速度方向就会偏移(外力与重力的合力),但是长期运行时,经过平滑滤波算法之后的加速计数据就比较可信。相比而言,陀螺仪则对外部扰动不敏感,反而是长时间积分后会出现角度漂移。因此实际应用中,都是将二者采集的数据进行融合,相互取长补短。
9 轴融合算法: 由于机体水平时,加速度计无法测量绕 Z 轴的旋转量,即偏航角 yaw,并且磁力计也同样无法测得z轴的旋转量。所以使用加速度计和磁力计同时对陀螺仪进行校正。
全姿态角: 全姿态角(All attitude angle)用来描述对象在空间中的方位姿态,有飞机(导弹)姿态角和卫星姿态角之分。飞机姿态角是按欧拉概念定义的,故亦称欧拉角 。飞机姿态角是由机体坐标系与地理坐标系之间的关系确定的,用航向角 、俯仰角 和横滚角 三个欧拉角表示。不同的转动顺序会形成不同的坐标变换矩阵,通常按航向角、俯仰角和横滚角的顺序来表示机体坐标系相对地理坐标系的空间转动。
零飘: 一些因素导致电路输出端电压偏离原固定值而上下漂动的现象 它又被简称为:零漂。
ROS 坐标系: 请参考 ROS 坐标系 - CSDN
角度精度: 请参考倾角传感器中的精度是指什么 - CSDN
我使用的是 ubuntu 20.04,ROS Noetic,python3 ,所以终端运行:
sudo apt-get install ros-noetic-imu-tools ros-noetic-rviz-imu-plugin
pip3 install pyserial==3.5
下面以官方安装为例,你也可以根据自身使用的情况来安装:
sudo apt-get install git -y
mkdir -p ~/handsfree/handsfree_ros_ws/src/
cd ~/handsfree/handsfree_ros_ws/src/
git clone -b new https://gitee.com/HANDS-FREE/handsfree_ros_imu.git
cd ~/handsfree/handsfree_ros_ws/
catkin_make
cd ~/handsfree/handsfree_ros_ws/src/handsfree_ros_imu/scripts/
sudo chmod 777 *.py
echo "source ~/handsfree/handsfree_ros_ws/devel/setup.sh" >> ~/.bashrc
source ~/.bashrc
以 Ubuntu20.04,A9,python3 为例:
注意:先不要插 IMU 的 USB ,在终端输入 ls /dev/ttyUSB*
来检测一下,然后将 USB 插入电脑,再在终端输入 ls /dev/ttyUSB*
来检测一下,多出来的 ttyUSB 设备就是 IMU 的串口
我检查出的USB端口为ttyUSB0
,这个在后续修改文件时会用到。
进入脚本目录,修改对应的 python 脚本中 /dev/ttyUSB0(脚本默认用的 /dev/ttyUSB0) 为你电脑识别出来的数字:
接着,可通过 cd
命令到脚本所在的目录,也可以在脚本所在的目录打开终端,然后通过 python
命令运行脚本,下面开始演示:
在Linux的终端输入:
python3 hfi_a9.py
在Linux的终端输入:
python3 hfi_a9_ui.py
以 Ubuntu20.04,A9,python3 为例:
先不要插 IMU 的 USB ,在终端输入 ls /dev/ttyUSB*
来检测一下,然后在将 USB 插入电脑,再在终端输入 ls /dev/ttyUSB*
来检测一下,多出来的 ttyUSB 设备就是 IMU 的串口。
随后进入脚本目录,修改对应的 launch 文件中的 /dev/ttyUSB0(脚本默认用的 /dev/ttyUSB0)为你电脑识别出来的数字:
打开终端,运行 imu 驱动:
roslaunch handsfree_ros_imu handsfree_imu.launch imu_type:=a9
imu 启动成功的截图如下:
打开两个新终端输入分别输入下面两行命令:
rostopic echo /handsfree/imu
rostopic echo /handsfree/mag
同理,如需要运行其他 launch 文件,需要先确保 launch 文件中的 /dev/ttyUSB 设备修改对
相关文件说明
新开一个终端,运行 rviz_and_imu.launch:
roslaunch handsfree_ros_imu rviz_and_imu.launch imu_type:=a9
新开一个终端,运行 get_imu_rpy.py:
rosrun handsfree_ros_imu get_imu_rpy.py
这些输出是来自 get_imu_rpy.py
脚本的输出,它显示了IMU(惯性测量单元)的角度信息,包括滚转(Roll)、俯仰(Pitch)和偏航(Yaw)角度。每行的输出格式如下:
[INFO] [时间戳]: Roll = 滚转角度, Pitch = 俯仰角度, Yaw = 偏航角度
其中,时间戳是输出消息的时间戳,滚转角度表示物体绕X轴旋转的角度,俯仰角度表示物体绕Y轴旋转的角度,偏航角度表示物体绕Z轴旋转的角度。
新开一个终端, 输入:
rqt_graph
官方文档中的一个比较有趣的点是:视觉SLAM 和 IMU 融合
视觉 SLAM 容易受图像遮挡,光照变化,运动物体干扰弱纹理场景等影响,单目视觉无法测量尺度,深度信息往往无法直接获取,仅通过单张图像无法获得像素的深度信息,需要通过三角测量的方法来估计地图点的深度。此外单目纯旋转运动无法估计,快速运动时易丢失。
视觉与 IMU 融合之后会弥补各自的劣势,可利用视觉定位信息来估计 IMU 的零偏,减少IMU由零偏导致的发散和累积误差。IMU 可以为视觉提供快速运动时的定位,IMU 可以提供尺度信息,避免单目无法测尺度。
最后指出,IMU 设计的应用领域广泛,在军航空航天、航海、军事、医疗、娱乐、机器人、车辆等领域都有这重要的作用。
ROS命令的常用操作参考:【工作向】ros常用命令_rosbag play 控制速度-CSDN博客
上述操作运行下来,IMU的数据已经可以实时的输出了,如果想要将IMU的数据保存一段下来,可以继续看下面的内容:
如果您想保存IMU模块的姿态和角度运动等信息到一个文件中,您需要使用 rosbag
工具来记录这些信息,而不是 rostopic echo
命令。rosbag
可以捕获ROS话题消息并将其保存到 .bag
文件中,然后您可以在以后分析或提取所需的数据。
以下是如何使用 rosbag
来记录IMU话题的步骤:
打开终端,运行 imu 驱动:
roslaunch handsfree_ros_imu handsfree_imu.launch imu_type:=a9
接着新开一个终端,使用以下命令启动 rosbag
记录IMU话题的数据:
rosbag record -O /home/hjx/handsfree/imu_data_record/imu_data.bag /handsfree/imu
-O imu_data.bag
:这个选项指定了输出 .bag
文件的名称,您可以根据需要选择一个文件名。/handsfree/imu
:这是您要记录的IMU话题的名称,确保与您的实际话题名称匹配。rosbag
开始记录数据。它会监听IMU话题,并将收到的消息保存到 .bag
文件中。rosbag
记录,可以按下 Ctrl+C
来停止记录。可以使用以下命令查看 .bag
文件中的数据:
rosbag info /home/hjx/handsfree/imu_data_record/imu_data.bag
这将显示指定路径下的有关 .bag
文件的信息,包括记录的话题和消息数量:
如果您想要提取数据并将其保存到文本文件中,可以使用以下命令:
rosbag play /home/hjx/handsfree/imu_data_record/imu_data.bag -l -p /handsfree/imu > /home/hjx/handsfree/imu_data_record/imu_data.txt
保存的文件为下图所示:
如果您要将终端实时输出的数据保存到文本文件或CSV文件中,可以使用以下方法:
以get_imu_rpy.py
文件为例子,新开一个终端,执行 get_imu_rpy.py,在一段时间后,按下 Ctrl+C
来停止记录。
保存为文本文件(.txt
):
rosrun handsfree_ros_imu get_imu_rpy.py > /home/hjx/handsfree/imu_data_record/imu_data_rpy.txt
此命令将get_imu_rpy.py
的输出重定向到imu_data.txt
文件中
保存为CSV文件:
rosrun handsfree_ros_imu get_imu_rpy.py > /home/hjx/handsfree/imu_data_record/imu_data_rpy.csv
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。