硬件准备

  • MPU6050模块
  • Arduino UNO开发板
  • 杜邦线若干

第一部分:通过串口调试助手查看IMU输出值

第一步:接线

第二步:烧录程序

  • 解压缩
    • 将第一个文件解压缩得到的文件夹和第2个文件夹,复制到Arduino安装目录的libraries文件夹内,重启Arduino。
      注意:在ubuntu16.04中,将上面两个文件夹复制到~/sketchbook/libraries内
  • 烧录程序
    • 通过 文件 –> 示例 –> MPU6050 –> Examples –> MPU6050_DMP6 打开程序,上传。

  • 遇到的一些问题总结:
    • 上传的时候找不到I2Cdev.h文件。因为之前下载的I2Cdev没有找对,下载下来的文件失效,我已经给了正确的下载地址。
    • 无法选择串口
      • win7系统下:重新安装驱动。
      • 控制面板–> 设备管理器–> 端口(COM和LPT)–> Arduino UNO(COM3)–> 驱动程序–> 更新驱动程序–> 浏览我的计算机以查找驱动程序软件(R)–Arduino IDE安装路径/drives/x86(64位的操作系统选择这个文件夹)
    • ubuntu16.04系统下:卸载brltty程序,重启电脑。
      • 因为该程序与串口选择冲突,卸载brltty即可解决问题。通过sudo apt-get remove brltty。
  • 打开串口监控,设置波特率115200, 看到 “Send any character to begin DMP programming and demo: “ 时输入任意一个字符,然后发送。就能看到yaw, pitch 和roll的值,如下图所示。

第二部分:使用ROS可视化

第一步:创建ROS工作空间

  • 默认环境:ubuntu16.04,且已经安装了ROS-kinetic
sudo apt-get install ros-kinetic-serial        #安装serial工具

cd ~catkin_ws/src/
git clone https://github.com/fsteinhardt/mpu6050_serial_to_imu
git clone https://github.com/ccny-ros-pkg/imu_tools

cd ~catkin_ws/
catkin_make 
source ~catkin_ws/devel/setup.bash

第二步:修改程序

  • 查看Arduino开发板插在哪个串口上
    因为在ubuntu中不能通过类似于windows中的设备管理器查看,只能通过命令行查看

 dmesg | grep ttyS*

显示的结果为ttyACM0
在这里插入图片描述

  • 修改catkin_ws/src/mpu6050_serial_to_imu/launch/demo.launch文件,将串口名称与自己的Arduino插上电脑显示的串口一致。
<param name = "port" value = "/dev/ttyACM0"/>

  • 源文件中的程序如上所示,与自己的串口名称一致。

第三步:烧录程序

  • 打开文件:catkin_ws/src/mpu6050_serial_to_imu/arduino/MPU6050/MPU6050.ino
  • 上传程序
  • 运行如下命令,就可以把mpu6050的值转换为ROS的/imu 消息,同时通过rviz看到mpu6050朝向的变化。
 roslaunch mpu6050_serial_to_imu demo.launch 

结果:
在这里插入图片描述

错误总结

  1. 如果不能在viz看到IMU实时的变化(如下图所示),是因为自己烧录的程序不对,这个程序与用串口显示mp6050的程序不一样!!!!网上有些教程说修改在第一部分所用的程序,这个行不通。
  2. 如果上传程序出错,建议用win7系统下的Arduino IDE上传程序,本人在ubuntu下也无法成功删除上传程序。

参考资料:

https://maker.pro/arduino/tutorial/how-to-interface-arduino-and-the-mpu-6050-sensor 

https://blog.csdn.net/EAIBOT/article/details/51398074