【turtlebot】陀螺仪的安装以及标定(iRobot Create 底盘+ADXRS610陀螺仪)

版权声明:本文为博主原创文章,转载请联系博主。 https://blog.csdn.net/u013453604/article/details/49358721

一、前言

首先说一下我的运行环境
操作系统:UbuntuKylin-14.04
ROS版本:indigo
机器人平台:iRobot Create
陀螺仪:ADXRS610(±300°/sec)
注意Turtlebot2采用kobuki底盘,自带标定好的陀螺仪,所以不需要标定。但是我的iRobot Create移动机器人平台本身是不带陀螺仪的,我购买了dfrobot社区的ADXRS610陀螺仪,陀螺仪的模拟输出引脚RATEOUT接在iRobot Create的cargo bay连接器(就是底盘中间的DB-25并口)PIN4引脚Analog input上,连上电脑可以直接读取到陀螺仪模拟信号经过底盘AD芯片转换过得数字信号,默认值是500。

二、陀螺仪的安装

(1)ADXRS613

有些版本的Turtlebot是自带ADXRS613陀螺仪芯片的,在Sparkfun上也有这块芯片的breakout board:Gyro Breakout Board - ADXRS613 - 150°/s
Gyro Breakout Board - ADXRS613 - 150°/s
这块板子已经停产,我找了下sparkfun的中国代理商奥松机器人商城里也买不到这块板子。不过sparkfun的主页上有这块板子的原理图,可以自己淘宝买ADI公司的ADXRS613芯片自己焊一块陀螺仪的接线板,值得注意的是这块芯片是BGA封装的,它没有引脚,底部是锡球,如下图:
ADXRS613正面
ADXRS613底部
这种封装的芯片手工焊成功率挺低的,我第一次就是买了芯片照着原理图设计了PCB,然后把板子做出来焊上元件,结果RATEOUT引脚输出是个定值,旋转芯片输出电压不随之变化,妥妥地焊坏了。

(2)ADXRS610

不得不说国外良心网站真多,我在dfrobot上找到了类似上面那块板子的陀螺仪:Gyro Breakout Board - ADXRS610
Gyro Breakout Board - ADXRS610
可以在dfrobot的中国代理商 DFRobot开源硬件及机器人商城购买:http://www.dfrobot.com.cn/goods.php?id=333
这块板子接线和上面板子差不多,就是测量范围(gyro_measurement_range)有差别:
ADXRS610:±300°/秒
ADXRS613:±150°/秒
不过ADXRS610便宜好多,性能上稍微差点,不过够用了,最重要的是不用自己焊BGA封装的芯片!!!
【安装】
首先把排针焊在这块板子上,利用杜邦线把5V、GND、REATEOUT三个引脚引出来,接到一个DB-25的免焊转接头公头上,转接头如下图所示:
DB-25的免焊转接头公头(右)母头(左)
可以将杜邦线的另一头接到DB-25转接头的接线端子上,再把转接头插到Turtlebot底部的DB-25并口上。
连好线之后用万用表测一下线路是否连通。接好之后如下图:
安装示意图1
安装示意图2
安装示意图3
【注意】
1、接线:
5V——PIN8
GND——PIN16
REATEOUT——PIN4
2、把板子固定在机器人中央,如下图我是用双面胶粘在亚克力板中间的。
3、公头上的引脚顺序和母头上的引脚顺序是左右相反的。
【测试】插上DB-25转接头,打开Turtlebot的电源开关,先让陀螺仪预热一会儿,用万用表测陀螺仪静止时RATEOUT电压是否停在2.5V周围,再旋转陀螺仪,测RATEOUT电压是否随旋转角速度而变化。如果以上输出都没问题,那么陀螺仪硬件连接已经完成可以运行标定程序了。

三、运行标定程序

标定过程参考ROSwiki上面的教程:http://wiki.ros.org/turtlebot_calibration/Tutorials/Calibrate%20Odometry%20and%20Gyro

(1)首先确保已经安装Turtlebot相关的包

请参照官方WIKI:http://wiki.ros.org/turtlebot/Tutorials/indigo/Turtlebot%20Installation
或者看看我的另一篇博客:http://blog.csdn.net/u013453604/article/details/49386953

(2)开始标定

请参照官方WIKI:http://wiki.ros.org/turtlebot_calibration/Tutorials/Calibrate%20Odometry%20and%20Gyro
主要就是两个:一是设定陀螺仪量程,二是运行标定程序

1.以最小模式运行Turtlebot

首先把turtlebot的kinect摆正,把它摆在一面至少两米长的墙前面,让它面向墙,离墙大约30厘米,启动turtlebot相关节点

$ roslaunch turtlebot_bringup minimal.launch

2.设置陀螺仪量程

这取决于陀螺仪芯片的型号,比如
ADXRS610的量程是±300°/秒,那么gyro_measurement_range就设为300
ADXRS613的量程是±150°/秒,那么gyro_measurement_range就设为150
ADXRS652的量程是±250°/秒,那么gyro_measurement_range就设为250
我的陀螺仪模块采用的芯片是ADXRS610。
问题就来了,怎么设定这个值呢?有三种方式:
一是直接在终端设定这个值,如下

