[教程] 瑞萨MicroROS(4)基于RA-ECO-RA6M4的部署

[复制链接]
23|2
YUpif 发表于 2026-6-24 14:20 | 显示全部楼层 |阅读模式

本文记录了从基于RA6M5的移植迁移到RA-ECO-RA6M4的全过程:

1. 目标

目标是在 RA-ECO-RA6M4 板子上运行 micro-ROS,使 MCU 通过 UART 与 Ubuntu 中的 micro-ROS Agent 通信,并在 ROS 2 中看到 MCU 发布的 topic。

2. 前置经验

在 RA6M5 CPK IOT 板上已经完成过一次 micro-ROS UART 移植。RA6M5 的经验包括:

  • micro-ROS 静态库接入 e² studio。
  • 使用 rmw_uros_set_custom_transport() 自定义 UART transport。
  • 使用 rclc 创建节点和 publisher。
  • 在 Ubuntu 中启动 micro-ROS Agent。
  • 通过 ros2 topic echo 验证 MCU 发布数据。

本次 RA6M4 不是直接复制官方 EK 板例程,而是借鉴 RA6M5 已跑通工程的结构,迁移到 RA-ECO-RA6M4 的实际引脚、时钟和下载方式。

3. 前言

最开始尝试使用官方资料包中的RA6M4-UART工程文件作为基础模版,但是RA6M4的工程包是用FSP3.2,而我目前用的是FSP5.8,在编译的过程中出现了一些问题,于是为了节省时间,我新开了一个基于FSP5.8的UART文件

目的是先保证最小 UART 通信正常,再接入 micro-ROS。

4. UART 引脚和下载方式确认

新建工程后,首先确认 RA-ECO-RA6M4 板上 CH340 的 UART 连接。

最终确认:

P109 = SCI9_TXD9
P110 = SCI9_RXD9

FSP 中配置:

UART Stack Name: g_uart0
Channel: 9
Baudrate: 115200
Callback: user_uart_callback

同时确认:

  • 板载 CH340 只负责串口通信,不负责下载。
  • 外接 J-Link 才能下载和调试 RA6M4。
  • SWD 引脚需要保留,不能被 UART 或其他外设占用。

SWD:

P108 = SWDIO
P300 = SWCLK

5. 一些烧录方面的问题

因为这块芯片不带板载烧录,需要外接烧录器,这边我一开始用的是瑞萨的E2 LITE,而且进行了最新的驱动升级,但是我调了很久也下载不成功,真的很奇怪,我后面一直在想这个失败的原因,但是为了不浪费时间,我改成了J-link,一下子就调通了。

6. UART Hello World 验证

在接入 micro-ROS 之前,我先写了一个普通 UART 输出程序,验证 CH340 通信链路。

但是一开始 MobaXterm 能打开 COM 口,但输出是乱码。最后也是一通检查,发现这块板子的晶振是12的,和系统自动生成的24差别过大了,导致出现了乱码,于是进行了一些简单的调整:

XTAL: 12MHz
PLL Div: /2
PLL Mul: x30.0
Clock source: PLL

修改后 UART 115200 输出正常。

7. micro-ROS 文件迁移

从 RA6M5 成功工程迁移以下内容到 RA6M4 工程:

micro_ros_renesas2estudio_component/
src/microros_allocators.c
src/microros_allocators.h
src/microros_app.c
src/microros_transport_uart_adapter.c
src/microros_transports.h
src/uros_transport_uart.c
src/uros_transport_uart.h

新增:

src/microros_time.c

RA6M4 适配修改:

  • g_uart2 改成 g_uart0
  • UART callback 改成 user_uart_callback
  • transport 注释和命名改为 RA6M4 SCI9。
  • 节点名改成 ra6m4_node
  • 发布 topic 保持 /int_publisher
  • 移除 RA6M5 LED/OLED 依赖,保留 weak hook。

8. e² studio 工程路径配置问题

第一次接入 micro-ROS 后,编译报错:

fatal error: rcl/rcl.h: No such file or directory

原因:

micro-ROS include 路径没有进入 C 编译器 include path。曾出现路径只进了 Assembler include 的情况。

解决:

.cproject / 工程属性中加入:

GNU Arm Cross C Compiler -> Includes:
${workspace_loc:/${ProjName}/micro_ros_renesas2estudio_component/libmicroros/include}

同时 Linker 加入:

Library search path:
${workspace_loc:/${ProjName}/micro_ros_renesas2estudio_component/libmicroros}

Libraries:
microros

之后构建通过。

9. heap / stack 问题

程序第一次运行时停在 allocator 相关断点附近。检查后发现我忘了修改堆栈大小:

RA6M4 工程初始配置:

#define BSP_CFG_STACK_MAIN_BYTES (0x400)
#define BSP_CFG_HEAP_BYTES (0)

micro-ROS 使用 malloc/realloc/free,没有 heap 必然无法运行。

修改:

Main stack size (bytes): 8192
Heap size (bytes): 65536

Generate 后生成文件中变为:

#define BSP_CFG_STACK_MAIN_BYTES (8192)
#define BSP_CFG_HEAP_BYTES (65536)

构建 map 中确认存在 64KB heap:

