OpenCR 主控MCU使用STM32F746它内嵌ARM Cortex-M7内核,硬件支持浮点运算,适合实现需要高性能的场合
IDE采用 Arduino, 与主控板之间通过串口连接, ROS有专门的串口库, rosserial协议 用来创建server和client.
OpenCR支持TTL/RS485. 支持UART/SPI/I2C/CAN总线, 支持JTAG. 集成九轴IMU(MPU9250,SPI接口), 多路多种电压输出,以及电源热拔插.
开发环境:
Arduino -> File → Preferences(文件首选项) ->Additional Boards Manager URLs(附加开发板网址)字段 加入
-
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json ##在下载的源码中也有此文件.
然后在 菜单中选择Tools→Board→Boards Manager 中可找到 OpenCR的内容.
安装完毕偶, 菜单中选择 [文件->例程] 中 打开一种 OpenCR或者 turtleBot3的例程
===========================================================
STM32F746内置的引导加载程序的DFU功能, 用于更新引导加载程序 bootloader. 用USB将OpenCR连接到PC的情况下, 按下BOOT0键 和RESET键,则执行内置在STM32F746中的引导加载程序并使MCU进入DFU模式. 进入DFU模式后, 通过lsusb, USB设备列表中要有“STMicroelectronics STM Device in DFU Mode”, 则在auduino菜单 ools→Programmer→DFU_UTIL, 然后选择要下载的程序, 在通过菜单 Tools→Burn Bootloader来更新引导加载程序.
===========================================================
rosserial
在微控制器MCU中将ROS的消息、话题和服务转换为串行通信方式的功能包
运行ROS的PC是一个rosserial server ,连接到PC的微控制器作为rosserial
client 。由于server和client使用rosserial协议发送和接收数据,因此所有能够发送和
接收数据的硬件都可以使用。因此微控制器中常用的UART也可以用于ROS消息或话题
-
rosserial server用在PC端, 主要有rosserial_python(功能完整强大), rosserial_server(C++版本,性能有提升,但功能上有一定限制)
-
rosserial client: 源代码已公开,可以轻松移植到其他MCU平台
-
rosserial_arduino Arduino板
-
rosserial_embeddedlinux 嵌入式Linux上
-
rosserial_windows Windows操作系统
-
rosserial_mbed 嵌入式开发环境mbed平台
-
rosserial_tivac TI生产的Launchpad板
rosserial协议是以字节为单位定义的,包含了数据包同步和数据验证所需的信息
校验和规则: 255 - (Message Length Low Byte + Message Length High Byte)%256
话题ID 0到100为用于系统功能而保留.
话题ID可以在rosserial_msgs/TopicInfo 查看
报文类型:
-
查询包:
-
当rosserial server启动后,向client请求话题名称和话题类型等信息
-
查询包的话题ID为0,数据长度为0。
-
查询包的内容如下。
-
0xff 0xfe 0x00 0x00 0xff 0x00 0x00 0xff
-
client向server发送具有以下内容的消息,之后server会基于该信息发送和接收消息。
-
uint16 topic_id
-
string topic_name
-
string message_type
-
string md5sum
-
int32 buffer_size
在MCU中的限制.
-
如果微控制器支持64位实数,则需要修改make_libraries.py中的数据类型转换部分
-
-
要使用String消息,需要如下操作。
-
std_msgs::String str_msg;
-
unsigned char hello[13] = "hello world!";
-
str_msg.data = hello;
-
-
数组: 需确认数组大小.
-
-
通讯速度: 如果使用115200bps的速率,当消息的数量增多时,会拖慢响应和处理速度。但是在OpenCR中,通过使用USB进行虚拟串行通信,可以实现高速通信。
OK, 下一步搞定 rosserial的移植.
在 下.
|
support for STM32 MCUs, based on STM32CubeMX HAL
|
源码
官方有提供, 使用方式, 参考readme.md
-
1. 默认为STM32F3xx, 如果其他系列, 则修改STM32Hardware.h中对应的 #include 部分为实际系列.
-
-
2. 产生代码
-
$ cd target_sw4stm32_workspace #使用CubeMX建立的MDK的工程根目录. 此工程可以是在WINDOWS上的目录.
-
$ rosrun rosserial_stm32 make_libraries.py . #在当前目录上建立ROS的补丁.
-
### Never forget to change the project type to cpp project in 切记把工程变成C++工程.
-
### 把工程中的 duration/time.cpp加入工程, options取消 microLIB的引用.
-
-
3. 范例代码在 src/ros_lib/examples
阅读(3792) | 评论(0) | 转发(0) |