![ROS 学习- 第16日 OpenCR + rosserial-LMLPHP ROS 学习- 第16日 OpenCR + rosserial-LMLPHP](https://c1.lmlphp.com/user/master/2020/10/26/da9c32062f4b441cf1fbf0d794cba23b.jpg)
IDE采用 Arduino, 与主控板之间通过串口连接, ROS有专门的串口库, rosserial协议 用来创建server和client.
OpenCR支持TTL/RS485. 支持UART/SPI/I2C/CAN总线, 支持JTAG. 集成九轴IMU(MPU9250,SPI接口), 多路多种电压输出,以及电源热拔插.
开发环境:
Arduino -> File → Preferences(文件首选项) ->Additional Boards Manager URLs(附加开发板网址)字段 加入
![ROS 学习- 第16日 OpenCR + rosserial-LMLPHP ROS 学习- 第16日 OpenCR + rosserial-LMLPHP](https://c1.lmlphp.com/user/master/2020/10/26/267ed5406b89dc7e46c91a1a30072c1c.jpg)
点击(此处)折叠或打开
- https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json ##在下载的源码中也有此文件.
安装完毕偶, 菜单中选择 [文件->例程] 中 打开一种 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板
校验和规则: 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
在MCU中的限制.点击(此处)折叠或打开
- client向server发送具有以下内容的消息,之后server会基于该信息发送和接收消息。
- uint16 topic_id
- string topic_name
- string message_type
- string md5sum
- int32 buffer_size
OK, 下一步搞定 rosserial的移植.点击(此处)折叠或打开
- 如果微控制器支持64位实数,则需要修改make_libraries.py中的数据类型转换部分
- 要使用String消息,需要如下操作。
- std_msgs::String str_msg;
- unsigned char hello[13] = "hello world!";
- str_msg.data = hello;
- 数组: 需确认数组大小.
- 通讯速度: 如果使用115200bps的速率,当消息的数量增多时,会拖慢响应和处理速度。但是在OpenCR中,通过使用USB进行虚拟串行通信,可以实现高速通信。
在 http://wiki.ros.org/rosserial/ 下.
源码 https://github.com/yoneken/rosserial_stm32support 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
- 当rosserial server启动后,向client请求话题名称和话题类型等信息