yahboom
HomeTutorialsProduct
Solution
Blog
Online Store
About Us
EN/中文
Store
ROSMASTER A1 PRO📖
00.Configuration and Operation Guide
  • 0. Unboxing and Review
  • 1.Assembly Videos
  • 2.User Manual
  • 3.Enter Docker (For Raspberry Pi)
  • 4.A1Pro Front Wheel Servo Calibration
  • 5.USB Camera Calibration
  • 6.Depth Camera Calibration
  • 7.FAQ
  • 8.Desktop Configuration Center and Remote Control Guide
01.Chassis Control Course
  • 1.Robot Information Publishing
  • 2.Robot Handle Control
  • 3.Robot Keyboard Control
  • 4.Linear Velocity Calibration
  • 5.Angular Velocity Calibration
  • 6.Robot URDF Model
  • 7.Robot EKF State Estimation
02.Lidar Course
  • 1.Lidar Introduction and Use
  • 2.Lidar Obstacle Avoidance
  • 3.Lidar Following
  • 4.Lidar Patrol
  • 5.GMapping-SLAM Mapping
  • 6.Cartographer-SLAM Mapping
  • 7.Slam-Toolbox Mapping
  • 8.Lifelong Mode Mapping
  • 9.Navigation2 Single Point Navigation
  • 10.Navigation2 Multi Point Navigation
  • 11.Cartographer Relocalization Navigation
  • 12.Slam-Toolbox Localization Navigation
  • 13.Synchronous Mapping And Navigation
  • 14.Aruco Visual Relocalization Navigation
  • 15.Mobile App Mapping And Navigation
  • 16.AprilTag Transport
  • 17.Color Block Transport
03.USB Camera-Depth Camera Course
  • 1.USB Camera Introduction
  • 2.USB Camera Intrinsic Calibration
  • 3.Nuwa-HP60C Camera Introduction (Depth Camera Only)
  • 4.Depth Camera Distance Measurement (Depth Camera Only)
  • 5.Depth Pseudo Color Image (Depth Camera Only)
  • 6.Block Volume Calculation (Depth Camera Only)
  • 7.Edge Detection (Depth Camera Only)
  • 8.RTAB-Map SLAM Mapping (Depth Camera Only)
  • 9.RTAB-Map Navigation (Depth Camera Only)
04.Robotic Arm and 3D Space Gripping Course
  • 0.Robotic Arm Basic Usage
  • 1.Robotic Arm Kinematics
  • 2.Robotic Arm Chassis Coordination Control
  • 3.AprilTag ID Sorting
  • 4.AprilTag Height Anomaly Sorting
  • 5.AprilTag Tracking and Grasping
  • 6.Color Block Sorting
  • 7.Color Block Height Anomaly Sorting
  • 8.Color Block Tracking and Grasping
  • 9.Wood Block Shape Sorting
  • 10.KCF Tracking and Grasping Objects
  • 11.Mediapipe Gesture ID Sorting AprilTag
  • 12.Mediapipe Gesture Height Sorting AprilTag
  • 13.Desktop Tracking and Grasping AprilTag
  • 14.3D Spatial Tracking AprilTag
  • 15.Line Following Obstacle Clearing
  • 16.Transformer Model Tracking Algorithm
05.Road Network Planning and Navigation
  • 1.Introduction To Road Network Planning
  • 2.Road Network Annotation
  • 3.Planning And Navigation Between Waypoints
  • 4.Road Network Navigation In Any Pose
  • 5.Path Re-planning
06.OpenClaw Basic Course
  • 1.Introduction to OpenClaw
  • 2.OpenClaw Core Concepts
  • 3.OpenClaw API-KEY Configuration
  • 4.OpenClaw Switch Models
  • 5.OpenClaw System Prompt Words
  • 6.OpenClaw Common CLI Commands
07.OpenClaw Interaction Method
  • 1.OpenClaw Webchat Interaction
  • 2.OpenClaw Tui Interaction
  • 3.OpenClaw Voice Dialogue Interaction
  • 4.OpenClaw WhatsApp Interaction
