STM32
直播中

艾玛

11年用户 791经验值
擅长:模拟技术 EDA/IC设计 RF/无线
私信 关注
[问答]

如何去搭建一个基于ROS系统的平衡车呢

OPENCR硬件是怎样通过USB虚拟串口的方式和ROS系统进行通信呢?
如何去搭建一个基于ROS系统的平衡车呢?

回帖(1)

温益浪

2021-11-8 11:25:57
  前言
  最初参考网上资料移植了一份基于串口的STM32通过rosserial和ROS系统通信的代码。对于小数据量格式的消息,可以正常通信,但消息量一大便会出错(如:发布ROS提供的odom和imu格式的消息)。网上还有另一种建立单片机和ROS系统的通信方式,这里的第二点有介绍,这里就不再叙述了。专为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的文件,记录了更新修改的内容。
  代码特性
  支持手机APP控制小车运动
  支持虚拟示波器显示动态参数(通过蓝牙传输)
  采用dmp库获取mpu6050融合后的姿态信息(偏航角误差较大,又进行了简单的数据滤波)
  支持pwm电机控制
  支持编码器获取轮子转速
  支持上位机通过topic形式动态调参(后续可通过ROS参数服务器的形式实现,暂未实现)
  支持USB虚拟串口
  pid控制
  平衡小车的直立+速度+方向控制算法(仅在平衡车分支的代码中包含)
  …
举报

更多回帖

发帖
×
20
完善资料,
赚取积分