Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程

这个是篇学习 Handsfree_ros_imu 传感器的博客记录

官方教程链接见:

https://docs.taobotics.com/docs/hfi-imu/

产品功能

IMU 内有 加速度计陀螺仪磁力计这些传感器,通过固定 imu 到物体上后,可以获取物体在运动过程中的一些信息,如物体的三轴加速度信息,三轴角速度信息,三轴角度信息,三轴磁场信息。通过这些信息,可以得知物体运动过程中的状态。

产品型号

  • A9:可获取三轴加速度信息,三轴角速度信息,三轴角度信息,三轴磁场信息

A9 型号

  • 9 轴 IMU。
  • 9 轴融合算法。
  • 自主研发滤波算法。
  • 自主研发抗磁干扰算法,有效防止磁场的干扰。上电初始化成功后生效。
  • 输出频率 150 HZ。
  • yaw 值为 0 时, x 轴会指向北方。
  • 上电后会有10 秒左右的时间进行初始化,期间会将周围的磁场数据初始化到模块内,所以不一定会指向正北方,跟模块所在环境的磁场有一定关系。
  • IMU 模块需要静置启动 ,否则模块会自动切换到动态启动,零飘会采用到 flash 中的存储值,一般会有产生较大的偏差。
  • 静态精度 0.1 动态精度 0.5

IMU 是惯性测量单元(英文:Inertial measurement unit)的简称,是测量物体三轴姿态角(或角速率)以及加速度的装置。

一般情况,一个 IMU 包含了三个单轴的加速度计和三个单轴的陀螺仪,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺仪检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。

陀螺仪和加速度计是 IMU 的主要元件,其精度直接影响到惯性系统的精度。在实际工作中,由于不可避免的各种干扰因素,而导致陀螺仪及加速度计产生误差,从初始对准开始,其导航误差就随时间而增长,尤其是位置误差,这是惯导系统的主要缺点。

一般 xx 轴 IMU区别。

  1. 6 轴 imu:三个单轴的加速度计,三个单轴的陀螺仪
  2. 9 轴 imu:三个单轴的加速度计,三个单轴的陀螺仪,三个单轴磁力计
  3. 10 轴 imu:三个单轴的加速度计,三个单轴的陀螺仪,三个单轴磁力计,一个气压计

常见名称解析

三轴陀螺仪: 三轴陀螺仪是惯性导航系统的核心敏感器件,其最大的作用就是“测量角速度,以判别物体的运动状态,所以也称为运动传感器“

三轴加速度计: 是测量运载体线加速度的仪表

磁力计: 用于测试磁场强度和方向

气压计: 通过测量大气压强,来计算出高度

6 轴融合算法: 加速计对机体振动非常敏感,稍有扰动,加速度方向就会偏移(外力与重力的合力),但是长期运行时,经过平滑滤波算法之后的加速计数据就比较可信。相比而言,陀螺仪则对外部扰动不敏感,反而是长时间积分后会出现角度漂移。因此实际应用中,都是将二者采集的数据进行融合,相互取长补短。

9 轴融合算法: 由于机体水平时,加速度计无法测量绕 Z 轴的旋转量,即偏航角 yaw,并且磁力计也同样无法测得z轴的旋转量。所以使用加速度计和磁力计同时对陀螺仪进行校正。

全姿态角: 全姿态角(All attitude angle)用来描述对象在空间中的方位姿态,有飞机(导弹)姿态角和卫星姿态角之分。飞机姿态角是按欧拉概念定义的,故亦称欧拉角 。飞机姿态角是由机体坐标系与地理坐标系之间的关系确定的,用航向角俯仰角横滚角 三个欧拉角表示。不同的转动顺序会形成不同的坐标变换矩阵,通常按航向角、俯仰角和横滚角的顺序来表示机体坐标系相对地理坐标系的空间转动。

零飘: 一些因素导致电路输出端电压偏离原固定值而上下漂动的现象 它又被简称为:零漂。

ROS 坐标系: 请参考 ROS 坐标系 - CSDN

角度精度: 请参考倾角传感器中的精度是指什么 - CSDN

 

linux + ROS 下使用安装软件包(需要安装好 ROS)

我使用的是 ubuntu 20.04,ROS Noetic,python3 ,所以终端运行:

sudo apt-get install ros-noetic-imu-tools ros-noetic-rviz-imu-plugin

pip3 install pyserial