08.OpenClaw Development
  • 1.OpenClaw Connecting to Robot MCP Service
  • 2.Robot CLI Command Tool
  • 3.robot-control plugin tool
  • 4.reply-bridge plugin tool
  • 5.OpenClaw Multimodal Vision
  • 6.OpenClaw Chassis Control
  • 7.OpenClaw Robotic Arm Control
  • 8.OpenClaw Skills Development
  • 9.OpenClaw Scheduled Tasks
  • 10.OpenClaw Multi-Agent Intelligent Agent
  • 11.OpenClaw Active Interaction
  • 12.OpenClaw Vector Memory
09.OpenClaw Embodied Intelligent Application
  • 1.OpenClaw Target Tracking
  • 2.OpenClaw Arm Tracking And Grasping
  • 3.OpenClaw Arm Fixed-point Placement
  • 4.OpenClaw Waste Sorting
  • 5.OpenClaw SLAM Mapping And Navigation
  • 6.OpenClaw Navigation Transport
  • 7.OpenClaw AprilTag Grasping
  • 8.OpenClaw Color Line Patrol
  • 9.OpenClaw Visual Distance Measurement
10.OpenClaw Scenario Sandbox
  • 1.Map Description and Prop Placement
  • 2.Build Sand Table Map
  • 3.Visual Relocation Markers
  • 4.Map Mapping Markers
  • 5.OpenClaw Scenario Sandbox Comprehensive Case
11.AI Model Basics
  • 1.AI Large Model Types and Principles
  • 2.RAG Retrieval Enhancement and Model Training Samples
  • 3.Embodied Intelligent Robot System Architecture
  • 4.Embodied Intelligent Functions Core Source Code
12.AI Model Development
  • 1.Register a Model Service Provider Aaccount
  • 2.Configuring API-KEY
  • 3.Introduction to Dify
  • 4.Basic Dify Features
  • 5.AI Large Model Development - chatbot
  • 6.Deploy the RAG Knowledge Base
  • 7.RAG Knowledge Base + chatbot
  • 8.AI Agent Workflow
  • 9.Custom Wake-up Response
13.AI Model - Text Version
  • 1.Semantic Understand and Command Follow
  • 2.Multimodal Visual Understand
  • 3.Multimodal Visual Understand + Robotic Arm Gripping
  • 4.Multimodal Visual Understand+SLAM Navigation
  • 5.Robotic Arm Gripping+Multimodal Visual Understand+SLAM Navigation
  • 6.Intention Estimation
14.AI Model - Voice Version
  • 1.Semantic Understand and Command Follow
  • 2.Multimodal Visual Understand
  • 3. Multimodal Large Model+Robotic Arm Gripping
  • 4.Multimodal Visual Understand+SLAM Navigation
  • 5.Robotic Arm Gripping+Multimodal Visual Understand+SLAM Navigation
  • 6.Intention Estimation
15.Mediapipe Visual Course
  • 1.Hand Detection
  • 2.Posture Detection
  • 3.Overall Detection
  • 4.Facial Landmark Detection
  • 5.Face Detection
  • 6.Face Special Effects
  • 7.3D Object Recognition
  • 8.Brush
  • 9.Finger Control
  • 10.Palm Target Positioning
  • 11.Fingertip Trajectory Recognition
  • 12.Fingertip Gesture Control Cobotic Arm
  • 13.Gesture Grabbing and Releasing Objects
  • 14.Finger Control Robotic Arm
  • 15.Medipipe Gesture Control Robotic arm Cction Group
16.MoveIt2 Simulation Course
  • 1.MovelT2 Configuration
  • 2.MovelT2 Simulation-Reality Linkage
  • 3.Random Movement
  • 4.Forward Kinematics Design
  • 5.Inverse Kinematics Design
  • 6.Cartesian Path
  • 7.Scene Design
  • 8.Trajectory Planning
  • 9.Collision Detection
  • 10.3D Perception Obstacle‑Avoidance
17.Multi-vehicle Course
  • 1.Multi-vehicle Control
  • 2.Multi-vehicle Navigation
  • 3.Multi-vehicle Formation
18.YOLO26 Development
  • 1.CLI Use
  • 2.Object Detection
  • 3.Instance Segmentation
  • 4.Pose Estimation
  • 5.Image Classification
  • 6.Oriented Object Detection
  • 7.YOLOv26 + DeepSORT Tracking
  • 8.Monocular Depth Estimation
