[Documentation] [TitleIndex] [WordIndex

Planet ROS

Planet ROS - http://planet.ros.org

Planet ROS - http://planet.ros.org[WWW] http://planet.ros.org


ROS Industrial: A New Chapter for ROS-Industrial Americas

Over the past few months, I've had the privilege of stepping into the role of leading ROS-Industrial Americas. I'm grateful to Matt Robinson for his years of leadership and the strong community he helped build. At our 2026 Annual Meeting, I had the opportunity to share my first impressions and my vision for where we can go next.

I've reproduced that welcome letter below, because it captures the direction I hope we'll pursue together.

This is my first annual meeting as program director for ROS-Industrial Americas, and one thing has become clear very quickly: the strength of ROS-Industrial has never been a single individual or organization. It's the community itself.

Since we announced the leadership transition, I've heard from dozens of members offering encouragement, advice, questions, and ideas.

You made it immediately obvious that you participate in ROS-Industrial not because of a logo or affiliation, but because you genuinely care about advancing industrial robotics. That commitment matters especially now.

It feels like a lot has changed since our last meeting a year ago. Large language models have rapidly evolved from impressive demonstrations into practical tools used daily by engineers around the world. Those same advances are now beginning to reshape robotics as well.

Major technological shifts create uncertainty, but they also create opportunity. One of the reasons ROS-Industrial exists is to help practitioners evaluate emerging technologies, separate signal from noise, and move useful ideas from research into real-world deployment.

For fourteen years now, ROS-I has helped industrial robotics practitioners advance, adopt, and apply technologies that were once difficult to deploy reliably in industrial contexts. Today, we're seeing another transition. Robotic foundation models, LLMs, Physical AI, synthetic data generation, and learning-enabled systems are creating capabilities that seemed impractical not many years ago.

The question for us is no longer whether these technologies will influence industrial robotics. As we will hear from several speakers, they already have. The question is how we incorporate them responsibly, effectively, openly, and practically into real systems.

As I step into this role, I see part of my responsibility as helping this community ask those questions clearly and answer them together.

ROS-Industrial's mission remains the same: enabling innovation in industrial robotics through collaboration, open-source technology, applied research, and education. New technologies will continue to emerge, and our responsibility is to understand them, evaluate them, and make them useful to industrial practitioners. Today, that includes AI. Tomorrow, it will include technologies not yet imagined.

I am grateful to inherit that mission, and I am committed to stewarding it with diligence, openness, and practical focus.

At this year's meeting, our speakers will introduce new open-source robotics software, explore novel applications of AI, discuss new opportunities for open-source automation, and share real-world experience deploying these solutions in specific contexts. Our workshops will give you a focused opportunity to direct the consortium over the coming years.

But the future of ROS-Industrial will not be determined by keynote speakers, steering committees, or roadmap documents alone. It will be shaped by practitioners who bring real problems, real deployments, real successes, and even real failures back to the community.

I offer my sincere thanks to every one of you and your colleagues who have fed this community over the last year: contributing code, sharing lessons learned, participating in projects, mentoring newcomers, and helping move open-source robotics technology from research into production.

I'm excited about this meeting, but I'm more excited about what we'll all do together in the year ahead.

Sincerely,
Jerry Towler
Program Director, ROS-Industrial Americas

[WWW] https://rosindustrial.org/news/2026/7/23/a-new-chapter-for-ros-industrial-americas

ROS Discourse General: Do warehouse AMR operators actually monitor their fleets for security in production?

Hi all — I’m a security engineer researching runtime security for autonomous mobile robot fleets (warehouse/3PL AMRs on ROS 2). I keep hitting one question I can’t answer from the outside, and I’d value the perspective of people who actually run or build these fleets:

  1. For fleets already deployed in production — is anyone doing continuous security monitoring (detecting anomalous behaviour at runtime), or is security still mostly design-time hardening (SROS 2, DDS security) and then hands-off?
  2. When an operator worries about a robot being compromised, is that framed as a cybersecurity problem or purely as a safety/uptime problem? Who owns it internally?

Not selling anything — genuinely trying to understand the current state before assuming a gap exists. Grateful for any real-world experience.

2 posts - 2 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/do-warehouse-amr-operators-actually-monitor-their-fleets-for-security-in-production/56931

ROS Discourse General: Convert in the terminal

Would you use a free CLI tool to convert CAD assemblies to URDF?

No CAD plugins.

Just one command from your terminal to work in Ros directly.

I’m thinking about open-sourcing the core of a tool I’ve been building over the past few months, and I’d love to validate the idea before releasing it.

Would you use something like this?

Or do you prefer the existing CAD add-ins?

If not, what’s the biggest reason?

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/convert-in-the-terminal/56908

ROS Discourse General: Logging and Observability Guide Review Part 2 | Cloud Robotics WG Meeting 2026-08-24

The group is skipping two meetings (2026-07-27, 2026-08-10) due to lack of available members!

The next meeting of the CRWG will be at Mon, Aug 24, 2026 4:00 PM UTC→Mon, Aug 24, 2026 5:00 PM UTC, where we will continue editing the first draft of the Logging and Observability guide. We also worked on this last session, but decided not to record as it would make for pretty dry video content!

The meeting link for next meeting is here, and you can sign up to our calendar or our Google Group for meeting notifications or keep an eye on the Cloud Robotics Hub.

Hopefully we will see you there!

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/logging-and-observability-guide-review-part-2-cloud-robotics-wg-meeting-2026-08-24/56907

ROS Discourse General: Seeking advice on reaching ROS 2 developers

I’ve spent the last few months building ������� to automate one of the most repetitive parts of robotics development. Instead of manually converting CAD assemblies, configuring joints, generating robot descriptions, and debugging the first setup, the goal is a verified, ready-to-use robotics workspace automatically in ������ and ����.

But now I’m at a point where the technical part feels solid. The new challenge is figuring out how to reach the right users for such a ��������� �������.

If you’ve built developer tools or engineering software, how did you get your first 10 to 50 users? What channels actually worked? What wasted effort would you skip if you started again?

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/seeking-advice-on-reaching-ros-2-developers/56873

ROS Discourse General: Community event calendar; Get updates to only the selected events

On the community event calendar (introduced in discourse.openrobotics.org#48220), is there a way to 1) select only the events of my interest, 2) receive updates if such event gets updated (time change etc.)?

Thank you.

3 posts - 2 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/community-event-calendar-get-updates-to-only-the-selected-events/56844

ROS Discourse General: Nvidia Jetson price increase by up to 100%, what other boards are you using to run ROS?

As avid Jetson user, I just saw there has been 50-100% price increases across all Nvidia Jetson kit/module lineup, what other boards/SoCs/PCs are you using for running ROS on real world robots? I saw recent posts by @smac with AMD Strix, Intel also made some robotics computers recently, there’s also upcoming Qualcomm’s Arduino HW, but that’s more on EDU/DIY side…

Jetsons seemed to me to have the most mature ecosystem, but some of those price increases surely puts them away from reach of students/hobbyists, and can have also impacts on larger fleet deployments.

EDIT: Added voting poll! :down_arrow:

Click to view the poll.

6 posts - 5 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/nvidia-jetson-price-increase-by-up-to-100-what-other-boards-are-you-using-to-run-ros/56841

ROS Discourse General: PyZeROS: a Python-first alternative to `rclpy` over Zenoh

Hi everyone,

I am releasing PyZeROS, an experimental alternative to rclpy for communicating with ROS from Python. This is not a Python wheel packaging rclpy: I bit the bullet and wrote a client from scratch in pure Python.

You can install PyZeROS like a standard python package:

pip install pyzeros

It does not require a ROS installation, colcon workspace, message compilation, or a ROS executor. It communicates with ROS 2 through Zenoh and interoperates with standard ROS 2 nodes using rmw_zenoh_cpp.

The main features are:

A subscriber looks like this:

import asyncio

import asyncio_for_robotics as afor
import pyzeros
from ros2_pyterfaces.cyclone.all_msgs import String


async def main():
    sub = pyzeros.Sub(String, "chatter")
    async for msg in sub.listen_reliable():
        print(msg.data)


with pyzeros.auto_context(node="listener", namespace="/demo"):
    asyncio.run(main())

Why another ROS 2 client?

You’ll find that Rust has many independent ROS 2 client implementations, all with interesting designs and trade-offs. In Python, however, we have only rclpy, and RoboStack+Pixi as (fantastic) alternative installation method.

I made PyZeROS as a Python-native option built around standard Python tooling and asyncio. It’s not a repackaging of rclpy or rcl and is widely different from it. The goal is to communicate with a ROS network from python, not to integrate with the whole ROS ecosystem.

Main differences are:

Why asyncio?

Robots are asynchronous systems, so they need an execution model. Python already has one: asyncio, so I use it.

Using callbacks directly is possible, but it can quickly lead to shared-state issues, locks, and complicated lifecycle management. After using asyncio in robot applications for several years, I find async/await much easier to reason about, and the python community has many tools for it. In my benchmarks, PyZeROS is also significantly faster than rclpy’s callback-and-executor model, so there does not appear to be a large performance hit from asyncio.

Custom messages

This is essential to ROS, and making them easy to define was especially important to me. In PyZeROS, you can define them directly as Python dataclasses and interoperate with standard ROS 2 messages:

from dataclasses import dataclass, field

import pyzeros
from ros2_pyterfaces.cyclone import all_msgs, idl


@dataclass
class Sphere(
    idl.IdlStruct,
    typename="tutorial_interfaces/msg/Sphere",
):
    center: all_msgs.Point = field(default_factory=all_msgs.Point)
    radius: idl.types.float64 = 0.0


pub = pyzeros.Pub(Sphere, "sphere")
pub.publish(Sphere(radius=42.0))

There is no .msg file, CMake configuration, or colcon build required on the PyZeROS side. For interoperability, the type name, field names, and field types must match the message definition used by the other ROS 2 nodes.

Performance

I also measured PyZeROS against rclpy for round-trip latency:

This is about 5.5× faster in this microbenchmark.

The benchmark sends sensor_msgs/msg/JointState messages continuously inside one node using two publisher/subscriber pairs. Keeping everything local minimizes transport latency, so the benchmark primarily measures executor and message serialization/deserialization overhead.

The benchmark code and complete results are available here: GitHub - 2lian/afor_benchmarks · GitHub

I also tested PyZeROS in a more realistic stress test with 100 nodes publishing mostly JointState messages at around 10 Hz. This uses my own ROS nodes for controlling a robot swarm that I have been working on for several years. In that application, the PyZeROS version used roughly one-quarter of the CPU used by the rclpy version.

Related libraries I created for PyZeROS

ros2-pyterfaces is how I define messages in Python. It provides XCDR1 serialization and ROS RIHS01 type hashes. It can serialize using cyclone_idl (tweaked by me) or cydr (created by me), with cydr being faster than rclpy to ser/de messages. It is a standalone low-level library, so it can also be used independently to send ROS messages over DDS or another RMW:

asyncio-for-robotics (afor) is the asynchronous model that I’ve been using on my robot software for a while now. It already supports ROS (rclpy) and other systems, and it now supports Lyrical and its new AsyncNode:

Feedback, testing, issues, and contributions are very welcome. I am sure there are still some rough edges, but I cannot wait indefinitely for perfection before releasing it. Reaching this point took a long time. ROS is a large ecosystem, and I am already very happy to have topics and services working

7 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/pyzeros-a-python-first-alternative-to-rclpy-over-zenoh/56806

ROS Discourse General: OnSLAM: Run LiDAR-inertial mapping on ROS1 bags directly from Windows

Hi everyone,

I recently released OnSLAM, an open-source Windows application for running LiDAR-inertial odometry and mapping on ROS1 bag files.

It automatically detects compatible LiDAR and IMU topics, runs the mapping pipeline locally, visualizes the trajectory and point-cloud map in the browser, and exports PLY and PCD files.

The main goal is to make it easier to inspect datasets, demonstrate LIO mapping, and generate maps without rebuilding a complete Linux and ROS environment.

The project is still early, and I am looking for users willing to test it with different sensors and datasets.

GitHub: GitHub - musabali314/OnSLAM: A Windows app for local LiDAR-inertial mapping of ROS1 bag files with live point-cloud visualization and PLY/PCD export. · GitHub

Demo: https://youtu.be/VGmrXOI95Uo?si=oqzMvNMH3C0D9Zje

I would especially appreciate feedback from anyone using Livox, Ouster, Velodyne, or Hesai data.

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/onslam-run-lidar-inertial-mapping-on-ros1-bags-directly-from-windows/56801

ROS Discourse General: AgileX NERO Robotic Arm Control with OpenClaw

1.Introduction

The recent popularity of OpenClaw has sparked a wave of enthusiasm for building personal robotic assistants. In this tutorial, we’ll demonstrate how to write an OpenClaw Skill that enables simple control of the AgileX NERO robotic arm.

Before proceeding, make sure you have already installed and configured the OpenClaw environment. Please refer to the official OpenClaw documentation for installation instructions.

2. Writing an OpenClaw Skill

Inside your OpenClaw agent workspace, create the following files under the skills directory:

.
├── config
│   └── hands_ctrl.yaml
├── scripts
│   └── hands_ctrl.py
└── SKILL.md

In this example, we are using the Three Provinces and Six Ministries multi-agent architecture, so the skill is placed inside the workspace of the Crown Prince agent, as shown below.

Don’t worry if you are not using this multi-agent architecture. The following implementation works equally well for a standard OpenClaw workspace.

2.1 SKILL.md

The contents of SKILL.md are shown below:

---
name: hands_ctrl
description: Use when the user wants OpenClaw to perform physical hand gestures like shaking hands or waving, or to recover/reset the hardware task. Executes the corresponding Python script based on user intent and securely interrupts any ongoing gesture before starting a new one.
---

# Gesture Control for OpenClaw

Use this skill when the user wants OpenClaw to act as a gesture controller for the hardware or robotic system.

## Inputs

Accept natural language commands or explicit action requests, such as:

- "握手", "shake hands", "let's shake"
- "挥手", "wave at me", "say hello"
- "恢复", "恢复任务", "recover", "reset"

Derive the intended action (`shake`, `wave`, or `recove`) from the user's input before execution.

## Interruption Handling (Ctrl + C)

Hardware can only perform one gesture safely at a time to prevent motor conflicts. 
If the user requests a new gesture or a recovery command while a previous `hands_ctrl.py` process is still executing, you MUST interrupt the active process first. Send a `Ctrl + C` (SIGINT) to the running process to safely cancel the current hardware action before executing the new command. Ensure no orphaned background processes are left behind.

## Modes

### Handshake

Use when the user issues a handshake command.

Produce the following execution:

~~~bash
python3 skills/scripts/hands_ctrl.py --action shake
~~~

Implement this execution with:
- strict passing of the `--action shake` argument.
- capturing of standard output to confirm the hardware received the command.

### Wave

Use when the user issues a wave command.

Produce the following execution:

~~~bash
python3 skills/scripts/hands_ctrl.py --action wave
~~~

Implement this execution with:
- strict passing of the `--action wave` argument.
- capturing of standard output to confirm the hardware received the command.

### Recover

Use when the user issues a command to recover or reset the task.

Produce the following execution:

~~~bash
python3 skills/scripts/hands_ctrl.py --action recove
~~~

Implement this execution with:
- strict passing of the `--action recove` argument.
- capturing of standard output to confirm the hardware received the command.

## Backend Rules

Prefer executing the provided script over reimplementing the logic. Use `skills/scripts/hands_ctrl.py` as the sole backend interface for these gestures. Do not attempt to modify or rewrite the hardware control logic within the script unless explicitly asked to do so. Ensure process termination (SIGINT / Ctrl + C) is handled gracefully by the system.

## Packaging Rules

- The execution context must be at the root of the workspace so that the relative path `skills/scripts/hands_ctrl.py` is valid.
- Ensure the Python environment has the necessary dependencies installed to run the script.

## Workflow

1. Acquire and parse the user's intent from the prompt.
2. Analyze whether the intent maps to the Handshake, Wave, or Recover mode.
3. Check if there is an active `hands_ctrl.py` process currently running.
4. If a process is running, send a `Ctrl + C` (SIGINT) to terminate it and wait for it to stop completely.
5. Verify the existence of the `skills/scripts/hands_ctrl.py` file locally.
6. Execute the command corresponding to the matched mode.
7. Capture execution logs (`stdout` and `stderr`).
8. Update the user on the success or failure of the hardware action, clearly stating if a previous action was interrupted via Ctrl + C.

## Output Expectations

When reporting progress or final results, include:

- detected gesture intent (shake, wave, or recove)
- whether a previous process was interrupted via Ctrl + C
- the exact script command executed
- validation of execution (e.g., success message or error trace)
- open risks or hardware backend limitations

2.2 How the Skill Works

This Skill simply maps natural-language commands to different execution modes.

python3 skills/scripts/hands_ctrl.py --action shake

python3 skills/scripts/hands_ctrl.py --action wave

python3 skills/scripts/hands_ctrl.py --action recove

All three commands invoke the same backend script : hands_ctrl.py. The actual hardware control logic is implemented inside this Python script. The Skill itself is responsible only for invoking the script with the appropriate command-line argument.

2.3 hands_ctrl.py

The implementation of hands_ctrl.py is shown below.

import time
import argparse
import yaml
from pyAgxArm import create_agx_arm_config, AgxArmFactory


def wait_motion_done(robot, timeout: float = 5.0, poll_interval: float = 0.1) -> bool:
    """Wait until the robotic arm reaches the target position or the operation times out."""
    time.sleep(0.5)
    start_t = time.monotonic()

    while True:
        status = robot.get_arm_status()

        if status is not None and getattr(status.msg, "motion_status", None) == 0:
            return True

        if time.monotonic() - start_t > timeout:
            print(f"Timed out waiting for motion completion ({timeout:.1f}s)")
            return False

        time.sleep(poll_interval)


# Set the following three parameters to None by default so that the
# "recove" action can be executed independently without requiring them.
def main(action_name, pose_prepare=None, pose_left=None, pose_right=None):

    # Create the robotic arm configuration and establish the connection
    cfg = create_agx_arm_config(robot="nero", comm="can", channel="can0")
    robot = AgxArmFactory.create_arm(cfg)
    robot.connect()

    # Switch to Normal Mode and enable CAN communication
    print("Switching to Normal Mode and enabling CAN communication...")
    robot.set_normal_mode()
    time.sleep(1)

    # Enable the robotic arm
    print("Enabling the robotic arm...")
    while not robot.enable():
        time.sleep(0.01)

    print("Robotic arm enabled successfully.")

    # Set the motion speed percentage
    robot.set_speed_percent(80)

    # Center (safe) pose of the robotic arm
    pose_center = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

    if action_name == "recove":
        print("\nExecuting recovery action: moving the robotic arm to the safe position...")
        robot.move_j(pose_center)
        wait_motion_done(robot, timeout=8.0)
        time.sleep(1)
        print("The robotic arm has returned to the safe position. Program finished.")
        return

    print(f"Executing action: {action_name}")
    print(
        f"Motion parameters:\n"
        f"Preparation pose: {pose_prepare}\n"
        f"Left pose: {pose_left}\n"
        f"Right pose: {pose_right}"
    )

    try:
        print("Moving to the center pose...")
        robot.move_j(pose_center)
        wait_motion_done(robot, timeout=8.0)

        print("Moving to the preparation pose...")
        robot.move_j(pose_prepare)
        wait_motion_done(robot, timeout=8.0)

        print(f"Starting continuous '{action_name}' motion (Press Ctrl+C to stop)...")

        cycle_count = 0

        while True:
            cycle_count += 1

            print(f"Cycle {cycle_count} - Pose 1")
            robot.move_j(pose_left)
            wait_motion_done(robot)

            print(f"Cycle {cycle_count} - Pose 2")
            robot.move_j(pose_right)
            wait_motion_done(robot)

    except KeyboardInterrupt:
        print("\nMotion interrupted by the user. Returning to the center pose...")
        robot.move_j(pose_center)
        wait_motion_done(robot)

    finally:
        time.sleep(1)
        print("Program finished.")


if __name__ == "__main__":

    parser = argparse.ArgumentParser(
        description="Control the AgileX NERO robotic arm using predefined motions loaded from a YAML configuration file."
    )

    # Path to the YAML configuration file
    parser.add_argument(
        "--config",
        type=str,
        default="skills/config/hands_ctrl.yaml",
        help="Path to the YAML configuration file (default: skills/config/hands_ctrl.yaml)",
    )

    # Action to execute
    parser.add_argument(
        "--action",
        type=str,
        choices=["wave", "shake", "recove"],
        default="wave",
        help='Name of the action to execute. It must match a key in the YAML file. '
             'The "recove" action is built-in and does not require YAML parameters '
             "(default: wave).",
    )

    args = parser.parse_args()

    if args.action == "recove":
        main(args.action)
        exit(0)

    try:
        with open(args.config, "r", encoding="utf-8") as f:
            config_data = yaml.safe_load(f)

    except FileNotFoundError:
        print(f"Error: Configuration file '{args.config}' not found.")
        exit(1)

    except yaml.YAMLError as e:
        print(f"Error parsing the YAML configuration file: {e}")
        exit(1)

    # Retrieve the parameters for the selected action
    actions_dict = config_data.get("actions", {})

    if args.action not in actions_dict:
        print(f"Error: Action '{args.action}' was not found in the configuration file.")
        exit(1)

    selected_action = actions_dict[args.action]

    pose_prepare = selected_action.get("pose_prepare")
    pose_left = selected_action.get("pose_left")
    pose_right = selected_action.get("pose_right")

    if not all([pose_prepare, pose_left, pose_right]):
        print(
            f"Error: The action '{args.action}' is missing required parameters "
            "(pose_prepare, pose_left, pose_right)."
        )
        exit(1)

    main(args.action, pose_prepare, pose_left, pose_right)

3. Script Overview

This script controls the AgileX NERO robotic arm using predefined motion parameters stored in a YAML configuration file.

The YAML file defines each motion sequence using three joint-space poses:

When the program starts, it performs the following steps:

  1. Creates the robotic arm configuration and establishes the connection.
  2. Switches the robot into normal operating mode.
  3. Enables CAN communication.
  4. Enables the robotic arm.
  5. Sets the motion speed.
  6. Executes the requested action based on the command-line argument.

Three actions are currently supported:

For both the wave and shake actions, the robot first moves to a preparation pose and then continuously alternates between the left and right poses until the user interrupts the program with Ctrl+C.

When interrupted, the script automatically returns the robotic arm to its center (safe) position before exiting.

The recover action is a built-in recovery command that immediately moves the robotic arm back to its predefined safe position.

4.YAML Configuration

The motion parameters are stored in hands_ctrl.yaml.

actions:
  wave:
    pose_prepare: [0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    pose_left: [0.8, 0.0, 0.0, 0.6, -0.6, 0.0, 0.0]
    pose_right: [0.8, 0.0, 0.0, -0.6, -0.6, 0.0, 0.0]

  shake:
    pose_prepare: [0.0, 0.6, 0.0, 1.0, 1.57, 0.0, 0.0]
    pose_left: [0.0, 0.6, 0.0, 1.0, 1.57, 0.0, 0.0]
    pose_right: [0.0, 0.6, 0.0, 0.6, 1.57, 0.0, 0.0]

Each action consists of three joint-space poses:

The Python script loads these poses at runtime and executes the corresponding motion sequence according to the selected action.

5.Demo

After completing the configuration above, you can control your OpenClaw-powered robotic assistant using natural language and command the AgileX NERO robotic arm to perform simple gestures such as waving, shaking hands, and recovering to a safe position.

The demonstration is shown below.
2026-03-27-16-20-40 (1)

FAQ

Q1:Can OpenClaw Control Real Robots?

Yes. OpenClaw is responsible for task understanding and Skill execution. Through Skills, it can connect to external programs and hardware devices, enabling control of real robots.

Q2:What Is an OpenClaw Skill?

An OpenClaw Skill is a modular extension that expands the capabilities of an AI Agent. Developers can define trigger conditions and execution logic in a SKILL.md file, allowing the Agent to invoke the appropriate scripts based on natural language instructions.

Q3: How Do You Use OpenClaw to Control the NERO 7-DoF Robotic Arm?

The control workflow includes the following steps:

  1. Install and configure the OpenClaw environment.
  2. Create a robot control Skill.
  3. Develop a Python script for hardware control.
  4. Configure robot motion parameters using a YAML file.
  5. Trigger robotic arm actions through natural language commands.

Q4: Why Use a YAML Configuration File?

A YAML file stores the motion parameters of the robotic arm, separating motion data from the control logic. This design allows developers to create or modify robot actions simply by updating the pose parameters in the YAML file, without changing the underlying Python control code.

Q5:Is Controlling a Robot with OpenClaw Considered Embodied AI?

The combination of OpenClaw and physical robot hardware represents a practical approach to enabling AI Agents to interact with the physical world. It is one of the promising directions being explored in the field of Embodied AI.

:speech_balloon: Have Question?

If you encounter any issues with environment installation, parameter configuration, or RL training, feel free to leave your questions for further discussion.

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/agilex-nero-robotic-arm-control-with-openclaw/56739

ROS Discourse General: Opportunity for ROS Developers: AMD AI DevMaster Hackathon Physical AI Track

AMD AI DevMaster Hackathon

Official Registration: AMD AI DevMaster Hackathon · Luma

Overview

​Join developers, researchers, students, AI practitioners, and open-source contributors worldwide to build innovative AI applications on AMD Radeon™ GPUs and the ROCm™ software stack. The AMD AI DevMaster Hackathon is a fully online global competition featuring three innovation tracks: Agentic AI, Multimodal AI, and Physical AI. Participants can build individually or in teams of up to three members and compete for a share of USD $30,000 prize pool. Registered participants may also receive access to AMD GPU resources during the hackathon period.

:trophy: $30,000 USD Prize Pool

:laptop: Free AMD Radeon GPU Access

:globe_showing_europe_africa: Attend Online & Submit Online

:rocket: Three AI Innovation Tracks

:busts_in_silhouette: Individuals or Teams (up to 3 members)

:white_check_mark: Registration

​To be eligible for judging, awards, and prize payments, participants must:

​Register as a member of the AMD AI Developer Program before joining this virtual event

​Global developers: AMD AI Developer Program

​Only for developers in Mainland China: AMD Developer Program China

​Meet all eligibility requirements outlined in the official Rules & Conditions document

:police_car_light: Prize Eligibility Notice: Participants who are not registered members of the AMD AI Developer Program will not be eligible to receive prize money, even if their submission is selected as a winning project.

:date:Hackathon Schedule

Registration Opens

Beijing/Singapore (UTC+8): July 10, 2026, 12:00 AM

Europe (CEST): July 9, 2026, 6:00 PM

US Pacific (PDT): July 9, 2026, 9:00 AM

Submission Opens

Beijing/Singapore (UTC+8): July 15, 2026, 12:00 AM

Europe (CEST): July 14, 2026, 6:00 PM

US Pacific (PDT): July 14, 2026, 9:00 AM

Hackathon Ends / Final Submission Deadline

Beijing/Singapore (UTC+8): August 6, 2026, 11:59 PM

Europe (CEST): August 6, 2026, 5:59 PM

US Pacific (PDT): August 6, 2026, 8:59 AM

:bullseye: Choose Your Track

​Choose one of three innovation tracks designed to showcase practical AI applications accelerated by AMD Radeon GPUs and ROCm.

:robot: Track 1: Multimodal AI

​Create next-generation AI experiences that combine text, images, video, audio, and visual generation technologies. Examples include text-to-image systems, image editing applications, image-to-video workflows, content creation studios, style transfer tools, digital media enhancement solutions, and creator-focused applications. Participants are encouraged to demonstrate efficient deployment and acceleration using Radeon GPUs.

Judging Criteria (100 points):
• Functional completeness, practical value, and innovation: 80 points
• Operational performance on AMD Radeon GPUs: 20 points.

:artist_palette: Track 2: Agentic AI

​Build intelligent AI agents capable of reasoning, planning, tool use, memory management, and task execution. Example applications include personal productivity assistants, enterprise copilots, workflow automation agents, local knowledge assistants using RAG, developer productivity agents, and multi-agent systems. Projects should demonstrate local inference on AMD Radeon GPUs and showcase practical problem-solving capabilities.

Judging Criteria (100 points):
• Functional completeness and application value: 60 points
• Scenario innovation and user experience: included within functional evaluation
• AMD Radeon GPU and ROCm optimization: 40 points, including local inference execution and inference-speed optimization.

:mechanical_arm: Track 3: Physical AI

​Develop robotics and embodied AI solutions powered by AMD Radeon GPUs. Projects may focus on robotic manipulation, humanoid robotics, quadruped locomotion, autonomous navigation, robotics simulation, autonomous driving simulation, multi-agent robotics, or embodied AI research. Participants may leverage simulation environments such as Genesis, MuJoCo, or other open-source frameworks and demonstrate how GPU acceleration supports training, simulation, and inference.

Judging Criteria (100 points):
• Robot capability performance: 30 points
• AMD Radeon GPU and ROCm adoption: 20 points
• Innovation and originality: 20 points
• Real-world application value: 20 points
• Contributions to upstream open-source projects: 10 points.

:trophy:Total Prize Pool: $30,000 USD

Each track offers:

:1st_place_medal: 1st Place: $5,000 USD

:2nd_place_medal: 2nd Place: $3,500 USD

:3rd_place_medal: 3rd Place: $1,500 USD

:laptop: Free AMD Radeon GPU Access

​Eligible participants may receive access to AMD Radeon GPU development resources during the competition period for model development, optimization, testing, benchmarking, and final project preparation.

:globe_showing_americas:Developer Community and Technical Support

​Participants are not expected to work alone. Dedicated community channels will be available throughout the hackathon.

Discord Channel: [ AMD Developer Community ]

WeChat Group:

User Uploaded Image
​For questions, please send us email via: ai_dev_contests@amd.com

:books: Rules and Conditions

​The attached Rules and Conditions document serves as the governing document for eligibility, judging methodology, submission requirements, code of conduct, intellectual property provisions, payments, and legal requirements. Participants are responsible for reviewing the complete document before submitting a project.

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/opportunity-for-ros-developers-amd-ai-devmaster-hackathon-physical-ai-track/56629

ROS Discourse General: ROS2-DDSConfig-Optimizer Support CycloneDDS Now!

Previously, we introduced a new tool — ROS2-DDSConfig-Optimizer, which is an AI-driven tool that automatically tunes DDS configuration for ROS2 applications.

Initially, it only supported Fast DDS, but now it supports Cyclone DDS as well!

Here we show a comparison between traditional manual tuning and using this tool:

More improvement showcase and details: GitHub - qualcomm-qrb-ros/ROS2-DDSConfig-Optimizer: An AI-driven tool that automatically tunes DDS configuration for ROS2 applications. · GitHub

Any PR and issue are welcomed!

5 posts - 2 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/ros2-ddsconfig-optimizer-support-cyclonedds-now/56609

ROS Discourse General: Ros2_info — a terminal workspace lens for ROS 2 (TUI + optional local AI)

Hi all,

Sharing a tool I’ve been building: ros2_info — a fastfetch-style ROS 2 workstation dashboard with a full-screen terminal UI. Written in Rust, so it runs headless over SSH and on Pi/Jetson-class hardware without any Electron/webview overhead.

Repo: GitHub - Gaurav-x111/ros2_info: fastfetch for ROS2 — distro info, live nodes, workspaces, web dashboard. One command. Everything you need. · GitHub

It’s not trying to replace your editor or your terminal — it’s trying to replace the five terminals you already have open during bring-up and debugging:

Honest pitch: you can do all of this with the raw CLI plus your editor of choice — I’m not claiming to be smarter than either. It’s just that during active bring-up and debugging, having graph state, build output, and a terminal in one screen is faster than context-switching across five.

Single static binary, MIT licensed, supports Humble/Jazzy/Iron/Rolling. Feedback and PRs welcome — happy to answer questions.

5 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/ros2-info-a-terminal-workspace-lens-for-ros-2-tui-optional-local-ai/56590

ROS Discourse General: LinkForge: Exploring an Intermediate Representation (IR) for Robot Descriptions

Hi everyone,

LinkForge recently passed 5,000 downloads on the Blender Extensions platform, which encouraged me to share a broader idea behind the project rather than just another release announcement.

Over the past year, I’ve been working on LinkForge, which started as a Blender extension for creating robot models. As the project evolved, I realized the more interesting problem wasn’t Blender itself, it was the way we author robot descriptions.

Today, formats like URDF and XACRO often become the project’s source of truth. While they work well as interchange formats, I’ve started to think they behave more like compiled artifacts than true source representations.

That led me to build LinkForge around a programmable Intermediate Representation (IR) that can:

The long-term goal isn’t to replace URDF or ROS. Quite the opposite, it’s to provide a tool-agnostic authoring and validation layer that sits before existing ROS workflows.

I’m interested in hearing from the ROS community:

I’d genuinely appreciate feedback, especially from people maintaining complex robots or working on large simulation pipelines.

GitHub: https://github.com/arounamounchili/linkforge

Documentation: https://linkforge.readthedocs.io

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/linkforge-exploring-an-intermediate-representation-ir-for-robot-descriptions/56551

ROS Discourse General: OpenAMRobot v0.0.1: An open-source ROS 2 Jazzy mobile robotics platform

Hi everyone!

We’re excited to announce the release of OpenAMRobot v0.0.1, an MIT-licensed, open-source mobile robotics platform built with ROS 2 Jazzy.

OpenAMRobot is intended for education, research, experimentation, and rapid prototyping. The current release includes:

We would greatly appreciate feedback from the ROS community, particularly regarding:

Contributions, issues, feature suggestions, and technical discussions are very welcome.

GitHub:

Thank you, and we look forward to hearing your feedback!

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/openamrobot-v0-0-1-an-open-source-ros-2-jazzy-mobile-robotics-platform/56544

ROS Discourse General: RoboShield: A Low-Latency Out-of-Band RTPS Watchdog in Rust

Hey everyone! :waving_hand:

I’ve been working on something I’m pretty excited about and wanted to share it with the community.

RoboShield is a real-time RTPS security watchdog I wrote in Rust. It basically sits on the wire (like on a NanoPi R2S with dual ethernet) and sniffs DDS/RTPS packets to catch stuff like rogue nodes joining your network, someone flooding /cmd_vel, or unauthorized publishers trying to hijack topics.

:backhand_index_pointing_right: GitHub: GitHub - Amin-Ahmed-G/robotshield · GitHub

What it does

Why not just use SROS2?

SROS2 is great, but setting up PKI certificates for every node on a fleet of robots is painful, and the crypto overhead can mess with tight real-time loops. RoboShield works out-of-band — plug it between your robot and the network, zero changes to your existing nodes.

Performance

I ran some benchmarks and got ~1.36 μs average processing time per packet (parse + policy check on an x86 dev machine) in release mode, which is way under what you’d need for even 1kHz control loops. NanoPi R2S hardware benchmarks are planned next.

I’m a 4th year Robotics & Automation student and this started as a security research project targeting ICRA/IEEE RAS. Would love to hear any feedback, especially from folks who’ve dealt with DDS security in production!

Feel free to connect with me on LinkedIn as well!

Cheers,
Amin :victory_hand:

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/roboshield-a-low-latency-out-of-band-rtps-watchdog-in-rust/56538

ROS Discourse General: Avoid dynamic loading of libraries (on Windows)

Hello.

I am currently working on a recipe to build a ros2-godot plugin ( GitHub - Kotakku/ros2-for-godot · GitHub ) on Windows. The goal is to have a ‘standalone’ plugin embedding all the needed dll (so without needing to install a ROS environment). Please note that I do not know a lot about ROS2…

I have an issue with dynamically loaded libraries, because the plugin directory in not in the PATH envvar, and so those dlls are not found.

The RMW implementation can be made static, thanks to CMake variables. Same with the rcl_logging implementation. Great !

But, there’s still the dlls loaded by rosidl_dynamic_typesupport. Is there any way to avoid dynamic loading of typesupport dlls (such as rmw_dds_common__rosidl_typesupport_fastrtps) ?

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/avoid-dynamic-loading-of-libraries-on-windows/56378

ROS Discourse General: Complete Guide: Teleoperating the AgileX NERO Arm with Pika Sense (Single & Dual Arm)

0. Preface

Pika Sense provides an intuitive teleoperation interface for robotic manipulation and data collection. Combined with Pika Station, Pika Gripper, and the AgileX NERO robotic arm, it enables low-latency end-effector teleoperation for both single-arm and dual-arm systems.

This tutorial walks through the complete setup process, and serves as a reference for developers who want to integrate Pika Sense with their own robotic arms.

:warning: warning: Pika Sense currently supports:

  • AgileX PiPER
  • AgileX PiPER-X
  • AgileX NERO
  • xArm Lite 6

Support for additional robotic arms can be added by implementing the corresponding teleoperation interface. We welcome community contributions. If you successfully adapt another robotic arm, feel free to submit a Pull Request to our GitHub repository.

1.Hardware Preparation

This section describes the hardware setup required for teleoperating a single AgileX NERO robotic arm with its default NERO gripper.

:warning: Important Notes

  • When assembling the robotic arm, align the red alignment marks on the arm connectors with the corresponding red marks on the cables.
  • The textured sleeve on the aviation connector is the locking mechanism. During installation, align the red mark downward with the locating notch and push the connector straight in. To disconnect it, press the textured sleeve and then pull the connector out.
  • If you are using a third-party robotic arm, you can follow the same hardware connection procedure described for the NERO arm.
  • For third-party robotic arms, you must additionally verify that the power supply, communication interfaces, end-effector interfaces, and control protocols meet the requirements for teleoperation.

Step 1 – Connect the NERO Robotic Arm

Connect the NERO robotic arm as shown in the wiring diagram below. For detailed wiring instructions, please refer to the NERO User Manual.

When powering on the robot for the first time, complete the following steps in order (A–G):

  1. Connect connector A to the J2 port.
  2. Connect the CAN cable of aviation connector B.
  3. Connect the XT30 connector C.
  4. Align the red dots on aviation connector D, then plug it in with the red dot facing downward.
  5. Connect the plug of power adapter E.
  6. Verify that the AC power cord of power adapter E is properly connected, then power on the system. Wait until the indicator LED on the control panel starts flashing green.
  7. Connect the USB cable to your computer to begin using the device.

Step 2 - Connect Pika Sense

Next, connect the Pika Sense device.

For detailed information about the Pika Sense interfaces and wiring, refer to Section 1.1 of the Pika Positioner & Sense User Guide (Positioning and Calibration).

2.SoftWare Preparation

Step 1.Install System Dependencies

Before running the teleoperation software, install the required system packages:

sudo apt update && sudo apt install ethtool
sudo apt update && sudo apt install can-utils

Step 2.Install Conda

Install either Miniconda or Anaconda before proceeding.

If Conda is already installed, you can skip this step.

Step 3.Create the Pika Teleoperation Python Environment

Create a dedicated Conda environment for Pika teleoperation:

conda create -n pika python=3.10
conda activate pika
conda install pinocchio==3.2.0 casadi==3.6.7 -c conda-forge
pip install lark numpy==2.0.2 empy==3.3.4 meshcat pyyaml piper-sdk opencv-python ur-rtde netifaces catkin_pkg

3.Starting Teleoperation

3.1 Single-Arm Teleoperation

Step 1 – Activate the CAN Interface

Connect the robotic arm’s CAN cable to your computer, then activate the CAN interface by running:

cd ~/pika_ros/src/PikaAnyArm/agx_arm/agx_arm_ros/scripts

bash can_activate.sh

Step 2 – Calibrate Pika Sense

Before starting teleoperation, calibrate the Pika Sense device.

For detailed calibration instructions, please refer to Sections 1.2 and 1.3 of the Pika Positioner & Sense User Guide (Positioning and Calibration).

Step 3 – Launch the Teleoperation Program

Choose the appropriate launch procedure according to your hardware configuration.

Option A – Using Pika Sense without the Pika Gripper

If you are not using a Pika Gripper, launch the following programs.

Terminal 1

source ~/pika_ros/install/setup.bash

cd ~/pika_ros/scripts

bash start_single_sensor_whit_teleop.bash

Terminal 2

source ~/pika_ros/install/setup.bash

conda activate pika

# Launch the appropriate teleoperation node for your robot:

# piper
ros2 launch pika_remote_agx_arm teleop_single_piper.launch.py
# piper_x
ros2 launch pika_remote_agx_arm teleop_single_piper_x.launch.py
# nero
ros2 launch pika_remote_agx_arm teleop_single_nero.launch.py

After both terminals are running, double click the Pika Sense trigger to enable teleoperation.

:warning: Important Notes Ensure that the orientation of the Pika Sense matches the orientation of the robot end-effector before enabling teleoperation.

Option B - Using Pika Sense with Pika Gripper

If a Pika Gripper is mounted on the robotic arm and controlled by Pika Sense, first bind one Pika Sense with one Pika Gripper by following the instructions in the Pika Positioner & Sense User Guide (Positioning and Calibration).

Terminal 1

conda deactivate

source ~/pika_ros/install/setup.bash

cd ~/pika_ros/scripts

bash start_sensor_gripper.bash

Terminal 2

source ~/pika_ros/install/setup.bash
conda activate pika

# Launch the appropriate teleoperation node for your robot:
# piper
ros2 launch pika_remote_agx_arm teleop_single_piper.launch.py
# piper_x
ros2 launch pika_remote_agx_arm teleop_single_piper_x.launch.py
# nero
ros2 launch pika_remote_agx_arm teleop_single_nero.launch.py

Once the system is running, double click the Pika Sense trigger to start teleoperation.

:warning: Important Notes Ensure that the orientation of the Pika Sense matches the orientation of the robot end-effector before enabling teleoperation.

3.2 Dual-Arm Teleoperation

Step 1 – Configure the CAN Interfaces

Before starting dual-arm teleoperation, both robotic arms must be assigned to the correct CAN interfaces.

First, connect the left robotic arm to your computer via the CAN adapter, then run:

cd ~/pika_ros/src/PikaAnyArm/agx_arm/agx_arm_ros/scripts
bash find_all_can_port.sh

The terminal will display the USB port corresponding to the left arm.

Next, connect the right robotic arm and run the script again:

bash find_all_can_port.sh

The terminal will display the USB port corresponding to the right arm.

Open the can_config.sh file and copy the two detected USB port IDs into Lines 111 and 112, respectively.

For example, when using PiPER, the configuration should look like:

if [ "$EXPECTED_CAN_COUNT" -ne 1 ]; then
    declare -A USB_PORTS
    USB_PORTS["1-8.1:1.0"]="can_left:1000000"   # Left arm
    USB_PORTS["1-8.2:1.0"]="can_right:1000000"  # Right arm
fi

After saving the configuration, activate both CAN interfaces:

cd ~/pika_ros/src/PikaAnyArm/agx_arm/agx_arm_ros/scripts

bash can_config.sh

Step 2 – Calibrate Pika Sense and Bind Pika Devices

Calibrate the Pika devices before starting teleoperation. For detailed instructions, refer to the Pika User Manual, including the the Pika Positioner & Sense User Guide (Positioning and Calibration) section for base station deployment and Pika Sense calibration, followed by the Pika Device Binding section to bind the left and right Pika Sense devices.

Step 3 – Launch the Dual-Arm Teleoperation Program

Choose the launch procedure according to your hardware configuration.

Option A – Using Pika Sense without the Pika Gripper

If you are not using Pika Grippers, or you are using the robot’s original grippers, first bind two Pika Sense devices following the Pika Device Binding Guide.

Terminal 1

conda deactivate
source ~/pika_ros/install/setup.bash
cd ~/pika_ros/scripts && bash start_multi_sensor_whit_teleop.bash sensor

Terminal 2

source ~/pika_ros/install/setup.bash
conda activate pika

# Launch the appropriate teleoperation node for your robot:
# piper
ros2 launch pika_remote_agx_arm teleop_double_piper.launch.py
# piper_x
ros2 launch pika_remote_agx_arm teleop_double_piper_x.launch.py
# nero
ros2 launch pika_remote_agx_arm teleop_double_nero.launch.py

Finally, double click the right Pika Sense trigger to start dual-arm teleoperation.

Important Note Ensure that the orientation of the Pika Sense matches the orientation of the robot end-effector before enabling teleoperation.

Option B – Using Pika Grippers

If Pika Grippers are installed on both robotic arms, first bind:

using the Pika Device Binding section section 2.6, after that:

Terminal 1 —— Start Pika Sense

conda deactivate

source ~/pika_ros/install/setup.bash

cd ~/pika_ros/scripts

bash start_multi_sensor_whit_teleop.bash

Terminal 2 —— Start Pika Grippers

conda deactivate
source ~/pika_ros/install/setup.bash
cd ~/pika_ros/scripts && bash start_multi_gripper.bash #pika gripper

Terminal 3 —— Launch the Robot

source ~/pika_ros/install/setup.bash
conda activate pika

# Launch the appropriate teleoperation node for your robot:
# piper
ros2 launch pika_remote_agx_arm teleop_double_piper.launch.py
# piper_x
ros2 launch pika_remote_agx_arm teleop_double_piper_x.launch.py
# nero
ros2 launch pika_remote_agx_arm teleop_double_nero.launch.py

Finally, double click the right Pika Sense trigger to start teleoperation.

Important Note Ensure that the orientation of the Pika Sense matches the orientation of the robot end-effector before enabling teleoperation.

4.Configuration Files

The configuration files for each supported robot are organized as follows:

config/
├── piper_rand_params.yaml
│   └── gripper_xyzrpy
│       Offset from Joint 6 to the gripper frame (m, rad)
│
├── xarm_params.yaml
│   ├── eff_position
│   │   Initial TCP pose (mm, rad)
│   └── pika_to_arm
│       Pika coordinate system → Robotic arm end-effector coordinate system (m, rad)
│
└── ur12e_params.yaml
    ├── pika_to_arm
    │   Pika coordinate system → Robotic arm end-effector coordinate system (m, rad)
    └── robot_ip
        IP address of UR arm



5. Coordinate Frames and ROS Topics

To help developers integrate Pika Sense with their own robotic arms, this section describes:

5.1 Pika Coordinate Frame

The Pika coordinate frame is defined at the center of the Pika gripper and is published through the /pika_pose topic.

When teleoperation is activated by double-clicking the Pika Sense gripper, the current pose of the Pika Sense is recorded as the reference (zero) pose. All subsequent position and orientation commands are expressed relative to this reference frame.

The coordinate axes of the /pika_pose frame are defined as follows:

5.2 ROS Topics

For single-arm teleoperation, Pika Sense publishes the robot target pose to: /pika_pose For dual-arm teleoperation, the left and right Pika Sense devices publish to separate topics: /pika_pose_l /pika_pose_r All of these topics use the standard ROS message type: geometry_msgs/PoseStamped Since most industrial robot controllers provide Cartesian end-effector control interfaces based on geometry_msgs/PoseStamped, the published pose messages can typically be used directly or converted into robot-specific motion commands with minimal adaptation.

For a complete implementation example, see:

FAQ

Q1 Which robotic arms are currently supported by Pika Sense?

Pika Sense currently supports teleoperation for the following robotic arms:

Support for additional third-party robotic arms can be implemented by developers or users based on the robot’s control interface.

Q2. Can I use Pika Sense with a third-party robotic arm?

Yes.

To integrate a third-party robotic arm, the robot should support Cartesian end-effector pose control, or provide an interface that can convert the geometry_msgs/PoseStamped messages published by Pika Sense into robot-specific motion commands.

Q3.Why do I need to double-click the Pika Sense gripper before starting teleoperation?

Double-clicking initializes the teleoperation reference pose.

The current pose of the Pika Sense is recorded as the zero (reference) pose, and all subsequent position and orientation commands are calculated relative to this reference frame.

Q4.Is there anything I should pay attention to when double-clicking the Pika Sense gripper?

Yes.

Before double-clicking, ensure that the orientation of the Pika Sense matches the orientation of the robot end-effector.

Doing so minimizes the initial pose offset and helps ensure that the robot moves intuitively in the same direction as the Pika Sense.

Q5. Which parameters should I pay attention to when integrating a third-party robotic arm?

The most important parameters are:

In most cases, the pika_to_arm parameter in the configuration file defines the transformation between the Pika coordinate frame and the robot TCP, making it one of the key parameters to adjust when integrating a new robotic arm.

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/complete-guide-teleoperating-the-agilex-nero-arm-with-pika-sense-single-dual-arm/56365

ROS Discourse General: Update on BAGEL (BAG ExpLoration): What's New

Hi again,

Following up on my earlier post about BAGEL, a browser-based ROS bag viewer/editor with no native dependencies and no ROS install. Since v1.0 it’s grown from a viewer into something closer to a full robotics debugging tool. Quick links for anyone new here:

Link: https://bagel-ros2.vercel.app

Source: GitHub - Hussain004/BAGEL: ROS Bag Visualizer · GitHub

Full changelog with design rationale: BAGEL/FEATURES.md at main · Hussain004/BAGEL · GitHub

What’s new since v1.0:

Bag editing (v1.1, v1.2)

URDF robot models and richer 3D (v1.3)

Analysis and shareability (v1.4)

Live robot data (v1.5)

Format breadth and RViz parity (v1.6) - Standalone .pcd / .ply viewer, no bag wrapping needed.

What’s next?

v1.7 is up next: a 3D measurement tool (click two points, get a distance), nav_msgs/Path rendering, more colormaps, image-on-point-cloud projection using camera intrinsics, then bag merge/split, then QoS inspection (surfacing reliability/durability/history per topic).

5 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/update-on-bagel-bag-exploration-whats-new/56235

ROS Discourse General: Last Day for ROSCon Global Early Bird Tickets is Sunday, July 12th

Hi Everyone,

Quick reminder that the last day to purchase early bird tickets for ROSCon Global 2026 is this coming Sunday Sun, Jul 12, 2026 7:00 AM UTC. Our early bird tickets are $150 off our regular ticket price and make your ROSCon workshop effectively free!

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/last-day-for-roscon-global-early-bird-tickets-is-sunday-july-12th/56226

ROS Discourse General: Adaptation needs in robotic systems

Hi robotic developers,

Are you working with Behavior Trees, robotics, ROS/ROS 2, autonomous systems, or robot decision-making?

We are conducting a research study on adaptation needs in robotic systems that use Behavior Trees. If you work with robotic systems, we’d greatly appreciate your input.

We’re conducting a short survey to answer two key questions:

Survey: Adaptation Needs in Robotic Systems: Behavior Trees and Beyond (Questionnaire)

It takes about 20 minutes to complete, and as a bonus, you’ll also get an overview of adaptation needs in robotics, the current limitations of Behavior Trees, and the research efforts to address them.

4 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/adaptation-needs-in-robotic-systems/56200

ROS Discourse General: Announcing ros-env: Access ROS 2 messages from Rust with just Cargo

Hey all! I’m one of the maintainers of ros2_rust, and we recently released a new crate, ros-env, that aims to unify ROS 2 message consumption in Rust.

If you’re already generating Rust code for your message interfaces with rosidl_generator_rs, you can add ros-env as a regular Cargo dependency and access the message types from any packages in your sourced ROS 2 environment.

// Assuming the Rust crate for `shape_msgs` is in `AMENT_PREFIX_PATH`
use ros_env::shape_msgs::msg::Plane;

You don’t need Colcon, and you don’t need to use ros2_rust. The goal is to provide a common way for Rust ROS 2 clients to consume and share message definitions.

Happy to answer any questions!

1 post - 1 participant

Read full topic

[WWW] https://discourse.openrobotics.org/t/announcing-ros-env-access-ros-2-messages-from-rust-with-just-cargo/56141

ROS Discourse General: Real-time robot dashboards in React without a separate visualization server

If you’ve built an operator UI or ground station in React, you’ve probably hit the same wall I did: the moment you need real-time telemetry visualization, your options are to run Foxglove or Grafana as separate infrastructure and iframe them in, or hand-roll canvas components from scratch. Neither is great when what you actually want is telemetry views that live natively inside the app you’re already building.

So I built Altara: a set of MIT-licensed React components for real-time telemetry, with a one-line rosbridge adapter so you can pipe a sensor_msgs topic straight into a chart, gauge, or attitude indicator.

A minimal example:

tsx

import { AltaraProvider, TimeSeries } from '@altara/core'
import { createRosbridgeAdapter } from '@altara/ros'

const imu = createRosbridgeAdapter({
  url: 'ws://localhost:9090',
  topic: '/imu/data',
  messageType: 'sensor_msgs/Imu',
})

<AltaraProvider theme="dark">
  <TimeSeries dataSource={imu} height={240} />
</AltaraProvider>

It’s a monorepo of six packages: @altara/core (the base components), @altara/ros (rosbridge adapter with typed factories for common sensor_msgs types), @altara/mqtt, and three domain packages, @altara/aerospace (PFD, HSI, TCAS and other flight instruments), @altara/av (LiDAR point cloud via Three.js, occupancy grid, SLAM map), and @altara/industrial (SCADA-style panels, waterfall spectrogram, alarm annunciator). 41 components total, every one runs in a mockMode so you can build and demo without hardware.

Everything renders to canvas via requestAnimationFrame with the hot path kept out of React, so high-frequency streams don’t cause re-render jank.

It’s early and I’m the only maintainer, so I’m being upfront about that. The architecture is deliberately simple, plain canvas and React, no exotic dependencies, so it’s straightforward to fork and self-maintain if that matters to you.

Website: https://www.usealtara.dev/

Repo: GitHub - JayaSaiKishanChapparam/altara: React components for real-time telemetry dashboards — robotics, aerospace, autonomous vehicles, industrial IoT. PFD, HSI, time-series, gauges, GPS maps, and ROS2/MQTT adapters at 60fps. · GitHub
Live Storybook (all 41 components): @storybook/core - Storybook

Demo: Altara Demo

What are you currently using for in-app telemetry visualization, and where does it fall short? Trying to understand what’s actually missing for people building custom operator interfaces.

4 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/real-time-robot-dashboards-in-react-without-a-separate-visualization-server/56132

ROS Discourse General: Plotjuggler 4 (beta!) is here. Unleashing multi-modal data

After few months of hard work, PlotJuggler 4 is finally ready for an early preview!

Expect bugs and missing features, but also ton of awesomeness unleashed.

Everything was brutally optimized. Playing a compressed MCAP, reading lazily the file from disk, and rendering 3 videos and the two 3D scenes above, for a total of 6 pointclouds, uses only 50% of a single CPU core.

Features: too many to list

On the “core” side

And (this is big) integration with Mosaico to access directly data stored in the cloud.

5 posts - 3 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/plotjuggler-4-beta-is-here-unleashing-multi-modal-data/56047

ROS Discourse General: Mastering NERO | How to Configure CAN Leader–Follower Linkage for Dual 7-DoF Robotic Arms

Dual-arm robots are becoming increasingly important in embodied AI, teleoperation, imitation learning, and collaborative manipulation research.

This tutorial demonstrates how to configure two AgileX NERO 7-DOF robotic arms in a leader-follower setup using CAN bus communication. Once configured, the follower arm will automatically replicate the motion of the leader arm in real time.

What You’ll Build

By the end of this guide, you’ll be able to:

:white_check_mark: Synchronize two NERO robot arms

:white_check_mark: Enable real-time leader-follower motion following

:white_check_mark: Configure CAN-based dual-arm communication

:white_check_mark: Validate coordinated dual-arm operation

:white_check_mark: Prepare a platform for teleoperation and imitation learning experiments

Hardware Requirements

Component Quantity
NERO 7-DOF Robotic Arm (Leader) 1
NERO 7-DOF Robotic Arm (Follower) 1
CAN Communication Cable 1
NERO Control Software 1

Step 1: Connect the CAN Bus

The first step is connecting the CAN communication lines between the two robot arms.

Wiring Rules

Wire Color Signal
Yellow CAN H
Blue CAN L

Connect:

Important

Before powering on:

Incorrect wiring may prevent communication between the two robotic arms.

Step 2: Configure Leader and Follower Modes

Once the CAN bus connection is complete, assign the role of each robot arm.

Leader Arm

The leader arm acts as the command source.

Responsibilities:

Follower Arm

The follower arm executes the motion commanded by the leader arm.

Responsibilities:

After configuration, save all parameters before proceeding.

Safety Warning Before Activation

:warning: Read This Before Enabling Leader-Follower Mode

Before assigning leader-follower roles:

  1. Move both robotic arms close to their home positions.
  2. Ensure the workspace is clear.
  3. Remove any obstacles around the robot.

When synchronization is activated, the follower arm immediately attempts to match the leader’s current pose.

If the initial poses differ significantly, the follower arm may move rapidly, potentially causing:

For safe operation, always align both robots before enabling synchronization.

Step 3: Validate Leader-Follower Synchronization

After configuration, verify that communication and synchronization are functioning correctly.

Validation Procedure

  1. Check CAN Connections

Verify:

  1. Verify Control Modes

Confirm:

  1. Move the Leader Arm

Manually operate the leader arm.

  1. Observe the Leader Arm

The Leader arm should:

Successful tracking indicates that Leader-Follower control is operating correctly.

Software Version Notes

Version 1.1 API Limitation

For NERO software version 1.1:

When Leader-Follower mode is enabled:

Developers building custom applications should account for this behavior when logging data or implementing monitoring systems.

Conclusion

Using a simple CAN bus connection, two NERO 7-DOF robotic arms can be configured into a synchronized leader-follower system capable of real-time trajectory replication and coordinated motion control.

This setup is particularly useful for:

By following the wiring, configuration, and safety recommendations in this guide, developers can quickly deploy a reliable dual-arm robotic platform for experimentation and application development.

FAQ

臂gif

Q1:Why does the follower arm move suddenly when leader-follower mode is enabled?

When leader-follower mode is activated, the follower arm immediately attempts to match the current pose of the leader arm.

If the two arms start from significantly different positions, the follower arm may perform a rapid corrective movement.

Q2:The follower arm is not following the leader arm. What should I check first?

Verify the following items:

In most cases, incorrect CAN wiring or unsaved configuration parameters are the root causes.

Q3:Why does the follower arm stop responding after working correctly for a period of time?

This behavior is typically caused by:

Check cable integrity, power stability, and communication status before restarting the system.

Q4:What should I do if the follower arm’s motion does not exactly match the leader arm?

Check the following:

Small tracking errors can often be reduced by recalibrating both robot arms and ensuring they start from similar initial poses.

:speech_balloon: Have Question?

If you encounter any issues with environment installation, parameter configuration, or RL training, feel free to leave your questions for further discussion.

3 posts - 2 participants

Read full topic

[WWW] https://discourse.openrobotics.org/t/mastering-nero-how-to-configure-can-leader-follower-linkage-for-dual-7-dof-robotic-arms/56028


2026-07-25 12:18