Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    【XR806开发板试用】+microROS移植

    Wireless & Analog Series
    1
    1
    1080
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      haijun LV 3 last edited by

      前言

      由于microROS移植的移植比较繁琐本文只介绍移植流程,关于流程实现的细节,请参考文章中的链接。如果只是想体验microROS,可以直接clone 已经移植好的代码。
      其他关于移植的旁支笔记,可以关注微信公众号:“嵌入式的佛系达人”进行了解。

      移植可行性分析

      micrROS主要针对中高端的32位单片机,其占用内存根据节点数量和消息类型变化而变化,一般来说,micro-ROS 需要数十 KB 的RAM ,其支持主要硬件如下:

      d8b73f94-eec2-4606-a60f-42f2d4c9529f-image.png

      详细支持硬件详见链接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框架

      img

      从框架可以看出,FreeRTOS系统是很容易接入micro-ROS,关于micro-ROS框架的详细描述,请参考官网或Robot Operating System (ROS)这本书籍

      移植

      1. microROS静态库编译

      由于microROS静态库的编译比较繁琐,本文直接提供编译好的静态库:

      
      git clone https://github.com/navy-to-haijun/microROS_XR806.git
      

      如果有想了解microROS静态库的移植细节,请查看以下链接:

      XR806-micro-ROS移植-串口通信

      2. 添加接口函数

      micro-ROS和PC上的ROS服务端通信需要实现rmw_uros_set_custom_transportAPI 中的内容:

      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的双向通信。
      1 Reply Last reply Reply Quote Share 1
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策