【XR806开发板试用】+microROS移植
-
前言
由于microROS移植的移植比较繁琐本文只介绍移植流程,关于流程实现的细节,请参考文章中的链接。如果只是想体验microROS,可以直接clone 已经移植好的代码。
其他关于移植的旁支笔记,可以关注微信公众号:“嵌入式的佛系达人”进行了解。移植可行性分析
micrROS主要针对中高端的32位单片机,其占用内存根据节点数量和消息类型变化而变化,一般来说,micro-ROS 需要数十 KB 的RAM ,其支持主要硬件如下:
详细支持硬件详见链接1
支持平台FreeRTOS;
ThreadX;
Arduino;
Zephyr;
...
其更详细的支持平台,见micr-ROS仓库[2]XR806的CPU为Arm-Star ARMv8-M,288KB SRAM,160KB Code ROM. 和16Mbit Flash。从内存上来说,满足要求。另外本次测评的是XR806 FreeRTOS 的SDK,也属于miro-ROS的支持平台之中,加大将miroROS移植到XR806中的可能性。
对于外设,一般都使用uart和UDP。XR806也满足要求。
综上,将miroROS移植到XR806中,具有可行性;
micro-ROS框架
从框架可以看出,FreeRTOS系统是很容易接入micro-ROS,关于micro-ROS框架的详细描述,请参考官网或Robot Operating System (ROS)这本书籍
移植
1. microROS静态库编译
由于microROS静态库的编译比较繁琐,本文直接提供编译好的静态库:
git clone https://github.com/navy-to-haijun/microROS_XR806.git
如果有想了解microROS静态库的移植细节,请查看以下链接:
2. 添加接口函数
micro-ROS和PC上的ROS服务端通信需要实现
rmw_uros_set_custom_transport
API 中的内容:rmw_uros_set_custom_transport( true, // Framing enabled here. Using Stream-oriented mode. (void *) &args, my_custom_transport_open, my_custom_transport_close, my_custom_transport_write, my_custom_transport_read );
从定义来说,则是实现通信方式的初始化,读、写三个功能
本次实现uart和udp通信,关于实现细节,请参考以下两篇链接:
- uart通信:XR806-micro-ROS移植-串口通信
- udp通信:XR806的micro-ROS移植UDP通信
使用
前提条件:xr806的FReeRTOS SDK可以正常使用
1 code
下载SDK
mkdir xr806_sdk cd xr806_sdk git clone https://sdk.aw-ol.com/git_repo/XR806/xr806_sdk/xr806_sdk.git
下载移植好microROS代码
cd project/demo git clone https://github.com/navy-to-haijun/microROS_XR806.git
文件必须放在demo路径下,否则会编译出错
文件结结构:. ├── book # 参考资料 │ └── Robot_Operating_System_(ROS).pdf ├── command.c ├── command.h ├── example # 测试demo │ ├── micro_ros_pub_int32.c # 测试订阅 │ ├── micro_ros_pub_sub.c # 测试发布 │ └── micro_ros_sub_int32.c # 同时测试发布和订阅 ├── gcc │ ├── defconfig │ └── Makefile # 编译规则 ├── image │ └── xr806 ├── main.c # 组函数 ├── microros # 移植好的microROS │ ├── include # microROS头文件 │ └── libmicroros.a # microROS静态文件库 ├── prj_config.h ├── readme.md └── transport # 实现microROS的通信 ├── microros_xr806.h ├── serial_transport.c # uart通信实现 └── udp_transport.c # udp 通信实现
该demo提供microROS的静态库和相关头文件;
提供两种通信方式:udp和串口,通过
microros_xr806.h
中的宏定义#define MICROROS_UDP
和#define MICROROS_SERIAL
决定UPD相关代码是否被编译;
提供三个测试demo;通过microros_xr806.h
中的宏定义#define MICROROS_PUB_INT32
,#define MICROROS_SUB_INT32
,MICROROS_PUB_SUB
决定哪个demo测试被编译;
2 宏定义选择/*microROS相关宏定义*/ /*通信方式*/ #define MICROROS_UDP // #define MICROROS_SERIAL /*demo选择*/ // #define MICROROS_PUB_INT32 // #define MICROROS_SUB_INT32 #define MICROROS_PUB_SUB
通信方式选择udp,demo选择
MICROROS_PUB_SUB
3 编译
cp project/demo/microROS_XR806/gcc/defconfig .config #检查SDK的配置是否正常 make menuconfig # 清理,切换工程时需要 make build_clean # 编译成镜像文件 make build -j6
4 下载
cd tools ./phoenixMC -i ../out/microros_system.img
效果
https://www.bilibili.com/video/BV1PC4y1d7si/?aid=789383752&cid=1291779869&page=null该视频中,microROS在xr806中实现一个节点
xr806_pub_sub
,两个话题:xr806_pub_Int32
:实现发布功能;xr806_sub_Int32
:实现订阅功能;
实现xr806和PC上的ROS2的双向通信。
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号