ROS读取MPU6050数据

上一篇讲到使用I2C连接Jetson Nano和MPU6050并使用python读取,本次基于roscpp连接读取IMU数据

RTIMULib

RTIMULib是本次使用的IMU库,支持多种常见的IMU模块,可以使用SPI或I2C连接,有C++和Python接口,并包含融合算法(Kalman和RTQF),有校准功能,有ROS包。

这里是RTIMULib支持的IMU列表:
MPU-9150
MPU-6050 (Treated as MPU-9150 without magnetometers)
MPU-9250(I2C and SPI).
STM LSM9DS0
STM LSM9DS1
L3GD20H + LSM303D (used on the Pololu AltIMU-10 v4)
L3GD20 + LSM303DLHC(used on the Adafruit 9-dof)
L3GD20H + LSM303DLHC(used on the new Adafruit 10-dof IMU)
Bosch BMX055
Bosch BNO055 Note: will not work reliably with RaspberryPi/Pi2 due to clock-stretching issues.
The LSM9DS1( supplied by XECDesign)
支持的压力/温度传感器列表:
BMP180
LPS25H
MS5611
MS5637
支持的湿度传感器列表:
HTS221
HTU21D

  1. 首先安装RTIMULib库
    RTIMULib2的github连接
git clone https://github.com/jetsonhacks/RTIMULib.git
cd RTIMULib/RTIMULib
mkdir build
cd build
cmake ..
make -j4
sudo make install
  1. 安装ROS包
    rtimulib_ros
cd robo_ws
git clone https://github.com/cccedric/rtimulib_ros.git

可以在config/RTIMULib.ini中设置相关参数,比如IMU型号,I2C总线,采样频率等

遇到报错

"Failed to open I2C port - Failed to read fifo count Failed to open I2C bus 1"

是因为ros包没有权限访问I2C总线

sudo chmod a+rw /dev/i2c-*
  1. Launch
catkin_make --pkg rtimulib_ros
roslaunch rtimulib_ros rtimulib_ros.launch

订阅topic查看:

rostopic echo /rtimulib_ros/imu
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段程序是用于初始化 MPU6050 传感器的函数。下面是对程序的逐行解释: 1. `u8 MPU6050_Init(void)`:定义了一个返回类型为 `u8` 的函数 `MPU6050_Init`,没有传入参数。 2. `u8 res;`:定义了一个变量 `res`,类型为 `u8`,用于存储返回值。 3. `IIC_Init();`:调用函数 `IIC_Init()`,用于初始化 IIC 总线。 4. `MPU6050_Write_Byte(MPU6050_PWR_MGMT1_REG,0X80);`:向 MPU6050 的控制寄存器 `MPU6050_PWR_MGMT1_REG` 写入数据 `0X80`,将传感器从休眠状态唤醒。 5. `delay_ms(100);`:延时 100 毫秒。 6. `MPU6050_Write_Byte(MPU6050_PWR_MGMT1_REG,0X00);`:向控制寄存器写入数据 `0X00`,将传感器设置为正常工作模式。 7. `MPU6050_Set_Gyro_Fsr(3);`:设置陀螺仪的量程为 2000°/s。 8. `MPU6050_Set_Accel_Fsr(0);`:设置加速度计的量程为 2g。 9. `MPU6050_Set_Rate(50);`:设置采样率为 50Hz。 10. `MPU6050_Write_Byte(MPU6050_INT_EN_REG,0X00);`:禁用 MPU6050 的中断功能。 11. `MPU6050_Write_Byte(MPU6050_USER_CTRL_REG,0X00);`:配置 MPU6050 的用户控制寄存器。 12. `MPU6050_Write_Byte(MPU6050_FIFO_EN_REG,0X00);`:禁用 MPU6050 的 FIFO 缓冲区。 13. `MPU6050_Write_Byte(MPU6050_INTBP_CFG_REG,0X80);`:配置 MPU6050 的中断/旁路寄存器。 14. `res=MPU6050_Read_Byte(MPU6050_DEVICE_ID_REG);`:从 MPU6050 设备 ID 寄存器中读取数据,并将其赋值给变量 `res`。 15. `if(res==MPU6050_ADDR)`:如果变量 `res` 的值等于 `MPU6050_ADDR`,执行下面的代码块。 16. `MPU6050_Write_Byte(MPU6050_PWR_MGMT1_REG,0X01);`:向控制寄存器写入数据 `0X01`,设置传感器为唤醒状态。 17. `MPU6050_Write_Byte(MPU6050_PWR_MGMT2_REG,0X00);`:配置传感器的电源管理 2 寄存器。 18. `MPU6050_Set_Rate(50);`:再次设置采样率为 50Hz。 19. `else return 1;`:如果变量 `res` 的值不等于 `MPU6050_ADDR`,返回值为 1,并结束函数。 20. `return 0;`:返回值为 0,表示初始化成功。 这个函数的作用是初始化 MPU6050 传感器,并返回一个状态值,0 表示初始化成功,1 表示初始化失败。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值