Home » ROS与传感器教程 » ROS与传感器教程-razor-imu-9dof使用

ROS与传感器教程-razor-imu-9dof使用

ros与传感器-razor-imu-9dof使用

说明:

  • 介绍razor-imu-9dof相关信息,使用,校准等

razor_imu_9dof说明

  • razor_imu_9dof是一个为Sparkfun Razor IMU 9DOF提供ROS驱动程序的软件包。

  • 它还提供在Razor板上运行的Arduino固件,必须安装在Razor板上才能使系统正常工作。

  • 提供显示IMU板的姿态(roll翻滚,pitch俯仰和yaw偏航)的节点用于测试。

  • 库地址: https://github.com/KristofRobot/razor_imu_9dof.git

  • 这是针对不同Sparkfun Razor IMU 9DOF(自由度)传感器板的驱动程序包。

  • IMU板包含3轴磁力计,陀螺仪和加速度计。

  • 驱动程序也应该使用Sparkfun传感器,但你必须弄清楚如何将传感器棒连接到arduino并适当修改固件

  • Razor有一个板载Arduino,它运行与这个ROS驱动程序一起工作的Attitude Heading Reporting System(AHRS)固件。

  • 您必须使用Arduino IDE将ROS AHRS固件加载到它上面。

  • (Sparkfun发布的电路板仅包含传感器值打印固件。)

  • AHRS固件的ROS版本在此软件包中,源自Peter Bartz的原始AHRS Razor固件。

理论:

  • 在Razor内部,使用方向余弦矩阵(DCM)算法完成加速度计,磁力计和陀螺仪数据的融合。
  • 该算法还负责处理传感器噪声和数值误差。
  • 它基于William Premerlani撰写的这篇论文。
  • 有关更详细的信息,请查看Robert Mahony撰写的这些论文

硬件:

  • Razor IMU board
  • The FTDI Basic Breakout

软件:

sudo apt-get install python-visual
  • 源码安装:
$ cd catkin_ws/src
$ git clone https://github.com/KristofRobot/razor_imu_9dof.git
$ cd ..
$ catkin_make
  • apt安装:
$ sudo apt-get install ros-indigo-razor-imu-9dof

arduino IDE配置:

  • 打开arduino IDE, 文件->首选项->项目文件夹位置
  • 一般是~/sketchbook 或~/Arduino名称结尾,不同版本名称有差异
  • 拷贝AHRS固件到IDE的库目录,假设我们路径是在
$ roscd razor_imu_9dof
$ cp -r src/Razor_AHRS ~/Arduino
  • 重启arduino IDE
  • 打开项目文件夹,Razor_AHRS 选择 Razor_AHRS
  • 选择 “工具” -> “开发板” -> Arduino Pro or Pro Mini (3.3v, 8mhz) w/ATmega328
  • 选择 “工具” -> “端口”
  • 选择 “项目” -> “上传”

配置文件:

  • 配置yaml文件
$ roscd razor_imu_9dof/config
$ cp razor.yaml my_razor.yaml

坐标轴说明:

  • Razor_AHRS固件使用的坐标系的定义不同于在板上打印的坐标框架以及ROS坐标框架的定义。
  • 在下面的测试部分中测试Razor AHRS和ROS 话题输出时,您将会遇到这些差异。
  • Razor_AHRS固件使用:
X轴指向前方(朝向带有连接器孔的短边)
Y轴指向右侧
Z轴指向下方
  • 忽略电路板上的标签并在安装使用此坐标框架。
  • 然而,这与ROS在REP-103中定义的右手坐标系不同,后者使用:
X轴指向前方(朝向带有连接器孔的短边)
Y轴指向左侧
Z轴朝上
  • ROS坐标系相对于Razor_AHRS坐标系围绕X轴旋转180度。
  • razor_imu_9dof节点将Razor_AHRS测量值转换为ROS坐标系。
  • 注意:在串行监视器上查看Razor_AHRS数据和ROS /imu主题时,很容易混淆。

利用Arduino IDE测试:

  • 打开IDE,选择工具->窗口监视器

请输入图片描述

  • 这三个数字代表YPR(Yaw,Pitch和Roll)的度数。

利用GUI测试

  • 执行命令:
$ roslaunch razor_imu_9dof razor-pub-and-display.launch
  • 显示图:

请输入图片描述

请输入图片描述

利用话题输出测试:

  • 执行命令:
$ roslaunch razor_imu_9dof razor-pub.launch
  • 执行:

    $ rostopic list
    $ rostopic echo /imu

传感器校准:

  • 根据传感器的好坏,通过校准传感器可以大大提高Razor AHRS的精度和响应性。
  • 如果没有校准,你可能会得到像这样的效果
    1. 但你roll翻滚时候会出现yaw偏航漂移
    1. 指向上,姿态实际没有指上
  • 根据校准测量结果,您编译到固件中,固件会尝试补偿所有三个传感器:
  • 1.错误缩放的传感器轴:例如 如果加速度计x轴测量200个单位,而加速度计y轴测量230个单位且施加相同的力。
  • 每个传感器的所有三个轴应该是一致的。
  • 2.零偏移:例如 如果任何陀螺仪轴在电路板不移动时报告非零值。
  • 现在这些补偿随着时间的推移不具有适应性。
  • 它们保持不变,它们与您硬编码到固件中的校准测量结果一样好。