下面以官方安装为例,你也可以根据自身使用的情况来安装:

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

Python 驱动测试

以 Ubuntu20.04,A9,python3 为例:

注意:先不要插 IMU 的 USB ,在终端输入 ls /dev/ttyUSB* 来检测一下,然后将 USB 插入电脑,再在终端输入 ls /dev/ttyUSB* 来检测一下,多出来的 ttyUSB 设备就是 IMU 的串口

 我检查出的USB端口为ttyUSB0,这个在后续修改文件时会用到。

进入脚本目录,修改对应的 python 脚本中 /dev/ttyUSB0(脚本默认用的 /dev/ttyUSB0) 为你电脑识别出来的数字:

 接着,可通过 cd 命令到脚本所在的目录,也可以在脚本所在的目录打开终端,然后通过 python 命令运行脚本,下面开始演示:

hfi_a9.py 驱动运行成功后的截图

在Linux的终端输入:

python3 hfi_a9.py

 

hfi_a9_ui.py 驱动运行成功后的截图

在Linux的终端输入:

python3 hfi_a9_ui.py

 

 

ROS 驱动和可视化

以 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 设备修改对

  • 相关文件说明

    • display_and_imu.launch,打开打开 IMU 驱动节点和用 visual 编写的可视化模型。(仅支持 ubuntu 16.04)
    • handsfree_imu.launch,打开用 IMU 驱动节点。
    • rviz_and_imu.launch,打开 IMU 驱动节点和 Rviz 可视化。
    • view_display .launch,单独打开用 visual 编写的可视化模型。
    • view_rviz.launch,单独打开Rviz 可视化。

下面继续运行测试:

新开一个终端,运行 rviz_and_imu.launch:

roslaunch handsfree_ros_imu rviz_and_imu.launch imu_type:=a9

 

官方文档中的一个比较有趣的点是视觉SLAM 和 IMU 融合

        视觉 SLAM 容易受图像遮挡,光照变化,运动物体干扰弱纹理场景等影响,单目视觉无法测量尺度,深度信息往往无法直接获取,仅通过单张图像无法获得像素的深度信息,需要通过三角测量的方法来估计地图点的深度。此外单目纯旋转运动无法估计,快速运动时易丢失。

        视觉与 IMU 融合之后会弥补各自的劣势,可利用视觉定位信息来估计 IMU 的零偏,减少IMU由零偏导致的发散和累积误差。IMU 可以为视觉提供快速运动时的定位,IMU 可以提供尺度信息,避免单目无法测尺度。

         最后指出,IMU 设计的应用领域广泛,在军航空航天、航海、军事、医疗、娱乐、机器人、车辆等领域都有这重要的作用。

 

IMU的数据文本记录

        上述操作运行下来,IMU的数据已经可以实时的输出了,如果想要将这些数据保存一段下来,可以继续看下面的内容:

 打开终端,运行 imu 驱动:

roslaunch handsfree_ros_imu handsfree_imu.launch imu_type:=a9

接着新开一个终端,输入:

rostopic echo-b xxx.bag-p/handsfree/imu>data_record.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣LCR 166. 珠宝的最高价值(java 动态规划)

Problem: LCR 166. 珠宝的最高价值 文章目录 解题思路思路解题方法复杂度Code 解题思路 思路 改题目与本站64题实质上是一样的,该题目在64题的基础上将求取最小路径和改成了求取最大路径和。具体实现思路如下: 1.定义一个int类型的二维数组dp大小为给定…

代码随想录第五十五天——判断子序列,不同的子序列

leetcode 392. 判断子序列 题目链接:判断子序列 确定dp数组及下标的含义 dp[i][j]:以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列长度为dp[i][j]确定递推公式 分为两种情况:s[i - 1] 与t[j - 1]相…

一起学习python类的属性装饰器@property

之前文章我们介绍了class的一些通用功能,比如类属性/类方法/实例属性/实例方法等,之前的属性可以直接修改和访问(设置私有属性,不能直接访问,可通过对象名._[类名][属性名]的方式访问),没有一些权限的控制逻…

049.Python包和模块_虚拟环境超详细讲解

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理?

环境 戴尔R420 服务器 1U 2台直连存储 4U CentOS 7 问题描述 IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理? 服务器上电开机就出现进入紧急模式 Welcome to emergency mode! After logging in, type “journalctl …

开关电源PFC电路原理详解及matlab仿真

