开源一份基于STM32F1平台的ROS机器人底盘构建代码

前言

最初参考网上资料移植了一份基于串口的STM32通过rosserial和ROS系统通信的代码。对于小数据量格式的消息,可以正常通信,但消息量一大便会出错(如:发布ROS提供的odom和imu格式的消息)。网上还有另一种建立单片机和ROS系统的通信方式,https://blog.csdn.net/xiaoyuanwuhui/article/details/103203465这里的第二点有介绍,这里就不再叙述了。专为turtlebot3设计的OPENCR硬件通过USB虚拟串口可以很好的和ROS系统通信。鉴于此,我便想可以通过USB虚拟串口的方式和ROS系统通信。

小插曲1:采用USB虚拟串口和ROS系统之前,我尝试了好多方法都不能使传感器消息的发布频率达到程序设定的传感器的发布频率,如串口循环发送中断接收、串口中断发送中断接收、串口DMA发送接收等都不能很好的达到效果。

小插曲2:在想做一个ROS底盘之前,做了一个平衡车,感觉搭建一个基于ROS的平衡车也是非常cool的(主要是不想破费买硬件了,哈哈!),这也正是下面代码介绍的第二个分支为平衡车分支的原因。限于对平衡控制方面的一些理解不到位,故最后在平衡车实现导航时存在一些问题。这些问题调试起来比较困难,故又萌生了先制作一个稳定底盘的想法。

在整个过程,我也是边学习ROS的知识,边学习底盘构建的嵌入式方面的知识。但对于目前来说,基本达到了我可以开发程度的极限,故将代码open出来给那些需要的人参考,也非常希望各路大牛可以给一些参考和指导,不胜感激!

开源代码

目前代码放置在github上地址为https://github.com/Apex-yuan/ROS_STM32F1 目前只包含下位机部分,上位机部分的代码等后续整理好再上传。

代码总共分为三个分支:

master

基于STM32F1平台建立的ROS和STM32之间的通信模板(USB VCP + rosserial)

ros_balancecar

基于STM32平台的ROS机器人平衡底盘控制程序(双轮平衡+差速控制)

ros_stablecar

基于STM32平台的ROS机器人稳定底盘控制程序(差分模型)

在Doc文件夹内有一个log.md的文件,记录了更新修改的内容。

代码特性

  1. 支持手机APP控制小车运动
  2. 支持虚拟示波器显示动态参数(通过蓝牙传输)
  3. 采用dmp库获取mpu6050融合后的姿态信息(偏航角误差较大,又进行了简单的数据滤波)
  4. 支持pwm电机控制
  5. 支持编码器获取轮子转速
  6. 支持上位机通过topic形式动态调参(后续可通过ROS参数服务器的形式实现,暂未实现)
  7. 支持USB虚拟串口
  8. pid控制
  9. 平衡小车的直立+速度+方向控制算法(仅在平衡车分支的代码中包含)

成品展示

实物图片


测试视频

ROS平衡车测试视频:https://www.bilibili.com/video/av56831989

ROS平衡车第三弹-成品展示

ROS稳定底盘测试视频:

​ 未调参优化:https://www.bilibili.com/video/av71112199

ROS小车导航实战篇—魔鬼的步伐

​ 调参优化:https://www.bilibili.com/video/av76744814

ROS稳定底盘---优化后的导航效果

你可能感兴趣的:(ROS)