19.Control Board STM32 Driver Course
  • 0.Notes (Must Read)
  • 1.About Expansion Board
  • 2.STM32 Development Environment
  • 3.Button Control
  • 4.FreeRTOS Application
  • 5.Serial Communication
  • 6.SBUS Model Aircraft Remote Control
  • 7.CAN Bus Communication
  • 8.RGB Colorful Light Bar
  • 9.Timer Interrupt to Control PWM Servo
  • 10.Control Serial Port Servos
  • 11.Nine-axis Attitude Sensor to Obtain Data
  • 12.Control Motor
  • 13.Timer Captures the Encoder Data
  • 14.1 Kinematic Analysis of Mecanum Wheel
  • 14.2 Kinematic Analysis of Ackerman
  • 14.3 Kinematic Analysis of 4WD
  • 15.PID Control Robot Movement
20.Docker Course
  • 1.Docker Introduction and Installation
  • 2.Docker Basic Commands
  • 3.Docker Submission and Multi-Terminal Access
  • 4. Docker Startup Script
  • 5.Docker-Vscode Environment Construction
21.Image Processing Basics Course
  • 1. Introduction to Open Source CV
  • 2. Image reading and display
  • 3. Image writing
  • 4. Image quality
  • 5. Pixel Operation
  • 6. Image zoom
  • 7. Image cutting
  • 8. Image translation
  • 9. Image Mirroring
  • 10. Affine Transformation
  • 11. Image Rotation
  • 12. Perspective Transformation
  • 13. Grayscale processing
  • 14. Image Binarization
  • 15. Edge Detection
  • 16. Line drawing
  • 17. Rectangle and circle drawing
  • 18. Drawing text and pictures
22.Linux System Course
  • 1.Introduction to Linux system
  • 2.Ubuntu file system
  • 3.Ubuntu common commands
  • 4.Ubuntu common editors
  • 5.Ubuntu software operation commands
  • 6.Virtual machine installation
  • 7.SSH remote control
  • 8.VNC remote control
  • 9.Transfer files remotely
  • 10.Driver library and communication
  • 11.Static IP and hotspot mode
  • 12.Bind device ID
  • 13.Capacity expansion and resource allocation
  • 14.Update system software sources
  • 15.Set root user password
  • 16.sudo free password
  • 17.Connect to WiFi network
  • 18.View system version
  • 19.Customized service management
  • 20.Back up system image
23.ROS2 Basic Course
  • 1.Introduction to ROS2
  • 2.ROS2 install Humble
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
24.Main Control Course
Jetson Orin Nano_NX
  • 1.Jetson Orin board introduction
  • 2.Restore the factory image system
  • 3.Backup SSD system
  • 4.SSD expansion
  • 5.Network configuration
  • 6.SSH remote login
  • 7.VNC remote control
  • 8.Remote file transfer
  • 9.Jtop tool
  • 10.Exchange space expansion
Raspberry Pi
  • 1. Introduction to Raspberry PI 5
  • 2. Raspberry PI system installation and backup
  • 3. Powering the Raspberry PI 5
  • 4. Startup of Raspberry PI 5
  • 5. Update and upgrade operating system
  • 6. Introduction to raspi-config tool
  • 7. config.txt file description
  • 8. Network Configuration
  • 9. remote access
  • 10. Transfer files remotely
  • 11. Set display resolution and rotation
  • 12. Set screen to sleep
  • 13. Play audio and video
  • 14. Using USB camera
  • 15. Using MIPI camera
  • 16. Get real-time temperature of Raspberry Pi
RDKX5
  • 1.Introduction to RDK X5 board
  • 2.Write system file
  • 3.Hardware interface description
  • 4.Install case and other accessories
  • 5.Network configuration
  • 6.Remote login
  • 7.Update system
  • 8.srpi-config user guide
  • 9.config. txt configuration file
  • 10.Self-startup setting
  • 11.RDK exclusive command usage
  • 12.Linux command usage
  • 13.GPIO readwrite operation
  • 14.Image classification algorithm
  • 15.Use USB camera
  • 16.Use MIPI camera
  • 17.Binocular camera depth algorithm
  • 18. Controlling RGB Cooling Fans
