1.配置和显示惯性测量单元AHRS模块_GY-951


0x00 AHRS模块简介

在机器人的设计中,惯性测量单元IMU(Inertial measurement unit)是必不可少的一个模块,但是目前高精度的IMU模块是非常贵的,一般Xsens MTi系列IMU都在上万块,在这里我们介绍一款便宜实惠的IMU模块,但是与IMU不同的是该模块是AHRS(Attitude and heading reference system)航姿参考系统,淘宝价格大概80块左右,虽然输出数据有点误差,但是对于我们一般的ROS机器人已经可以用了。下面是该模块图片及相关参数:

GY-951(三轴陀螺仪+三轴加速度计+三轴数字罗盘)

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第1张

外观尺寸 2.3cm*1.7cm
供电电压 3-5V
通信方式 TTL串口,波特率57600
模块芯片 处理器芯片 ATMEGA328P
三轴陀螺仪 ITG3205
三轴加速度计 ADXL345
三轴数字罗盘 HMC5883L
输出数据 偏行角(YAW  ) ±180°
横滚角( ROLL ) ±180°
俯仰角(PITCH) ±180°

 


0x01 连接GY-951模块

由于刚买回来的GY-951模块如下图左边所示,排针需要我们自己用电烙铁根据需要焊接上,右边的是我焊接好的样子:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第2张

我们要想将模块输出的数据发送到ROS上进行处理显然我们还需要一个转接模块,我这里使用的是USB转TTL,当然其他的模块也可以,下面这三款是我用过确定可以和GY-951正常通信的,唯一不同的是另外两款需要再接一根miniUSB接口的线,跟安卓手机的那种microUSB线不同,如下图所示:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第3张

需要注意的是我们在进行GY-951的固件代码更新时,需要连接上DTR引脚才能将固件代码下载到GY-951中,在正常通信时就不用接DTR引脚,只需要接上VCC,GND,TX,RX即可,下面是总结:

  GY-951模块 USB转接模块 连接图 备注
正常通信

VCC

GND

TX

RX

VCC

GND

RX

TX

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第4张

在连接时需要注意IMU模块与转接模块连接时,

VCC,GND都是接相应的引脚,在接TX和RX

引脚时IMU模块需要与转接模块相反,即IMU模块

的TX接转接模块的RX,IMU模块的RX接转接模块的TX。

更新固件

VCC

GND

TX

RX

DTR

VCC

GND

RX

TX

DTR

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第5张

在更新GY-951固件代码时连接引脚时唯一的不一样

就是多接了一根DTR引脚,只有接了DTR引脚才能

将固件代码通过Arduino IDE下载到GY-951中。

此时需要带有miniUSB接口的转接模块才带有DTR引脚


0x02 更新GY-951固件

由于从淘宝上买回来的GY-951固件代码比较旧,要想模块可以正常工作,第一件事就是要更新模块的固件代码,在这里我们使用ROS中razor_imu_9dof这个软件包里面的固件代码,之所以要使用该软件包中估计代码是因为该软件包是为SparkFun出品的Razor IMU 9DOF (Degree of freedom) sensor boards,该IMU模块的各传感器模块正好与我们的GY-951相同,所以代码也应该是一样的可以通用。

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第6张

然后从gitHub下载相应的代码,下载命令:git clone https://github.com/blmhemu/razor_imu_9dof.git,由于该代码目前只有ROS Indigo分支,因此我们需要先在Indigo上做测试,我们需要将该代码下载到ROS的工作空间源码目录下,一般就是我们自己ROS小车的工作目录,在这里我用自己的ROS工作空间做演示下载源码并解析源码各目录内容:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第7张

下面来简单介绍固件代码的各源码文件作用,其中Math.ino没地方来标明了,它的作用就是一些简单的数学计算,例如向量的加法,向量的点乘(数量积、点积),矩阵乘法等:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第8张

接下来就需要在Arduino IDE中打开该固件代码,直接打开Razor_AHRS.ino文件即可:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第9张

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第10张

接下来我们需要根据GY-951模块来配置该代码,直接修改Razor_AHRS.ino代码中HARDWARE OPTIONS部分即可:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第11张

接下来需要配置开发板和处理器和端口,找到适合GY-951的,这样才能将该代码下载到模块中,注意开发板需要选择:Arduino Pro or Pro Mini,处理器选择:ATmega328P(3.3V,8MHz),端口根据需要选择,我这里选择的是ttyUSB0:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第12张

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第13张

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第14张

当点击上传按钮后,即可自动编译该固件代码,然后将生成的文件上传到GY-951模块中,根据Arduino IDE下面的窗口可得知是否上传成。

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第15张

接下来通过调试模块的串口输出数据来看模块是否可以工作了,直接打开IDE中的串口监视器即可,当看到串口有数据输出表明我们的模块固件更新已经完成了:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第16张

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第17张


0x03 配置ROS代码