__HeapBase  = 0x20005c48
__HeapLimit = 0x20015c48
g_heap size = 0x10000

10. allocator 返回值判断问题

即使 heap 修复后,程序仍停在:

__BKPT(0);

代码原本写法:

if (RCUTILS_RET_OK != rcutils_set_default_allocator(&custom_allocator))
{
    __BKPT(0);
}

进一步检查本工程 rcutils/allocator.h 发现:

bool rcutils_set_default_allocator(rcutils_allocator_t * allocator);

也就是说该函数返回 bool,不是 rcutils_ret_t

错误原因:

  • RCUTILS_RET_OK 等于 0
  • 成功时 rcutils_set_default_allocator() 返回 true
  • 原判断变成 0 != true,所以成功也会进断点。

最终修复:

if (!rcutils_set_default_allocator(&custom_allocator))
{
    __BKPT(0);
}

修复后板端继续运行,micro-ROS 通信成功。

经验:

不同版本的 micro-ROS / rcutils 头文件接口细节可能不同。移植时不要只照抄旧工程判断方式,要以当前 libmicroros/include 中的声明为准。

11. VirtualBox Ubuntu 问题

本次使用 Oracle VirtualBox 中的 Ubuntu 22.04 运行 ROS 2 Humble 和 micro-ROS Agent。

11.1 虚拟机启动失败

VirtualBox 启动失败,日志显示:

Failed to open host device '\\.\COM5'
VERR_INVALID_HANDLE

原因:

虚拟机曾配置旧的物理串口 COM5 映射,但主机 COM5 不存在或被占用。

解决:

关闭 VirtualBox 的旧串口映射:

uart1 = off

改用 USB 直通 CH340。

11.2 CH340 直通

VirtualBox 菜单选择:

设备 -> USB -> QinHeng Electronics USB Serial

Ubuntu 中检查:

ls /dev/ttyUSB*

成功显示:

/dev/ttyUSB0

12. micro-ROS Agent 安装问题

Ubuntu 中尝试安装:

sudo apt install ros-humble-micro-ros-agent

报错:

Unable to locate package ros-humble-micro-ros-agent

解决:

使用源码构建 micro_ros_setup

sudo apt install -y git python3-colcon-common-extensions python3-rosdep python3-pip
source /opt/ros/humble/setup.bash
mkdir -p ~/microros_ws/src
cd ~/microros_ws/src
git clone -b humble https://github.com/micro-ROS/micro_ros_setup.git
cd ~/microros_ws
colcon build
source install/local_setup.bash

过程中 rosdep update 从 GitHub raw 拉取索引超时,但直接 colcon build 成功完成:

Summary: 38 packages finished

验证:

ros2 run micro_ros_agent micro_ros_agent --help

能够输出 Agent 参数说明。

13. Agent 串口权限问题

第一次启动 Agent:

ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200 -v6

报错:

open device error
device: /dev/ttyUSB0, errno: 13
Please re-run with superuser privileges.

原因:

当前 Ubuntu 用户没有 /dev/ttyUSB0 权限。

临时解决:

sudo bash -lc 'source /opt/ros/humble/setup.bash && source /home/ooo/microros_ws/install/local_setup.bash && ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200 -v6'

注意:

直接 sudo ros2 run ... 会失败,因为 sudo 环境里找不到 ROS 2 环境变量。

长期解决:

sudo usermod -aG dialout $USER

然后重启 Ubuntu。

14. 最终成功链路

最终链路:

RA6M4 firmware
  -> SCI9 UART
  -> CH340 USB serial
  -> VirtualBox USB passthrough
  -> Ubuntu /dev/ttyUSB0
  -> micro-ROS Agent
  -> ROS 2 graph
  -> /int_publisher

Agent 命令:

cd ~/microros_ws
sudo bash -lc 'source /opt/ros/humble/setup.bash && source /home/ooo/microros_ws/install/local_setup.bash && ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200 -v6'

板子复位后,Agent 显示连接日志。

第二个终端验证:

source /opt/ros/humble/setup.bash
source ~/microros_ws/install/local_setup.bash
ros2 topic list
ros2 topic echo /int_publisher

最终看到递增整数,说明 RA6M4 micro-ROS 移植成功。

韶华倾负 发表于 2026-6-26 19:33 | 显示全部楼层
最坑的就是那个rcutils_set_default_allocator返回值的问题,当初我照着旧工程抄判断条件,死活卡在 BKPT 断点,查了一下午才发现新版本函数改返回 bool 了,成功返回 true,跟之前的rcutils_ret_t完全不是一回事,纯纯的版本陷阱。还有 heap 大小也是重灾区,最开始默认开 0 我是真没想到,跑起来直接分配内存失败,后来开到 64K 才算稳住。
另外晶振不对导致串口乱码、E2 LITE 烧录玄学这些点也太真实了,RA 不同开发板晶振配置五花八门,默认生成的工程经常踩坑,串口出乱码第一反应先查时钟总没错。还有虚拟机那边 USB 直通、串口权限、agent 源码编译,全是新手容易卡的地方,楼主总结得太全了。
韶华倾负 发表于 2026-6-26 19:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0