Skip to content
cccskills
FreePublished on GitHub

ros2-microros

micro-ROS: agent, rclc client API, micro_ros_setup, custom transports, static memory.

The English summary is being prepared. Showing the original description.

Run score Not tested

See how to install

Files included (1)

  • SKILL.md3.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

micro-ROS Instructions (Ubuntu 24.04 LTS & ROS 2 Jazzy)

Experimental; not validated on MCU hardware. An MCU and a micro-ROS agent connection were unavailable for this release. Treat these source pointers and examples as a starting point to verify against your board, transport and Jazzy versions, not as proof that a firmware configuration works.

1. Architecture

micro-ROS connects constrained MCUs to the ROS 2 DDS graph via micro_ros_agent and rclc over Micro XRCE-DDS. RMW_UXRCE_ALLOW_DYNAMIC_ALLOCATIONS=OFF prevents dynamic growth of the RMW's static pools; it does not guarantee zero heap allocation throughout the firmware. See the Jazzy RMW configuration for the flag's scope.

2. Documentation Entry Points

ForEntry point
Tutorials, supported boards, transportshttps://micro.ros.org/
Firmware build system (micro_ros_setup)https://github.com/micro-ROS/micro_ros_setup
rclc executor / node API sourcehttps://github.com/ros2/rclc

3. Key Concepts & Patterns

A. Embedded Client Node Setup (rclc in C)

#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <std_msgs/msg/int32.h>

int main(void) {
  rcl_allocator_t allocator = rcl_get_default_allocator();
  rclc_support_t support = {0};
  rcl_node_t node = {0};
  rcl_publisher_t pub = {0};

  rclc_support_init(&support, 0, NULL, &allocator);
  rclc_node_init_default(&node, "mcu_node", "", &support);
  rclc_publisher_init_default(&pub, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "chatter");

  // Clean up
  rcl_publisher_fini(&pub, &node);
  rcl_node_fini(&node);
  rclc_support_fini(&support);
  return 0;
}

B. Micro-ROS Agent Execution

# Serial Transport (e.g. UART to USB)
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200

# UDP Transport
ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888

4. Symptom -> Root Cause -> Action

SymptomLikely root causeAction
MCU node vanishes from graph after MCU reset, agent still runningXRCE session not re-created; firmware assumes a one-time initAdd a reconnect state machine: rmw_uros_ping_agent() periodically, re-init entities on failure
rclc_support_init returns error on the MCUTransport not reachable (wrong serial dev/baud, UDP port/IP)Run the agent with -v6 verbose and watch for session establishment; verify transport config in firmware
Publisher works but subscriber callback never firesExecutor never spun, or rclc_executor_init handle count smaller than the number of subscriptions/timersSpin the executor in the main loop; count every subscription+timer+service in num_handles
Hard fault / crash when publishing string or sequence messagesMessage memory not allocated — rclc doesn't auto-allocate unbounded fieldsAllocate with micro_ros_utilities_create_message_memory or assign static buffers before publishing
Large messages never arrivePayload exceeds XRCE-DDS stream/MTU buffer configured in the firmwareIncrease the transport MTU/stream buffer in the colcon.meta / transport config, or shrink the message
Best-effort topics flood then stall on serialSerial bandwidth saturated: publish rate x message size exceeds baud rateLower publish rate, raise baud rate, or switch to UDP transport

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Implement or change ROS 2 Jazzy packages, nodes, interfaces, launch files and configuration in a colcon workspace. Use for building and validating a development change, including tests that report success without running. For a live QoS, TF, IMU or odometry fault, use ros2-troubleshooting.

The English summary is being prepared. Showing the original description.

Leehyunbin0131/claude-ros2-skills20Updated Sep 27, 2026

Diagnose ROS 2 Jazzy faults that reading the code cannot settle: QoS mismatch, sensor-mount and frame errors (REP 103/105), and odometry calibrated against CAD instead of the floor. Ships four runnable pass/fail checks.

The English summary is being prepared. Showing the original description.

Leehyunbin0131/claude-ros2-skills20Updated Sep 27, 2026

See all skills by Leehyunbin0131

Report a problem with this skill