当前位置:   article > 正文

ros c++ 代码说明文档_新手如何从零开发ROS小车 (ros串口通讯、PID运动控制、双轮差速模型解算...

ros车辆避障算法c++

6b2bd686-0915-eb11-8da9-e4434bdf6706.png

教程文档目录

6d2bd686-0915-eb11-8da9-e4434bdf6706.png

目录

1.1. 目的 3

1.2. ros小车方案选型 3

1.3. 小车底盘结构与硬件 5

1.3.1. 小车驱动模型 5

1.3.2. 小车硬件 5

1.4. STM32 编程 6

1.5. 学习计划 6

1.6. 接口功能单元 7

1.7. MCU Keil工程 8

1.8. QT上位机调试软件 8

1.8.1. 整体布局 9

1.8.2. 主界面 9

1.8.3. 地图 9

1.8.4. 驱动控制 10

1.8.5. 命令/任务窗口 11

1.8.6. 用户数据库管理 11

1.8.7. PID参数整定 12

1.8.8. 日志管理 12

1.9. 实际效果图 13

1.10. 小车蓝牙控制 14

1.11. 核心代码讲解 15

1.11.1. 任务线程 15

1.11.2. ros串口参数及里程计信息 15

1.11.3. 串口协议 16

1.11.4. 运动模型解算 17

1.12. 视频演示 18

备注:如小图看不清楚,双击即可放大查看(手动狗头)

主要目的

本人平时研究slam算法,比如激光导航,动态路径规划,以及其它上层业务以及外围驱动相关的开发。其中会很多的理论和实际应用会用到ros系统中的一些开源的软件包,所以希望借助于ros平台能够快速的验证和实现一些实际应用需要的解决方法。苦于资金紧张,等了好久才下决心做一个ros小车用于学习和研究。下面我会详细介绍我从头开始一步一步小车底层的计划、思路等。

ros小车方案选型

要从头做一个小车底盘,首先要了解小车底盘结构、硬件、模块等等。小车底盘承载着机器人定位、导航、移动、避障等多种功能,是机器人必不可少的重要硬件。所以一个好的底盘对于上层算法定位、导航、控制精度至关重要!底盘主要包括如下:

  • 小车驱动模型
  • 小车负载要求(电池容量)
  • 底层驱动控制板
  • 电机编码器选型
  • 传感器配套等等

有了上面基本需求后,接下来是自己从头设计还是借助现成的平台,就看各位自身时间安排和目的了。如有资金和时间充裕的同学,可以借助于这个平台学习和研究ros系统相关的知识,同时又能底层控制相关的从头做一遍。思考再三,决定借助某宝看看有无满足要求的小车底盘可用,淘了很久决定购买下面链接这款:

6f2bd686-0915-eb11-8da9-e4434bdf6706.png

优点有如下几个方面:

  • 负载大,搭配22.2V/20Ah锂电池,可承载30~60Kg;
  • 麦克全向转向轮,前后启动时刻角度变化小;
  • MD36行星减速电机500线光电编码器,响应快、线性度好、精度高。
  • STM32F405RGT6 MCU控制板

缺点就是就是价格比较贵、设计不够人性化,资金充足和想学习的同学可以考虑,下面我购买订单,其中选用20Ah锂电池,补差价420元。

712bd686-0915-eb11-8da9-e4434bdf6706.png

为了方便调试和接线处理,我做了如下改动:

  1. 让厂家定做了一个电源开关,防止调试时控制不住开关使用;

732bd686-0915-eb11-8da9-e4434bdf6706.png
  1. 买了一个usb集线器,分别接STM32仿真器、两个USB转RS232;

752bd686-0915-eb11-8da9-e4434bdf6706.png

772bd686-0915-eb11-8da9-e4434bdf6706.png
  1. 买了双面胶以及以及加高铝合金板,方便固定锂电池和工控机(笔记本电脑或者NUC、树莓派、RK3399都可以)

OK,小车底盘准备好了,接下来需要熟悉小车底盘的结构、硬件、以及学习STM32控制器编程。

小车底盘结构与硬件

小车驱动模型

前端一个全向从动轮,后端两个独立驱动轮,双轮差速驱动模式

小车硬件

从拿到的资料看了下硬件原理图,了解相关的原理,然后用表格把硬件要用到的接口列了出来,如下图所示:

792bd686-0915-eb11-8da9-e4434bdf6706.png

7d2bd686-0915-eb11-8da9-e4434bdf6706.png

STM32 编程

我买的MCU型号是STM32F405RGT6,由于STM32系列原理大同小异,所以不熟悉SMT32的同学可以上B站或其它网站学习,推荐正点原子、野火以及创客学院的视频教程。本人花了教程半个月学习完视频教程。野火的F429-V2带亚克力开发板如下图所示:

802bd686-0915-eb11-8da9-e4434bdf6706.png

832bd686-0915-eb11-8da9-e4434bdf6706.png

小车底盘、硬件和控制原理、SMT32使用熟悉后呢,下一步就要开始自己动手调试了,想想都鸡冻。不过正式动手之前,还是要列个学习或者实践计划表哈。

学习计划

下面是我用visio画的一个时间节点图,如下所示:

872bd686-0915-eb11-8da9-e4434bdf6706.png

接口功能单元

主要用到串口、SPI接口、GPIO、I2C、ADC、定时器等等,所以需要熟悉STM32这些接口编程。可以参考厂家提供的源码,不过既然是学习,一定要熟悉其中原理,然后自己动手实践才是硬道理。其中在调试编码器输入脉冲以及电机输出脉冲时需要用到示波器查看输入输出波形图,串口的话配合串口调试助手即可。基本功能模块调试完成后,需要组合成一个完成的ros小车底层MCU工程。

892bd686-0915-eb11-8da9-e4434bdf6706.png

MCU Keil工程

工程目录组织如下:

8d2bd686-0915-eb11-8da9-e4434bdf6706.png

CORE: M3内核、SMT32中断、启动相关文件

FWLIB: hal库文件

HARDWARE: 板载外围硬件接口驱动

MPU6050: 陀螺仪驱动接口文件

SYSTEM: 系统时钟初始化、调试串口等

UCOSIII: uscos系统相关文件

USER: 上层应用相关文件

代码统一用c编写。

为了便于调试,下面用QT写了一个简单的上位机软件。

QT上位机调试软件

刚开始想把界面做的炫一点,还特意用visio画了一个QT布局图(想做的同学可以参考下),如下所示:

整体布局

902bd686-0915-eb11-8da9-e4434bdf6706.png

主界面

952bd686-0915-eb11-8da9-e4434bdf6706.png

地图

962bd686-0915-eb11-8da9-e4434bdf6706.png

驱动控制

982bd686-0915-eb11-8da9-e4434bdf6706.png

命令/任务窗口

992bd686-0915-eb11-8da9-e4434bdf6706.png

用户数据库管理

9a2bd686-0915-eb11-8da9-e4434bdf6706.png

PID参数整定

9c2bd686-0915-eb11-8da9-e4434bdf6706.png

日志管理

9f2bd686-0915-eb11-8da9-e4434bdf6706.png

实际效果图

最终由于工作原因,只简单实现了功能,界面没时间去按上面的设计美化,如下图所示:

a02bd686-0915-eb11-8da9-e4434bdf6706.png

a12bd686-0915-eb11-8da9-e4434bdf6706.png

a32bd686-0915-eb11-8da9-e4434bdf6706.png

小车蓝牙控制

手机上下载一个手机蓝牙app,把小车上的DT-06蓝牙模块接上,即可用手机蓝牙控制小车运动啦

a42bd686-0915-eb11-8da9-e4434bdf6706.png

核心代码讲解

任务线程

主要5个线程,分别为串口命令处理、运动模型解析、imu、里程计计算、Oled显示。

a62bd686-0915-eb11-8da9-e4434bdf6706.png

ros串口参数及里程计信息

a82bd686-0915-eb11-8da9-e4434bdf6706.png

串口协议

aa2bd686-0915-eb11-8da9-e4434bdf6706.png

ae2bd686-0915-eb11-8da9-e4434bdf6706.png

串口使用FIFO数据结构,在串口中断函数里面接收上位机下发的命令(状态机实现),以及上报底层状态信息

b22bd686-0915-eb11-8da9-e4434bdf6706.png

b52bd686-0915-eb11-8da9-e4434bdf6706.png

运动模型解算

b92bd686-0915-eb11-8da9-e4434bdf6706.png

bb2bd686-0915-eb11-8da9-e4434bdf6706.png

视频演示

PID调试

bf2bd686-0915-eb11-8da9-e4434bdf6706.png
https://www.zhihu.com/video/1236675478884073472

qt上位机运行

c12bd686-0915-eb11-8da9-e4434bdf6706.png
https://www.zhihu.com/video/1236675529703129088

收藏比点赞多几倍,麻烦各位多点赞 +关注(手机双击屏幕就可以 啦),后面会陆续给大家分享ros上位机部分从零开发教程文档!
文档百度网盘下载地址:
链接:https://pan.baidu.com/s/14e0viGynFM_LwSE61aPDyA

提取码:2m91

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/339225
推荐阅读
相关标签
  

闽ICP备14008679号