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

       树莓派B型 sudo i2cdetect -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消息

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


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
这些头文件是C++编程中常用的库文件,主要作用如下: - #include <iostream>:用于输入输出流的操作,如输出到控制台等。 - #include "ros/ros.h":ROS机器人操作系统的头文件,用于机器人程序的编写。 - #include "std_msgs/String.h":ROS中的标准消息类型,用于传递字符串类型的消息。 - #include "std_msgs/Float32.h":ROS中的标准消息类型,用于传递浮点型数据。 - #include <sstream>:用于字符串流的操作,如将数字转换为字符串等。 - #include "math.h":数学库文件,提供了许多常用的数学函数。 - #include "can_drive/ICANCmd.h":自定义消息类型,用于控制CAN总线通信。 - #include "can_drive/Nav_data_msg.h":自定义消息类型,用于传递导航数据。 - #include "can_drive/encoder_vel_msg.h":自定义消息类型,用于传递编码器速度数据。 - #include "can_drive/radar_obs_msg.h":自定义消息类型,用于传递雷达障碍物数据。 - #include "can_drive/camera_obs_msg.h":自定义消息类型,用于传递摄像头障碍物数据。 - #include "sensor_msgs/Imu.h":ROS中的标准消息类型,用于传递IMU数据。 - #include "can_drive/pwm_cmd_msg.h":自定义消息类型,用于控制PWM信号输出。 - #include "can_drive/sensor_states_msg.h":自定义消息类型,用于传递各种传感器状态数据。 - #include <tf/tf.h>:ROS中的变换库文件,用于实现坐标系变换。 - #include <bitset>:二进制库文件,提供了位运算的一些常用函数。 - #include <string>:字符串库文件,提供了许多字符串操作的函数。 - #include <algorithm>:STL算法库文件,提供了许多常用的算法函数。 - #include <thread>:C++11中的多线程库文件,用于实现多线程编程。 - #include <pthread.h>:POSIX线程库文件,用于实现多线程编程。 - #include <time.h>:时间库文件,提供了许多时间相关的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值