PFC全称“Power Factor Correction”,意为“功率因数校正”。PFC电路即能对功率因数进行校正,或者说能提高功率因数的电路。是开关电源中很常见的电路。 在电学中,功率因数PF指有功功率P(单位w)与视在功率S&#xff08…

动态pv策略和组件

pv和pvc,存储卷: 存储卷: emptyDir 容器内部,随着pod销毁,emptyDir也会消失 不能做数据持久化 hostPath:持久化存储数据 可以和节点上的目录做挂载。pod被销毁了数据还在 NFS:一台机器&am…

centos7下升级openssh9.4p1及openssl1.1.1v版本

背景:客户服务器扫描出一些漏洞,发现和版本有关,漏洞最高的版本是9.3p2,所以我们安装一个openssh9.4p1版本及openssl1.1.1v版本 虽然我们进行了镜像备份,为了安全先安装telnet以防止升级失败无法通过ssh连接服务器 一…

大模型在广告ctr预估中的应用

背景 预训练大模型在ctr预估方面取得了不错的效果,但是应用大模型方面还主要停留在提取离线预训练,然后使用大模型的打分结果或者中间的embedding向量,这种级联的应用方式相对灵活方便。但是这种使用大模型提取特征的方式存在自身的问题&…

无法解析的外部符号 “public: virtual void * __cdecl MyTcpsocket::qt_metaca

问题:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2001 无法解析的外部符号 "public: virtual void * __cdecl MyTcpsocket::qt_metacast(char const *)" (?qt_metacastMyTcpsocketUEAAPEAXPEBDZ) SmartTool D:\…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

鸿蒙基础开发实战-(ArkTS)像素转换

像素单位转换API的使用 主要功能包括: 展示了不同像素单位的使用。展示了像素单位转换相关API的使用。 像素单位介绍页面 在像素单位介绍页面,介绍了系统像素单位的概念,并在页面中为Text组件的宽度属性设置不同的像素单位,fp…

AI副业拆解:文字生成图文绘本,赋予你的故事生命,Story Agent智能绘本创作神器震撼登场!

大家好我是在看,记录普通人学习探索AI之路。 对话即创作,颠覆传统!🚀 Story Agent,一款前所未有的开源故事绘本生成智能体,让你与科技的边界交融,以对话的形式轻松唤醒内心深处的故事精灵。&…

Object.keys()

目录 1、Object.keys() 是什么? 2、Object.keys(obj) 用法: 2.1 如果对象是一个对象,会返回对象的属性名组成的数组; 2.2 如果对象是一个数组,则返回索引组成的数组: 2.3 如果是字符串,返回…

【微服务】日志搜集es+kibana+filebeat+redis+logstash(单机)

日志搜集系统搭建 基于7.17.16版本 ps: 项目是toB的,日志量不大 前置准备 软件下载 7.17.16版本。8.x版本需要JDK11 elastic.co/downloads/past-releasesJDK java8 Linux elastic 软件不能以root用户启动,需要创建用户 sudo useradd elastic #给此…

【Redis】Redis持久化方式

Redis 中有两种持久化方式,分别为 RDB 和 AOF。 RDB RDB 全称 Redis Database Backup file,也叫做 Redis 数据快照。简单来说就是把 Redis 中的数据记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。 RDB有…

Vue新手村(二)

目录 1、计算属性 2、事件修饰符 2.1、stop事件修饰符 2.2、prevent事件修饰符 2.3、self事件修饰符 2.4、once事件修饰符 3、按键修饰符 3.1、enter回车键 1、计算属性 计算属性: computed:vue官方提供一个计算属性作用:在完成某种业…

文件上传进阶绕过技巧(一)和靶场实战

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、环境准备 请移步《文件上传靶场实战:upl…

【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)

目录 问题描述 思路分析 数据结构构建部分 计算部分 代码实现 结果测试 此问题解决方法不唯一,这里介绍的是一种使用数组和循环实现的简单办法 问题描述 思路分析 问题的要求是输入一个日期,计算这是当年的第几天——要解决这个问题,逻…

S7-200SMART实例之冒泡法排序子程序

需求分析 编写程序实现冒泡法排序的算法。 冒泡法排序是一种简单的排序算法。因其过程如同水中气泡最终会上浮到水面一样,故被形象地称为“冒泡法排序”。 实现原理 根据以上需求分析可以按以下步骤实现算法: 1.比较相邻的元素。如果第一个比第二个…