IMU的学习记录

IMU的学习记录


一、IMU简单介绍

1.IMU原理

当我们晚上回到家,发现家里停电时,眼睛在黑暗中什么都看不见的情况下,只能根据自己的经验,极为谨慎地走小碎步,并不断用手摸周围的东西(比如冰箱),用以确定自己所在的位置。

IMU的原理和黑暗中走小碎步很相似。在黑暗中,由于自己对步长的估计和实际走的距离存在误差,走的步数越来越多时,自己估计的位置与实际的位置相差会越来越远。就像下图所示:

在这里插入图片描述

走第一步时,估计位置(黑人所在位置)与实际位置(白人所在位置)还比较接近;但随着步数增多,估计位置与实际位置的差别越来越大。图中的小人只朝一个方向移动,是一维的。根据此方法推广到三维,就是惯性测量单元的原理。

学术上的语言是:以牛顿力学定律为基础,通过测量载体在惯性参考系的加速度,将它对时间进行积分,且把它变换到导航坐标系中,就能够得到在导航坐标系中的速度、偏航角和位置等信息。

2.GPS+IMU

在无人驾驶系统中,GPS的更新频率一般为10Hz,IMU的更新频率一般为100Hz。

两个传感器共同工作时,可以给出频率100Hz的定位输出。下图是两传感器数据融合的原理图:
在这里插入图片描述
跑在控制器上的软件对信息的处理流程在时间维度上类似下图。在0~100ms的周期中,使用IMU进行9次位置的估计,待新的GPS定位数据进来时,则进行修正,以此实现高频率的定位结果输出。

在这里插入图片描述

二、IMU信息采集

1.xsense_driver

在这里插入图片描述
提示
[ERROR] [1551165884.109790]: Fatal: could not find proper MT device

运行命令:
sudo chmod 777 /dev/ttyUSB0 //给串口赋权限,USB转串口的赋权限命令
实在不行USB口重新插拔几次,至少我是这么做的。

2.rostopic list

在这里插入图片描述

3.rostopic

在这里插入图片描述
在这里插入图片描述
imu数据类型:
消息头/四元数/四元数残差/角速度/角速度残差/线速度/线速度残差

4.四元数转欧拉角

imu输出信息中没有欧拉角,为了方便观察所以写了一端代码,进行四元数转欧拉角。
可以直接采用ROS中四元数转欧拉角的函数

代码如下:

#include "ros/ros.h"
#include "geometry_msgs/Vector3.h"
#include "sensor_msgs/Imu.h"
#include "geometry_msgs/Quaternion.h"
#include "tf/transform_datatypes.h"

ros::Publisher rpy_publisher;
ros::Subscriber quat_subscriber;

void MsgCallback(const sensor_msgs::Imu msg)
{

    tf::Quaternion quat;

    quat = tf::Quaternion(msg.orientation.x,msg.orientation.y,msg.orientation.z,msg.orientation.w);
    
    // the tf::Quaternion has a method to acess roll pitch and yaw
    double roll, pitch, yaw;
    tf::Matrix3x3(quat).getRPY(roll, pitch, yaw);
 
    // the found angles are written in a geometry_msgs::Vector3
    geometry_msgs::Vector3 rpy;
    rpy.x = roll;
    rpy.y = pitch;
    rpy.z = yaw;
 
    // this Vector is then published:
    rpy_publisher.publish(rpy);
    ROS_INFO("published rpy angles: roll=%f pitch=%f yaw=%f", rpy.x, rpy.y, rpy.z);
}
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;
    rpy_publisher = n.advertise<geometry_msgs::Vector3>("rpy_angles", 1000);
    quat_subscriber = n.subscribe("/imu/data", 1000, MsgCallback);
 

    ROS_INFO("waiting for quaternion");
    ros::spin();
    return 0;
}

转欧拉角数据如下:

在这里插入图片描述

4.运行rqt

由于在平面上进行旋转,所以只有绕Z轴的数据变化,其余两个轴都为零。

在这里插入图片描述

5.运行rviz

需要加载:rviz_imu_plugin
这是一个显示sensor_msgs::Imu 消息的rviz插件
通过rviz可以显示此时的位姿,但是不能观察到位移的变化
在这里插入图片描述

总结

这是第一篇博客,学习的过程可能也需要多多总结,以后这就作为一个总结的地方吧!

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于IMU(惯性测量单元)的可穿戴式人体行为识别是一种通过收集和分析人体运动数据来识别和监测人的行为的技术。IMU是一种集成了加速度计、陀螺仪和磁强计的传感器,可以测量和记录人体的姿势、动作和运动。 这种识别技术可以应用于多个领域,例如运动训练、康复治疗和健康监测等。通过在身体的关键部位(例如手腕、腰部或脚踝)佩戴IMU传感器,可以实时地获取人体的运动数据。 基于IMU的人体行为识别系统使用机器学习算法对收集到的运动数据进行分析和处理。通过训练算法,系统可以学习和识别不同的行为模式,例如行走、跑步、爬楼梯、抬手等。一旦行为模式被识别,系统可以提供实时的反馈或记录并分析用户的运动习惯。 这种技术的应用潜力广泛。在运动训练中,基于IMU的行为识别可以帮助运动员改进姿势和技巧,提高运动表现。在康复治疗中,医疗专业人员可以使用这种技术来监测患者的运动进展,并定制更精确的康复计划。在日常生活中,基于IMU的行为识别还可以用于健康监测,例如检测老年人的跌倒风险或者预防职业性运动损伤等。 尽管基于IMU的可穿戴式人体行为识别技术已经取得了显著进展,但仍然存在一些挑战,例如传感器的位置和定位问题、数据处理的复杂性以及算法的准确性等。未来,随着技术的进步和发展,基于IMU的人体行为识别将会得到更广泛的应用和改进,为人们的健康和运动提供更全面的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值