天天看点

在树莓派3的ROS平台上发布sensor_msgs/Imu消息 在树莓派3的ROS平台上发布sensor_msgs/Imu消息

在树莓派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

        正确链接的话,显示如下图

在树莓派3的ROS平台上发布sensor_msgs/Imu消息 在树莓派3的ROS平台上发布sensor_msgs/Imu消息

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消息

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消息,并发布,大家可以参考点击打开链接