Download
  • SystemFile
  • Code
  • 3D_Model_File
  • Software_Tools
  • Hardware_Info
  • Introduction_Manual
  • Script_File
  • Dify AI Agent
Download ZIP

Welcome to ROSMASTER A1 PRO repository

1.Multi-vehicle Control

Multi-Vehicle Chassis Control

Preface: Multi-vehicle cooperative control is built on the distributed network architecture of ROS 2. Within the same local area network and under the same ROS_DOMAIN_ID, the primary vehicle, follower vehicles, and the control terminal (virtual machine/PC) can achieve shared control or grouped control through topic remapping or independent namespaces. This section uses two vehicles (robot1 and robot2) as an example to introduce two modes: shared keyboard control and independent gamepad distribution control.


1. Program Description

This feature enables simultaneous control of multiple vehicle chassis and robotic arms via keyboard or gamepad.

1.1 Functional Requirements

Using two vehicles as an example, each vehicle must satisfy the following requirements simultaneously:

  1. Same Local Area Network: The two vehicles and the control terminal (virtual machine/PC) must be connected to the same 2.4G/5G Wi-Fi router, ensuring their IP addresses are on the same subnet and can ping each other;

  2. Same ROS Domain ID: The ROS_DOMAIN_ID of both vehicles must be configured identically (the system default is usually 61):

    • Raspberry Pi 5: Enter the Docker container and modify the ROS_DOMAIN_ID in /root/.bashrc, then run source ~/.bashrc to refresh the changes;
    • Orin / RDK X5: Modify the ROS_DOMAIN_ID in ~/.bashrc directly in the terminal, then run source ~/.bashrc to refresh the changes;

2. Control Modes and Startup Steps

The system provides two control modes:

  • Shared Keyboard Mode: At the underlying layer, both vehicles remap their respective velocity topics to the global topic /cmd_vel, so that publishing velocity from a single keyboard makes all vehicles move synchronously;
  • Gamepad Distribution Mode: Both vehicles retain their own independent namespaces (/robot1/cmd_vel, /robot2/cmd_vel), while the gamepad control node distributes commands to the topics of both vehicles simultaneously.

2.1 Mode 1: Shared Keyboard Control Mode

Step 1: Launch the Shared Control Chassis Driver on Both Vehicles

Run the following command in the terminal of Vehicle 1 (robot1):

ros2 launch yahboomcar_multi A1p_bringup_multi_ctrl.launch.xml robot_name:=robot1

The successful startup screen is shown below:

image-20260904203135180

Run the following command in the terminal of robot2:

xxxxxxxxxx
ros2 launch yahboomcar_multi A1p_bringup_multi_ctrl.launch.xml robot_name:=robot2

The successful startup screen is shown below:

image-20260904203404794

[!NOTE] The robot_name parameter represents the unique namespace identifier of the current vehicle and defaults to robot1; the second vehicle is designated as robot2.

Step 2: Launch the Keyboard Control Node

Enter the following command in the terminal of any vehicle, or in the terminal of a control node on the same local area network:

xxxxxxxxxx
ros2 run yahboomcar_ctrl yahboom_keyboard

Keyboard control instructions:

  • i / ,: Move forward / Move backward
  • j / l: Turn left / Turn right
  • u / o: Forward-left turn / Forward-right turn
  • m / .: Backward-left turn / Backward-right turn
  • k or Space: Emergency stop braking

In this mode, both vehicles jointly subscribe to the global /cmd_vel and /arm_joint, so pressing a key causes both vehicles to execute chassis movement and robotic arm actions synchronously.


2.2 Mode 2: Gamepad Distribution Control Mode

If you need to use a gamepad for wireless joystick control, the two vehicles' chassis do not need to remap topics to global topics, but instead maintain the independence of their respective namespaces.

[!IMPORTANT] If Mode 1 was launched previously, first press Ctrl + C in each terminal to exit.

Step 1: Launch the Independent Namespace Chassis Driver on Both Vehicles

Run the following command in the terminal of robot1:

xxxxxxxxxx
ros2 launch yahboomcar_multi A1p_bringup_multi.launch.xml robot_name:=robot1

