在树莓派3的ROS平台上发布sensor_msgs/Imu消息
一: 首先当然是搭建基于RaspbianOS Jessie 系统的ROS-indigo环境
这个不是本文的重点,在这里就不详述了。需要的可以点击打开链接
(这个过程非常酸爽,装了2天)
二: 获得Imu数据
本文获取Imu数据所用传感器是GY-85模块,该模块的接口是i2c,包含了三个传感器模块
ITG3205
(
三轴陀螺仪传感器
)、
ADXL345
(
三轴加速度倾角传感器
)、
HMC5883L
(
电子罗盘
)
。
1、搭建和GY-85模块通信环境,使用python的quick2wire库开发i2c应用(only suppor python3)
quick2wire库用于i2c通信,它可以在非root用户下进行gpio引脚的读写
准备工作
sudo apt-get install git
sudo apt-get install python3
sudo apt-get install python-pip
sudo apt-get install python-virtualenv
安装 quick2wire-gpio-admin
git clone https://github.com/quick2wire/quick2wire-gpio-admin.git
cd quick2wire-gpio-admin
make
sudo make install
sudo adduser pi gpio
安装 quick2wire-python-api (依赖上边的库,所以要按我的顺序来)
git clone https://github.com/quick2wire/quick2wire-python-api.git
cd quick2wire-python-api
sudo python3 setup.py install
2、安装i2clibraries库(
only suppor python3
)
git clone https://bitbucket.org/thinkbowl/i2clibraries.git
此i2clibraries库恰好包含了
ITG3205
ADXL345
HMC5883L
这三种传感器接口,很方便开发,要注意的
是i2c_itg3205.py
接口中,默认对应
ITG3205
设备地址为
69
,为了以后省事,将相关注释下面的代码做更改
# Address will always be either 0x68 (104) or 0x69 (105)
def __init__(self, port, addr=0x68): #这里的addr改为68, 原值为69
3、测试GY-85是否链接(树莓派默认是关闭i2c功能的,pi3 和GY-85正确链接正确连接)
sudo raspi-config 弹出设置界面,在里面设置,打开i2c功能
gpio readall 测试是否打开,打开的话出现
详细可点击打开链接
树莓派A型 sudo i2c
detect -y 0
树莓派B型 sudo i2c
detect -y 1
正确链接的话,显示如下图
4、现在就可以获得GY-85的数据了(确保pi3 和GY-85正确链接)
新建
i2c_itg3205.py
脚本,代码如下
from i2clibraries import i2c_itg3205
from time import *
itg3205 = i2c_itg3205.i2c_itg3205(0)
while True:
(itgready, dataready) = itg3205.getInterruptStatus()
if dataready:
temp = itg3205.getDieTemperature()
(x, y, z) = itg3205.getDegPerSecAxes()
print("Temp: "+str(temp))
print("X: "+str(x))
print("Y: "+str(y))
print("Z: "+str(z))
print("")
sleep(1)
python3
i2c_itg3205.py 运行,可以看到输出的信息。
其他两个传感器的数据获得类似
四: 在ROS中发布Imu消息
四: 在ROS中发布Imu消息
1、在编写ros节点之前要修改一下ros内的python配置。因为我们装的ros-indigo-desktop-full版本的ros,它默认使用python2.7,没有安装python3的package 。
首先:安装python3,这个就不多说了
然后 :sudo pip3 install catkin-tools ; sudo pip3 install rospkg;
最后:现在就可以在ros下用python3了,正常建包、节点,但是在python节点中第一行加一句 #!/usr/bin/env python3
2、如果以上都无误的话,现在就可以正式编写你的节点,来发布sensor_msgs/Imu消息了。
用自己获得的数据填充Imu消息,并发布,大家可以参考点击打开链接