现在GY-951模块代码已经有数据输出,但是该数据我们还无法在ROS中使用,需要将该数据进行ROS能识别的IMU格式数据封装才行,接下来我们就开始配置相应的ROS部分代码,首先我们从launch文件入手来分析ROS部分代码,我们先从razor-pub.launch分析,该文件内容如下:

<launch>
  <arg name="razor_config_file" default="$(find razor_imu_9dof)/config/my_razor.yaml"/>
  <node pkg="razor_imu_9dof" type="imu_node.py" name="imu_node" output="screen">
    <rosparam file="$(arg razor_config_file)" command="load"/>
  </node>
</launch>

从arg部分看出,需要加载razor_config_file参数,该参数是从my_razor.yaml文件中读取,但是该文件默认不存在,需要我们从razor.yaml文件复制一份用:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第18张

我们查看my_razor.yaml文件,查看该配置文件中内容,然后根据需要做相应的修改,主要需要修改的就是port端口号:

## USB port
port: /dev/ttyUSB0


##### Calibration ####
### accelerometer
accel_x_min: -250.0
accel_x_max: 250.0
accel_y_min: -250.0
accel_y_max: 250.0
accel_z_min: -250.0
accel_z_max: 250.0

### magnetometer
# standard calibration
magn_x_min: -600.0
magn_x_max: 600.0
magn_y_min: -600.0
magn_y_max: 600.0
magn_z_min: -600.0
magn_z_max: 600.0

# extended calibration
calibration_magn_use_extended: false
magn_ellipsoid_center: [0, 0, 0]
magn_ellipsoid_transform: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

# AHRS to robot calibration
imu_yaw_calibration: 0.0

### gyroscope
gyro_average_offset_x: 0.0
gyro_average_offset_y: 0.0
gyro_average_offset_z: 0.0

我们需要修改的部分主要就是USB port端口号,但是在使用该端口号时需要注意权限问题,注意当前用户有没有在dialout组中,如果没有的话需要使用"sudo usermod -aG dialout 用户名"将当前用户添加到dialout组中, 因为默认情况下,只有root用户和属于dialout组的用户会有读写权限,因此直接把自己的用户加入到dialout组就可以了,操作完命令后要logout一下或者重启电脑后,以后就永久生效了。

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第19张

通过groups命令可以查看当前用户有没有在dialout组中,由于我以前已经把用户添加到dialout组中,因此我就不用执行了,如果你没有发现dialout组,可以通过上述命令来添加。当增加好权限后,我们就可通过3D可视化来查看GY-951模块的输出数据的实际效果了,但是在使用可视化模块前需要安装一个软件,通过以下命令安装:

sudo apt-get install python-visual

然后就可以在ROS工作空间代码下执行catkin_make进行编译,编译完成后source devel/setup.bash,就可以来执行razor-imu-9dof的ROS部分代码来3D显示数据:

 

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第20张

此时可以查看话题列表,通过rostopic list查看,可以发现已经组装好的imu话题,可以echo出来查看数据格式和内容:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第21张


0x04 在Rviz中显示IMU数据

在Rviz中如果要想显示IMU数据的话,需要提前安装一个Rviz显示插件,安装方式有两种,第一种直接通过apt-get install来安装,第二种通过源码自己编译,下面我分别来介绍两种安装方式:

(1)apt直接安装

这种方式是最简单快捷的,我们直接在终端中输入:sudo apt-get install ros-indigo-imu-tools就可以了,当然我这里是在indigo系统下安装的,大家需要根据自己安装的ROS版本来选择可以在kinetic系统中输入 sudo apt-get install ros-kinetic-imu-tools就可以安装了。

(2)通过源码安装

由于源码需要通过git来下载,那么就需要先保证已经安装了git-core软件包,直接通过sudo apt-get install git-core来安装,接下来下载源码,我们首先需要切换到ROS中自己创建的工作空间源码目录下,然后开始从github下载源码:

        git clone -b indigo https://github.com/ccny-ros-pkg/imu_tools.git

我这里下载的是indigo分支代码,大家根据自己ROS的版本来选择,该源码网址是:https://github.com/ccny-ros-pkg/imu_tools,大家可以从该网址找到更多的信息。接下来在编译该源码之前,需要检查该源码的依赖包,将依赖包先安装好才能源码编译,安装依赖包的命令是:rosdep install imu_tools安装好依赖包后,接下来就开始在工作空间的根目录下执行catkin_make就可以了。

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第22张

当安装好Rviz中显示IMU的插件后,我们就可以打开Rviz了,直接在终端中输入rviz即可打开,当打开后第一步就是要添加我们刚才安装好的插件:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第23张

当添加好插件后,就可以在Rviz的中心显示区域显示出一个xyz的坐标,我们接下来需要配置一下就可以将GY-951模块的信息在Rviz中显示出来了,根据下图提示来配置Rviz即可,这样当我们晃动GY-951模块时会发现在Rviz中的IMU插件也同步在晃动:

1.配置和显示惯性测量单元AHRS模块_GY-951 - 第24张

[wshop_reward]