Run the following command in the terminal of robot2:

xxxxxxxxxx
ros2 launch yahboomcar_multi A1p_bringup_multi.launch.xml robot_name:=robot2

After successful startup, the terminal prints the readiness status of each sensor and the chassis driver:

image-20260904203500009

Step 2: Launch the Gamepad Control Node

Insert the USB gamepad wireless receiver into one of the vehicles or the control computer, then enter the following command in the terminal:

xxxxxxxxxx
ros2 launch yahboomcar_multi A1p_joy_ctrl.launch.py

The terminal prints the gamepad node startup information:

image-20260904203951169

In gamepad mode, A1p_joy_ctrl.launch.py internally generates control mapping nodes for robot1, robot2 (and optionally robot3). The gamepad's joystick and buttons simultaneously broadcast control commands to /robot1/cmd_vel, /robot2/cmd_vel, as well as the buzzer, light, and robotic arm topics.


3. Multi-Device Communication and Node Topology Verification

3.1 View the Topic List

Run the following command in the terminal to view the currently active topics of the system:

xxxxxxxxxx
ros2 topic list

You can see topics containing the dedicated namespaces of both vehicles (as well as global shared topics in keyboard mode):

image-20260904204101197

3.2 View the Multi-Device Computation Graph Topology

Run the rqt computation graph analysis tool in the terminal:

xxxxxxxxxx
ros2 run rqt_graph rqt_graph

The computation graph visually shows the communication paths between each control node and the vehicle driver nodes:

image-20260904204148911

  • Shared Keyboard Mode: The control node publishes messages to the global topic /cmd_vel, while /robot1/driver_node and /robot2/driver_node listen to this topic simultaneously;
  • Gamepad Distribution Mode: The gamepad node listens to /joy and publishes consistent velocity control commands to /robot1/cmd_vel and /robot2/cmd_vel in parallel.

4. Core Source Code Analysis

4.1 Shared Keyboard Chassis Launch File (A1p_bringup_multi_ctrl.launch.xml)

Source code path: ~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_multi/launch/A1p_bringup_multi_ctrl.launch.xml

​x
<launch>
    <arg name="robot_name" default="robot1"/>
    <group>
        <push-ros-namespace namespace="$(var robot_name)"/>
        <!-- 1. Low-level driver node: Ackermann steering chassis driver -->
        <node name="driver_node" pkg="yahboomcar_bringup" exec="Ackman_driver_A1P" output="screen">
            <param from="$(find-pkg-share yahboomcar_bringup)/param/a1_driver.yaml"/>
            <param name="imu_link" value="$(var robot_name)/imu_link"/>
            <param name="odom_frame" value="$(var robot_name)/odom"/>
            <param name="base_footprint_frame" value="$(var robot_name)/base_footprint"/>
            <param name="pub_odom" value="true"/>
            <param name="pub_odom_tf" value="false"/>
            <!-- Key remapping: remap velocity and robotic arm topics to global topics without namespaces for unified single-node control -->
            <remap from="cmd_vel" to="/cmd_vel"/>
            <remap from="arm_joint" to="/arm_joint"/>
            <remap from="/arm_status/arm_joint" to="/$(var robot_name)/arm_status/arm_joint"/>
            <remap from="/arm_driver/get_actual_arm_position"
                   to="/$(var robot_name)/arm_driver/get_actual_arm_position"/>
        </node>
​
        <!-- 2. IMU attitude conversion node -->
        <node name="imu_attitude_converter" pkg="yahboomcar_bringup" exec="imu_attitude_converter" output="screen">
            <param name="imu_input_topic" value="imu/data_raw"/>
            <param name="imu_output_topic" value="imu/data"/>
            <param name="publish_tf" value="false"/>
            <param name="use_odom_position" value="false"/>
        </node>
​
        <!-- 3. EKF Extended Kalman Filter data fusion node -->
        <node name="ekf_filter_node" pkg="robot_localization" exec="ekf_node" output="screen">
            <param name="odom_frame" value="$(var robot_name)/odom"/>
            <param name="base_link_frame" value="$(var robot_name)/base_footprint"/>
            <param name="world_frame" value="$(var robot_name)/odom"/>
            <param from="$(find-pkg-share yahboomcar_multi)/param/A1p_ekf_$(var robot_name).yaml"/>
            <remap from="odometry/filtered" to="odom"/>
        </node>
