1.配置和显示惯性测量单元AHRS模块_GY-951
点击此处查看最新的网赚项目教程
2018眨眼间已经来到我们眼前,真是不敢想象,时间过得如此之快,ROS小课堂我也坚持做了一年多了,正好也借此机会来进行自我总结,目前为止在优酷发布视频教程72集,视频总播放数5.3万,粉丝1011位,另外也想通知大家,现在优酷上的ROS小课堂所有的视频都可以下载了,方便大家下载到本地来看了。
微信公众号发布消息共46条,订阅用户共2281位,关键为什么还有俩未知性别的呢?
订阅用户城市排行是上北深广的顺序,北京和上海基本上持平的,果然还是一线城市用户居多啊!
ROS小课堂微信群里打赏用户已经有129人,感谢所有为ROS小课堂打赏的各位小伙伴,有你们的支持才让我坚持到现在
最后就是ROS小课堂的网站在2017年11月底也顺利上线,虽然网站目前教程还不够齐全,我希望随着我不断的维护和更新,教程会越来越多,越来越全的,希望可以通过我的微薄之力为更多的学习ROS的小伙伴提供一个查找资料学习教程的好平台!
在新的一年里,我会尽自己最大努力来维护好优酷上ROS小课堂的视频教程、ROS小课堂微信公众号和ROS小课堂网站,大家的支持就是我坚持下去的动力!最后我想说,2018,放马过来吧!
0x00 AHRS模块简介
在机器人的设计中,惯性测量单元IMU(Inertial measurement unit)是必不可少的一个模块,但是目前高精度的IMU模块是非常贵的,一般Xsens MTi系列IMU都在上万块,在这里我们介绍一款便宜实惠的IMU模块,但是与IMU不同的是该模块是AHRS(Attitude and heading reference system)航姿参考系统,淘宝价格大概80块左右,虽然输出数据有点误差,但是对于我们一般的ROS机器人已经可以用了。下面是该模块图片及相关参数:
GY-951(三轴陀螺仪+三轴加速度计+三轴数字罗盘)
外观尺寸
2.3cm*1.7cm
供电电压
3-5V
通信方式
TTL串口,波特率57600
模块芯片
处理器芯片
ATMEGA328P
三轴陀螺仪
ITG3205
三轴加速度计
ADXL345
三轴数字罗盘
HMC5883L
输出数据
偏行角(YAW )
±180°
横滚角(ROLL)
±180°
俯仰角(PITCH)
±180°
0x01 连接GY-951模块
由于刚买回来的GY-951模块如下图左边所示,排针需要我们自己用电烙铁根据需要焊接上,右边的是我焊接好的样子:
我们要想将模块输出的数据发送到ROS上进行处理显然我们还需要一个转接模块,我这里使用的是USB转TTL,当然其他的模块也可以,下面这三款是我用过确定可以和GY-951正常通信的,唯一不同的是另外两款需要再接一根miniUSB接口的线,跟安卓手机的那种microUSB线不同,如下图所示:
需要注意的是我们在进行GY-951的固件代码更新时,需要连接上DTR引脚才能将固件代码下载到GY-951中,在正常通信时就不用接DTR引脚,只需要接上VCC,GND,TX,RX即可,下面是总结:
GY-951模块
USB转接模块
连接图
备注
正常通信
VCC
GND
TX
RX
VCC
GND
RX
TX
在连接时需要注意IMU模块与转接模块连接时,
VCC,GND都是接相应的引脚,在接TX和RX
引脚时IMU模块需要与转接模块相反,即IMU模块
的TX接转接模块的RX,IMU模块的RX接转接模块的TX。
更新固件
VCC
GND
TX
RX
DTR
VCC
GND
RX
TX
DTR
在更新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相同,所以代码也应该是一样的可以通用。
然后从gitHub下载相应的代码,下载命令:git clone ,由于该代码目前只有ROSIndigo分支,因此我们需要先在Indigo上做测试,我们需要将该代码下载到ROS的工作空间源码目录下,一般就是我们自己ROS小车的工作目录,在这里我用自己的ROS工作空间做演示下载源码并解析源码各目录内容:
下面来简单介绍固件代码的各源码文件作用,其中Math.ino没地方来标明了,它的作用就是一些简单的数学计算,例如向量的加法,向量的点乘(数量积、点积),矩阵乘法等:
接下来就需要在Arduino IDE中打开该固件代码,直接打开Razor_AHRS.ino文件即可:
接下来我们需要根据GY-951模块来配置该代码,直接修改Razor_AHRS.ino代码中HARDWARE OPTIONS部分即可:
接下来需要配置开发板和处理器和端口,找到适合GY-951的,这样才能将该代码下载到模块中,注意开发板需要选择:Arduino Pro or Pro Mini,处理器选择:ATmega328P(3.3V,8MHz),端口根据需要选择,我这里选择的是ttyUSB0:
当点击上传按钮后,即可自动编译该固件代码,然后将生成的文件上传到GY-951模块中,根据Arduino IDE下面的窗口可得知是否上传成。
接下来通过调试模块的串口输出数据来看模块是否可以工作了,直接打开IDE中的串口监视器即可,当看到串口有数据输出表明我们的模块固件更新已经完成了:
0x03 配置ROS代码
现在GY-951模块代码已经有数据输出,但是该数据我们还无法在ROS中使用,需要将该数据进行ROS能识别的IMU格式数据封装才行,接下来我们就开始配置相应的ROS部分代码,首先我们从launch文件入手来分析ROS部分代码,我们先从razor-pub.launch分析,该文件内容如下:
“razor_config_file”default=”$(findrazor_imu_9dof)/config/my_razor.yaml”/>
“razor_imu_9dof”type=”imu_node.py”name=”imu_node”output=”screen”>
“$(argrazor_config_file)”command=”load”/>
从arg部分看出,需要加载razor_config_file参数,该参数是从my_razor.yaml文件中读取,但是该文件默认不存在,需要我们从razor.yaml文件复制一份,直接使用cp razor.yaml my_razor.yaml复制一份使用:
我们查看my_razor.yaml文件,查看该配置文件中内容,然后根据需要做相应的修改,主要需要修改的就是port端口号:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
##USBport
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
#standardcalibration
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
#extendedcalibration
calibration_magn_use_extended:false
magn_ellipsoid_center:[0,0,0]
magn_ellipsoid_transform:[[0,0,0],[0,0,0],[0,0,0]]
#AHRStorobotcalibration
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一下或者重启电脑后,以后就永久生效了。
通过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显示数据:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
corvin@workspace:~/project/omniWheelCareRobot/rosCode$roslaunchrazor_imu_9dofrazor-pub-and-display.launch
…loggingto/home/corvin/.ros/log/fc30add4-ec66-11e7-8528-1866da14be59/roslaunch-workspace-16324.log
Checkinglogdirectoryfordiskusage.Thismaytakeawhile.
PressCtrl-Ctointerrupt
Donecheckinglogfilediskusage.Usageis
startedroslaunchserverhttp://192.168.31.186:19943/
SUMMARY
========
PARAMETERS
*/imu_node/accel_x_max:250.0
*/imu_node/accel_x_min:-250.0
*/imu_node/accel_y_max:250.0
*/imu_node/accel_y_min:-250.0
*/imu_node/accel_z_max:250.0
*/imu_node/accel_z_min:-250.0
*/imu_node/calibration_magn_use_extended:False
*/imu_node/gyro_average_offset_x:0.0
*/imu_node/gyro_average_offset_y:0.0
*/imu_node/gyro_average_offset_z:0.0
*/imu_node/imu_yaw_calibration:0.0
*/imu_node/magn_ellipsoid_center:[0,0,0]
*/imu_node/magn_ellipsoid_transform:[[0,0,0],[0,0…
*/imu_node/magn_x_max:600.0
*/imu_node/magn_x_min:-600.0
*/imu_node/magn_y_max:600.0
*/imu_node/magn_y_min:-600.0
*/imu_node/magn_z_max:600.0
*/imu_node/magn_z_min:-600.0
*/imu_node/port:/dev/ttyUSB0
*/rosdistro:indigo
*/rosversion:1.11.21
NODES
display_3D_visualization_node(razor_imu_9dof/display_3D_visualization.py)
imu_node(razor_imu_9dof/imu_node.py)
auto-startingnewmaster
process[master]:startedwithpid[16336]
ROS_MASTER_URI=http://localhost:11311
setting/run_idtofc30add4-ec66-11e7-8528-1866da14be59
process[rosout-1]:startedwithpid[16349]
startedcoreservice[/rosout]
process[imu_node-2]:startedwithpid[16360]
process[display_3D_visualization_node-3]:startedwithpid[16367]
[INFO][WallTime:1514531273.567938]Reconfigurerequestforyaw_calibration:0
[INFO][WallTime:1514531273.568119]Setimu_yaw_calibrationto0
[INFO][WallTime:1514531273.583307]Opening/dev/ttyUSB0…
[INFO][WallTime:1514531273.587696]GivingtherazorIMUboard5secondstoboot…
[INFO][WallTime:1514531279.590087]WritingcalibrationvaluestorazorIMUboard…
[INFO][WallTime:1514531280.710073]Printingsetcalibrationvalues:
ACCEL_X_MIN:-250.00
ACCEL_X_MAX:250.00
ACCEL_Y_MIN:-250.00
ACCEL_Y_MAX:250.00
ACCEL_Z_MIN:-250.00
ACCEL_Z_MAX:250.00
MAGN_X_MIN:-600.00
MAGN_X_MAX:600.00
MAGN_Y_MIN:-600.00
MAGN_Y_MAX:600.00
MAGN_Z_MIN:-600.00
MAGN_Z_MAX:600.00
MAGN_USE_EXTENDED:false
magn_ellipsoid_center:[0.0000,0.0000,0.0000]
magn_ellipsoid_transform:[[0.0000000,0.0000000,0.0000000],[0.0000000,0.0000000,0.0000000],[0.0000000,0.0000000,0.0000000]]
GYRO_AVERAGE_OFFSET_X:0.00
GYRO_AVERAGE_OFFSET_Y:0.00
GYRO_AVERAGE_OFFSET_Z:0.00
[INFO][WallTime:1514531280.710284]Flushingfirst200IMUentries…
[INFO][WallTime:1514531284.814904]PublishingIMUdata…
此时可以查看话题列表,通过rostopic list查看,可以发现已经组装好的imu话题,可以echo出来查看数据格式和内容:
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的版本来选择,该源码网址是:,大家可以从该网址找到更多的信息。接下来在编译该源码之前,需要检查该源码的依赖包,将依赖包先安装好才能源码编译,安装依赖包的命令是:rosdep install imu_tools,安装好依赖包后,接下来就开始在工作空间的根目录下执行catkin_make就可以了。
当安装好Rviz中显示IMU的插件后,我们就可以打开Rviz了,直接在终端中输入rviz即可打开,当打开后第一步就是要添加我们刚才安装好的插件:
当添加好插件后,就可以在Rviz的中心显示区域显示出一个xyz的坐标,我们接下来需要配置一下就可以将GY-951模块的信息在Rviz中显示出来了,根据下图提示来配置Rviz即可,这样当我们晃动GY-951模块时会发现在Rviz中的IMU插件也同步在晃动:
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: qs62318888
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网