rosserial、ros_lib移植到STM32讲解

这边博客主要是对前面两篇博客的一个补充(ROS使用STM32F407ZGT6作为底盘控制器、ros下使用rosserial和STM32F1/STM32F4系列进行通信(MDK5工程)),再次说明一下本文的主要参考:

1、https://blog.csdn.net/ykevin0510/article/details/72725633?locationNum=7&fps=1

2、rosserial的详细介绍:http://wiki.ros.org/rosserial

3、rosserial_client的介绍:http://wiki.ros.org/rosserial_client

4、rosserial_client的教程程:http://wiki.ros.org/rosserial_client/Tutorials

5、rosserial协议的介绍:http://wiki.ros.org/rosserial/Overview/Protocol

下面我们开始进入正文:

首先看一下整个工程的文件目录:

Bsp文件夹主要放一些配置文件,包括串口、延时、收发的数据定义

Driver文件夹下主要放外设的驱动代码,包括ADC、LED、IMU、OLED、Encoder、Servo等等、如下图:

RosLibs文件夹下主要放ros_lib的文件,如下图:

然后其他的文件就是STM32开发的依赖,这个不做过多讲解。如果不会新建STM32工程的请参考正点原子的库函数教程,本文的知识就是参考了正点原子的库函数教程,可能很多同学会喜欢使用HAL库来进行开发,HAL库可以使用STM32Cube进行图形化配置和初始化IO,但是我个人感觉看代码的话没有那么容易明白,可能之后也会学习吧,如果使用HAL库的话推荐学习的资料是硬石科技录制的视频教程,这些资料在(哔哩哔哩)bilibili上面都有的,我们先看一下STM32Cube图形化的图片

上面可能废话有点多下面就主要讲解移植中需要注意的问题吧:

首先我们要先确认我们的串口程序可以进行正常收发,可以直接使用正点原子的串口,使用串口助手进行测试:

然后就是配置我们的STM32系统时钟,因为要和ROS进行通信,那么他们的时钟上就要保持同步否则就会出现(与设备不同步,正在重启的错误),本文使用的是SysTick心跳用中断进行计数,然后把当前的计数值返回如下图:

配置完了这些就到了配置和ros_lib相关的部分了

首先我们找到STM32Hardware.h文件然后进行如下修改:

这里主要是把我们写好的串口程序给替换掉就可以了

然后就是箭头部分就是我们上面系统时钟所写的millis()函数

到这里的话就参不多配置完成了,这里主要是讲解,大家有需要的还是直接下载ros下使用rosserial和STM32F1/STM32F4系列进行通信(MDK5工程)这个工程师完全可以使用的,希望我写的博客可以给大家一些帮助。

最近建立了一个DIY交流群,欢迎大家进群交流:

发布了12 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36349536/article/details/83617213