​
        <!-- 4. IMU static TF broadcasting -->
        <node name="imu_static_tf" pkg="tf2_ros" exec="static_transform_publisher"
              args="0 0 0 0 0 0 $(var robot_name)/base_link $(var robot_name)/imu_link"/>
    </group>
​
    <!-- 5. Load the robotic arm and vehicle body URDF description file -->
    <include file="$(find-pkg-share yahboomcar_multi)/launch/A1p_description_multi.launch.py">
        <arg name="robot_name" value="$(var robot_name)"/>
    </include>
</launch>

Key Mechanism Analysis:

  1. Namespace Isolation: Using <push-ros-namespace namespace="$(var robot_name)"/> adds the robot1/ or robot2/ prefix to all nodes in the group, resolving node name conflicts in multi-device networking;

  2. Global Topic Remapping:

    • <remap from="cmd_vel" to="/cmd_vel"/> redirects the vehicle's private robotX/cmd_vel to the global /cmd_vel;
    • The keyboard control node only needs to publish to the global /cmd_vel to broadcast to both vehicles;
  3. Coordinate Frame Isolation: The odometry frame odom and the base frame base_footprint are parameterized as $(var robot_name)/odom and $(var robot_name)/base_footprint respectively, ensuring that the TF tree trunks do not interfere with each other.


4.2 Gamepad Multi-Vehicle Distribution Launch File (A1p_joy_ctrl.launch.py)

Source code path: ~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_multi/launch/A1p_joy_ctrl.launch.py

xxxxxxxxxx
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
​
def generate_launch_description():
    first_robot_arg = DeclareLaunchArgument('first_robot1', default_value='robot1')
    second_robot_arg = DeclareLaunchArgument('second_robot2', default_value='robot2')
    third_robot_arg = DeclareLaunchArgument('third_robot3', default_value='robot3')
​
    first_robot = LaunchConfiguration('first_robot1')
    second_robot = LaunchConfiguration('second_robot2')
    third_robot = LaunchConfiguration('third_robot3')
​
    # 1. Hardware gamepad driver node, listens to /joy
    joy_node = Node(
        package='joy',
        executable='joy_node',
    )
​
    # 2. Control node that distributes gamepad commands to robot1
    robot1_joy_ctrl_node = Node(
        package='yahboomcar_multi',
        executable='yahboomcar_A1_ctrl',
        name='joy_ctrl_robot1',
        output='screen',
        remappings=[
            ('cmd_vel', [first_robot, '/cmd_vel']),
            ('Buzzer', [first_robot, '/Buzzer']),
            ('RGBLight', [first_robot, '/RGBLight']),
            ('JoyState', [first_robot, '/JoyState']),
            ('arm_joint', [first_robot, '/arm_joint']),
        ],
    )
​
    # 3. Control node that distributes gamepad commands to robot2
    robot2_joy_ctrl_node = Node(
        package='yahboomcar_multi',
        executable='yahboomcar_A1_ctrl',
        name='joy_ctrl_robot2',
        output='screen',
        remappings=[
            ('cmd_vel', [second_robot, '/cmd_vel']),
            ('Buzzer', [second_robot, '/Buzzer']),
            ('RGBLight', [second_robot, '/RGBLight']),
            ('JoyState', [second_robot, '/JoyState']),
            ('arm_joint', [second_robot, '/arm_joint']),
        ],
    )
​
    return LaunchDescription([
        joy_node,
        first_robot_arg,
        second_robot_arg,
        third_robot_arg,
        robot1_joy_ctrl_node,
        robot2_joy_ctrl_node,
    ])

Key Mechanism Analysis:

  • This launch file starts two yahboomcar_A1_ctrl instances simultaneously;
  • Both instances listen to the low-level /joy gamepad button messages, but map their control outputs to robot1/cmd_vel and robot2/cmd_vel respectively through remappings;
  • This achieves precise, independent, and synchronized control of any number of vehicles on the local area network with a single gamepad, without remapping global topics.
3D Perception Obstacle‑Avoidance
Multi-vehicle Navigation

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文