$ rosparam set /turtlebot_node/gyro_measurement_range 300

这种方式只是临时修改运行过程中的参数,下次启动Turtlebot它仍然会从文件里读取默认的值;
二是在rqt里设置这个值,如下

$ rosrun rqt_reconfigure rqt_reconfigure 

打开rqt界面,在面板上直接设置gyro_measurement_range的值为300,但是和上面一样,这种方法只能临时设定gyro_measurement_range的值;
三是在启动文件里面设定相应的启动参数,将gyro_measurement_range设定为300,具体步骤是找到/home/siat/turtlebot/src/turtlebot/turtlebot_bringup/launch\minimal.launch,然后打开它,在原来的< arg >标签下加上下列语句作为启动参数

<!--Turtlebot calibration:陀螺仪(ADXRS610)标定参数-->
  <param name="turtlebot_node/gyro_measurement_range" value="300.000000"/>
  <param name="turtlebot_node/gyro_scale_correction" value="1"/>
  <param name="turtlebot_node/odom_angular_scale_correction" value="1"/>

现在只要改gyro_measurement_range为300,剩下两个参数先设为1,它们将会在标定的时候生成。

3.启动标定节点

一开始turtlebot是面向墙的

$ roslaunch turtlebot_calibration calibrate.launch

这时候标定就开始了,他会一开始逆时针转两圈,然后停下,输出信息是陀螺仪和里程计的误差,再寻找墙将自己转到正面对墙的位置;然后再转一圈,停下,输出陀螺仪和里程计的误差,把寻找墙把自己调整到正面对墙的位置;接着转两圈测试,最终输出陀螺仪和里程计的误差以及推荐的turtlebot_node/gyro_scale_correction和turtlebot_node/odom_angular_scale_correction值,由于标定程序里还以为启动turtlebot的文件名是老版本的turtlebot.launch,所以这里是不会直接将这两个值写到launch文件中的,我们可以手动修改前面添加到minimal.launch文件中的的代码将之设定为标定程序推荐的值。
注意
当然为了方便我可以直接修改/home/siat/turtlebot/src/turtlebot_apps/turtlebot_calibration/src/turtlebot_calibration\calibrate.py文件中的下列语句:
(主要是修改路径,请根据自己路径修改)

273行的
f = open("/etc/ros/distro/turtlebot.launch", "r")
改为
f = open("/home/siat/turtlebot/src/turtlebot/turtlebot_bringup/launch/minimal.launch", "r")

第288行的
f = open("/etc/ros/distro/turtlebot.launch", "w")
改为
f = open("/home/siat/turtlebot/src/turtlebot/turtlebot_bringup/launch/minimal.launch", "w")

这样标定程序就能找到你的minimal.launch文件并自动写入标定好的数据了,标定完之后你可以打开minimal.launch文件看看turtlebot_node/gyro_scale_correction和turtlebot_node/odom_angular_scale_correction是否已经更新为标定之后的数据


以下是标定过程中的经验仅供参考:
1、在转完整圈的过程中turtlebot应该是很顺畅的转完一个圈的,虽然可能有点慢,但却是连续的,不会出现一顿一顿的情况,如果turtlebot在转一个完整圈的过程中会停一下走一下,甚至停几分钟才继续走,那就是节点运行有问题了,你应该重启节点,检查节点启动的时候turtlebot是否已经正面对着墙,打开turtlebot_dashboard检查陀螺仪是否有输出等等。
2、一般来说标定结果turtlebot_node/gyro_scale_correction和turtlebot_node/odom_angular_scale_correction的值会大于1,如果出现了0.5左右甚至更小的值,并且在标定过程中他们旋转圈数不是两圈和一圈,而是出现了三圈这样的情况,那就说明标定陷入了局部最优解,虽然他们显示的误差可能是一个非常小的值,比如1.1%和3%这样小的误差,那是因为它多转了整整一圈而正好面对墙。可手动修改minimal.launch文件把这两个值设为1.5,再重新运行标定程序。
3、标定是可以连续进行的,第一次标定完之后程序给出了turtlebot_node/gyro_scale_correction和turtlebot_node/odom_angular_scale_correction的推荐值,这时你用rosparam get这两个参数会发现他们在当前运行的节点下已经被修改为标定推荐的值了,这时你可以再次运行标定程序,直到误差稳定在一个较小的范围内。最终我的标定结果是:

turtlebot_node/gyro_scale_correction1.304699 误差0.1%
turtlebot_node/odom_angular_scale_correction1.032019 误差6.8%

四、利用标定好的陀螺仪和里程计运行导航建图包

插上串口,给权限:

$ cd /dev/
$ sudo chmod 777 ttyUSB0

运行turtlebot节点:

$ roslaunch turtlebot_bringup minimal.launch

运行导航建图节点:

$ roslaunch turtlebot_navigation gmapping_demo.launch

运行可视化节点:

$ roslaunch turtlebot_rviz_launchers view_teleop_navigation.launch 

建图完毕保存地图:

$ rosrun map_server map_saver -f ~/map/map1

我的建图如下:
这里写图片描述
保存地图之后是这样的:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013453604/article/details/49358721
今日推荐