磁力计相关:

  • 磁力计在校准方面具有一些特殊性,因为不仅存在内部传感器的不准确性和噪声,还存在外部磁场失真。
  • 良好的磁力计性能对于在所有方向上产生正确的航向至关重要
  • 因此,如果您在扭曲的环境中进行校准,则始终会出现错误。
  • 存在几种类型的磁场畸变。 首先是软铁和硬铁变形。
  • 其次,失真源可以相对于传感器(即,与传感器一起移动和旋转)或独立于传感器(与世界相连或在世界上独立移动)。
  • 要了解软铁和硬铁变形以及可能的补偿方法,请看参考1参考2参考3

校准准备:

  • 在校准前几分钟通电,这样传感器就可以预热了
  • 打开$(find razor_imu_9dof)/src/Razor_AHRS/Razor_AHRS.ino文件
  • 找到"USER SETUP AREA" / "SENSOR CALIBRATION"
  • 这里是之后要修改的测量值的地方
  • 选择对应的端口,开发板
  • 打开串口监视器,一般会显示内容如下:

请输入图片描述

  • 设置进入加速度校准模式,输入#oc

请输入图片描述

  • 显示有:
accel x,y,z (min/max) = 69.95/76.29  -205.93/-198.97  -131.96/-116.09

校准加速度计

  • 我们将尝试在每个轴上找到地球引力的最小和最大输出值。
  • 移动电路板时,请缓慢移动电路板,以使应用的加速度尽可能小。 我们只想要纯粹的引力!
  • 拿起电路板并用x轴直接指向下方(请记住:x轴=面朝向带有连接器孔的短边)。
  • 当你这样做时,你可以看到x-maximum(第二个值)越来越大。
  • 保持电路板非常稳定,再次发送#oc重置测量。
  • 现在小心地将电路板向各个方向倾斜一点,直到值不再变大,并记下x最大值。
  • 对相反的方向(x轴向上)做同样的事情以获得x最小值:进入位置,发送#oc以重置测量,找到x最小值并将其写下来。
  • 对z轴(向下和向上)和y轴(向右和向左)执行相同的操作。
  • 如果您认为通过摇动或移动电路板太快而搞砸了测量,您可以随时通过发送#oc来重置。
  • 您现在应该拥有所有最小/最大值。 把它们写入到Razor_AHRS.ino。
  • 注意:这样做时你必须非常小心! 即使用手指轻轻敲击电路板也会弄乱测量(试试!)并导致校准错误。
  • 经常使用#oc并仔细检查你的最小/最大值)

校准陀螺仪

  • 将Razor AHRS放在桌面上。
  • 我们仍处于加速度计的校准模式。 发送#on两次,这会将校准跳过磁力计移动到陀螺仪的校准模式。

请输入图片描述

  • 显示有:
gyro x,y,z (current/average) = 0.00/0.00  -0.00/-0.00  0.00/0.00
  • 等待10秒钟,不要移动Razor AHRS。 它将收集并平均所有三个轴上陀螺仪的噪声。
  • 可以看到如
gyro x,y,z (current/average) = -29.00/-27.98  102.00/100.51  -5.00/-5.85
  • 如果您认为通过摇动或移动电路板搞乱了测量,可以通过发送#oc来重置。
  • 取每对的第二个值并将它们放入Razor_AHRS.ino中。

校准磁力计

  • 此过程可补偿硬铁和软铁错误。
  • 仍然,在两种情况下,失真源必须在传感器坐标系中固定,即与传感器一起移动和旋转。
  • 要开始校准,请将传感器放在稍后将使用的磁环境中
  • 例如 在机器人的确切位置。 机器人的电机中有很强的磁铁,磁力计经常安装在机器人上方以形成物理隔离。
  • 使用“测试AHRS”部分中的一个步骤显示Razor AHRS输出
  • 测试传感器是否受到机器人附近的影响。
  • 将Razor AHRS移动得离机器人越来越远,同时保持姿态不变,并确保所需安装位置的读数不受机器人附近的影响。
  • 测试电机运行时传感器是否受影响。
  • 向前和向后运行机器人电机(机器人在支架上!)。 如果输出发生变化,则需要将Razor AHRS远离机器人。
  • 下载并安装Processing。 我们将使用它来编译和运行测试程序。
  • 退出从传感器读取的所有应用程序(例如串行监视器,3D可视化GUI,...)
  • 并运行Processing,打开位于$(find razor_imu_9dof)/magnetometer_calibration/Processing/Magnetometer_calibration
  • 注意:您必须首先安装EJML库,否则草图将不会运行。
  • 怎么做? 请查看Magnetometer_calibration.pde顶部的NOTE。
  • 尝试以某种方式旋转传感器,以便覆盖所有方向,以便产生或多或少均匀覆盖球体的点。
  • 在一个大多没有失真的环境中,这看起来像这样:

请输入图片描述

  • 点击SPACE并观察处理控制台
    请输入图片描述
  • 您将找到一些代码行,您必须在“用户设置区域”/“传感器校准”下输入固件,然后您就完成了。

磁力计校准的Matlab分析(可选)

  • 收集的数据(点)也写入草图文件夹中的文件magnetom.float
  • 如果您拥有Matlab,请在$(find razor_imu_9dof)/magnetometer_calibration/Matlab/magnetometer_calibration
  • 你会找到脚本magnetometer_calibration.m
  • 使用此文件并为您生成一些图,因此您可以直观地检查校准。
  • 椭球拟合和修正值:
    请输入图片描述
    请输入图片描述

另一个校准示例A:

  • 软铁使球体缩放并变形成椭圆体。

  • 采样原始磁力计值:
    请输入图片描述

  • 椭球拟合和修正值:
    请输入图片描述
    请输入图片描述

另一个校准示例B:

  • 硬铁提供偏移球体。
  • 采样原始磁力计值:
    请输入图片描述
  • 椭球拟合和修正值:
    请输入图片描述
    请输入图片描述

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与传感器教程