前言
|
|
测试环境为Keil 5.20 && STM32F405VGT6 && FreeRtos 10.0.0;晶振频率为12Mhz。
请根据实际情况修改后进行测试。
原创,转载请注明出处。
介绍
ROS(Robot Operating System)是一个机器人软件平台(本人不够熟悉,只有简单使用。不多哔哔)。
这里主要介绍如何实现SMT32控制器如何实现跟ROS进行同行和数据交互:
1、ROS端和STM32端自主定义协议,在ROS端(如ubuntu)做串口驱动,实现协议解析,再将数据发送到相应topic。
2、STM32端解析和封装ROS协议。
3、移植ROSLib,将STM32作为节点加入到ROS系统中(就是库本身实现了ROS协议的解析的封装)。
ROSLIB
ROSlib是arduino下支持ROS的库,C++编写。(至于如何获取arduino IDE下ROSlib库,本人没实际操作,不多哔哔)。
在做移植过程中,主要参考 基于STM32的rosserial_client的节点开发。(主要移植步骤文中阐述的比较清楚,不多哔哔)。
建议一步一步搭建,而不是一股脑复制粘贴,因为系统或者Keil版本或者其他因素,都有可能导致错误出来,最好是一点点来。优先搭建好STM32和FreeRTOS,再加入ROSlib(C++)。
因为加入了FreeRTOS系统,系统的Task和queue机制,使得在串口收发处理时有更加便捷和完善的方式。
需要注意的是,由于ROS自定义的消息类型,大部分存在一个消息占用的数据量比较大(几百字节),所以在设置串口发送任务时的队列大小,需要仔细评估,以免内存浪费或者一帧数据内存不足。
在ros_bsp.c
文件中,定义为256个字节,根据自身情况调整:。
|
|
ros_bsp.c
中提供了stm32Hardware.h
需要定义的函数接口,具体查看源码。
ros_bsp.c
中ros_communication_bsp_init()
函数初始化整个通信需要的任务和串口初始化,默认波特率406800。
ros_test.cpp
中创建了两个任务:
|
|
ubuntu启动ROS,后续操作以及现象如下图:
参考
1、基于STM32的rosserial_client的节点开发
2、git 上的例子
3、ros rosserial_python 用法