yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
ROSMASTER M3 PRO📖
0.Configuration and Operation Guide
  • 1. Quick start handle to control the car
  • 2. Log in to the car and view the code
  • 3. Robotic Arm Calibration
  • 4. Enter the Docker (Jetson-Nano and Raspberry Pi 5 users, see here)
  • 5. Assembly video
  • 6. Modify the firmware parameters of the car control board
  • 7. Frequently Asked Questions and Precautions
  • 8. Precautions for DIY Robotic Arm
1.Chassis Control Course
  • 1.ROS control
  • 2.Handle control
  • 3.Keyboard control
  • 4.Angular velocity calibration
  • 5.Line velocity calibration
  • 6.Line patrol automatic driving
  • 7.Patrol
2.Lidar Course
  • 1.Lidar introduction and use
  • 2.Dual Lidar fusion
  • 3.Lidar obstacle avoidance
  • 4.Lidar tracking
  • 5.Lidar guard
  • 6.Gmapping-SLAM mapping
  • 7.Cartographer-SLAM mapping
  • 8.slam_toolbox mapping
  • 9.Navigation2 single-point navigation avoid
  • 10.Navigation2 multi-point navigation avoid
  • 11.Repositioning navigation
  • 12.RTAB-Map mapping
  • 13.RTAB-Map navigation
  • 14.APP mapping navigation
  • 15.Machine code handling
  • 16.Color block transport
  • 17.Navigation via Pose-Constrained Visual Relocalizationnew
3.Depth Camera Course
  • 1.Dabai_DCW2 camera introduction
  • 2.Depth pseudo-color image
  • 3.Depth camera distance measurement
  • 4.Wood block volume measurement
  • 5.Mediapipe gesture recognition
  • 6.Edge detection
  • 7.YOLOv8 object detection
  • 8.Deep learning object tracking
  • 9. Transformer Model Tracking Algorithmnew
4.Robotic Arm and 3D Space Gripping Course
  • 1.Robotic arm solution
  • 2.Robotic arm chassis linkage control
  • 3.Machine code ID sorting
  • 4.Sorting height abnormality machine code
  • 5.Tracking and gripping machine code
  • 6.Color block color sorting
  • 7.Sorting height abnormality color block
  • 8.Tracking and gripping color block
  • 9.Wood block shape sorting
  • 10.KCF tracking and gripping objects
  • 11.Medipipe gesture ID sorting machine code
  • 12.Mediapipe gesture height sorting machine code
  • 13.Desktop tracking and gripping machine code
  • 14.3D tracking machine code
  • 15.Line patrol and obstacle removal
5.Road network planning and navigationnew
  • 1. Introduction To Road Network Planning
  • 2. Build A Pose Map
  • 3. Road Network Annotation
  • 4. Planning And Navigation Between Waypoints
  • 5. Road Network Navigation In Any Pose
  • 6. Path Re-planning
6.OpenClaw Basic Coursenew
  • 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
7.OpenClaw Interaction Methodnew
  • 1. OpenClaw Webchat Interaction
  • 2. OpenClaw Tui Interaction
  • 3. OpenClaw Voice Dialogue Interaction
  • 4. OpenClaw WhatsApp Interaction
8.OpenClaw Developmentnew
  • 1. OpenClaw connects to the MCP interface of the robot
  • 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 timed tasks
  • 10. OpenClaw multi-agent intelligent agent
  • 11. OpenClaw active interaction
  • 12. OpenClaw vector memory
9.OpenClaw Embodied intelligent applicationnew
  • 1. OpenClaw target tracking
  • 2. OpenClaw robotic arm tracking and grasping
  • 3. OpenClaw robotic arm fixed-point placement
  • 4. OpenClaw garbage sorting
  • 5. OpenClaw slam mapping and navigation
  • 6. OpenClaw navigation transfer
  • 7. OpenClaw machine code clip
  • 8. OpenClaw color line patrol
  • 9. OpenClaw visual distance measurement
10.OpenClaw scenario sandboxnew
  • 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
  • 01.Register a model service provider account
  • 02. Configuring API-KEY
  • 03. Introduction to Dify
  • 04. Basic Dify Features
  • 05. AI Large Model Development - chatbot
  • 06. Deploy the RAG knowledge base
  • 07. RAG knowledge base + chatbot
  • 08. AI agent workflow
  • 09. Custom wake-up response
  • 10. Core module testing tools
13.AI Large Model (Text Version)
  • 1.Semantic understand instruction following
  • 2.Multimodal visual understand
  • 3.Multimodal visual understand+robotic arm grab
  • 4.Multimodal visual understand+SLAM navigation
  • 5.Robotic arm grab+Multimodal visual understand+SLAM navigation
  • 6.Intention estimation
14.AI Large Model(Voice Version)
  • 1.Semantic understand instruction following
  • 2.Multimodal visual understand
  • 3.Multimodal visual understand+robotic arm grab
  • 4.Multimodal visual understand+SLAM navigation
  • 5.Robotic arm grab+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 robotic arm
  • 13.Gesture grabbing and releasing objects
  • 14.Finger control robotic arm
  • 15.Medipipe gesture control robotic arm action 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.Trajectory planning
  • 8.Collision detection
  • 9.Scene design
17.Multi-vehicle Course
  • 1.Multi-vehicle chassis control
  • 2.Multi-vehicle robotic arm control
  • 3.Multi-vehicle navigation
  • 4.Multi-vehicle formation
18.Control Board Course
  • 1.Development environment setup
  • 2.Control board STM32 basic routine
  • 3.Control board micro_ros basic routine
19.Docker Course
  • 1、Docker overview and docker installation
  • 2、Common commands for docker image containers
  • 3、Docker images deeply understand and publish images
  • 4、Docker hardware interaction and data processing
  • 5、Enter the bot's docker container
  • 6、Robot development environment construction in Docker
20.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
21.Main Control Course
Jetson Nano B01
  • 1. Introduction to the Jetson Nano B01 SUB Board
  • 2. Burn the system image
  • 3. Re-read the memory card or USB drive that has been burned
  • 4. Startup system
  • 5. Jetson Nano B01 System and Desktop Introduction
  • 6. Memory card or USB flash drive expansion
  • 7. Network Configuration
  • 8. SSH remote login & file transfer
  • 9. VNC Remote Login
  • 10. Jetson Nano B01 system backup
  • 11. Jetson Nano Swap space increased
  • 12. Installation and use of Jtop
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
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
Download
  • Mapping_APP(iOS_Android)
  • Robot_Image_System_File
  • Code-Firmware
  • Instruction_Manual
  • VM_File
  • Software_Tools
  • Firmware_DriverFile
  • 3D_Model_File
  • ROS2_Basic_VM
  • Other_Annex
Download ZIP

Welcome to ROSMASTER M3 PRO repository

1. OpenClaw target tracking

OpenClaw Target Tracking

OpenClaw Target Tracking1. Course ContentCourse OverviewLearning Objectives2. Preparation3. Target Tracking Case4. Source Code Analysis4.1 TargetTrack() — Entry Point for Starting/Canceling Tracking4.2 _gaze_track_loop() — Background Tracking Thread Loop4.3 _get_bbox() — Retrieving the Target Bounding Box Center4.4 _gaze_control() — Gaze Control (Single-Joint Adjustment)5. Parameter Tuning6. Common Issues and Solutions

1. Course Content

Course Overview

  • OpenClaw target tracking is the core function of robot vision servo control. It tracks target objects in real time using a camera and controls the robotic arm joints to adjust the camera angle, keeping the target centered in the frame.
  • The target tracking function relies on the preceding GetBbox (target detection) to obtain the initial ROI bounding box, and then starts the tracking thread to continuously correct the robotic arm joint angles.
  • The tracking function supports both starting and canceling tracking. It automatically pauses when the target confidence is too low or the target is lost, and automatically resumes tracking when the target reappears.

Learning Objectives

  1. Master the methods for starting and canceling target tracking using OpenClaw.

2. Preparation

  • Start the MicroROS chassis agent (if it's already started, no need to start it again)
sh start_agent.sh

image-20260430173517171

  • Start nodes such as odometer, TF, robotic arm assistance, and camera nodes
xxxxxxxxxx
ros2 launch m3pro_bringup car_base.launch.py
  • Start MCP service
xxxxxxxxxx
ros2 launch m3pro_bringup mcp_service.launch.py

image-20260430173346297

  • If you need voice response, you need to start openclaw_bridge separately; otherwise, you can omit this step.
xxxxxxxxxx
ros2 run multi_brains_pre openclaw_bridge

3. Target Tracking Case

  • Choose any method to interact with OpenClaw. The following demonstration uses... WebChat

image-20260430174033651

  • As the target object moves, the robotic arm adjusts its joint angles to ensure the camera remains continuously focused on the object.

image-20260430174115279

  • If the target's confidence score drops too low or the target is lost from the field of view, the robotic arm will cease movement.

image-20260430174844339

  • When the target reappears within the field of view, the tracker automatically searches for it; once the confidence score exceeds 0.1, the robotic arm resumes tracking.

image-20260430175033132

  • To stop tracking the target, you can issue a new command to OpenClaw.

image-20260430175440682

  • The MCP server logs a message indicating that tracking of the target has been terminated.

image-20260430175535755

[!IMPORTANT]

  • In the [02-OpenClaw Robotic Arm Tracking and Grasping] module, OpenClaw must first successfully track the target before it can proceed to grasp it.

4. Source Code Analysis

  • Source Code Path
xxxxxxxxxx
$HOME/M3Pro_ws/src/multi_brains_pre/multi_brains_pre/action_controller.py

The following section provides an explanation of the source code for the core target tracking functions within the ActionController class—specifically TargetTrack() and the internal functions it invokes.


4.1 TargetTrack() — Entry Point for Starting/Canceling Tracking

​x
def TargetTrack(self, x1_or_cmd, y1:int=None, x2:int=None, y2:int=None):
    # Cancel tracking mode
    if isinstance(x1_or_cmd, str):
        if x1_or_cmd != "cancel":
            return [False, "Invalid command for TargetTrack. Use 'cancel' to stop tracking."]
        # Stop gaze thread first
        if hasattr(self, '_gaze_stop_event'):
            self._gaze_stop_event.set()
        if hasattr(self, '_gaze_thread') and self._gaze_thread is not None and self._gaze_thread.is_alive():
            self._gaze_thread.join(timeout=2.0)
            self._gaze_thread = None
        # Cancel tracker service
        if not self.cancel_track_client.wait_for_service(timeout_sec=5.0):
            return [False, "CancelTrack service not available"]
        self.cancel_track_client.call(CancelTrack.Request())
        # Reset arm to initial pose
        self._reset_joints()
        self.InitArmPose()
        return [True, "Tracking cancelled and arm reset"]
​
    # Start tracking mode
    x1: int = x1_or_cmd
    if not self.start_track_client.wait_for_service(timeout_sec=5.0):
        return [False, "Tracking service not available"]
    result = self.start_track_client.call(StartTrack.Request(x1=x1, y1=y1, x2=x2, y2=y2))
    if not result.success:
        return [False, "Tracking failed"]
    # Start gaze control thread
    self._gaze_stop_event = threading.Event()
    self._gaze_thread = threading.Thread(target=self._gaze_track_loop, daemon=True)
    self._gaze_thread.start()
    return [True, "Tracking started"]

Code Explanation:

  1. Cancel Tracking: If the input parameter is the string "cancel", the following steps are executed sequentially: stop the gaze-tracking thread → cancel the tracking service → restore the robotic arm to its initial pose.
  2. Start Tracking: Calls start_track_client (a ROS2 Service Client) to initiate the target tracking service, passing the target ROI bounding box coordinates (x1, y1, x2, y2).
  3. Background Thread: Launches a separate thread, _gaze_track_loop, to continuously execute visual servo control without interfering with the main thread's ability to respond to other commands.
  4. Parameter Validation: The "start" mode requires a complete set of coordinate parameters; if any coordinate is missing, an error is returned.

4.2 _gaze_track_loop() — Background Tracking Thread Loop

xxxxxxxxxx
def _gaze_track_loop(self):
    '''Background thread: continuously call _gaze_control to follow the tracked target.'''
    self._get_joints()
    while not self._gaze_stop_event.is_set() and rclpy.ok():
        box = self._get_bbox()
        if box[2] < 0.08:
            # confidence too low, wait for next frame
            time.sleep(0.1)
            continue
        error_x = box[0] - 320
        error_y = box[1] - 240
        self._gaze_control(error_x, error_y)
        time.sleep(0.25)

Code Explanation:

  1. Joint Initialization: Calls _get_joints() to retrieve the current angle values ​​for robot arm joints 1, 2, and 4.
  2. Loop Conditions: Uses _gaze_stop_event and rclpy.ok() as termination conditions to ensure the thread can be safely stopped.
  3. Confidence Filtering: If the target confidence score (box[2]) falls below 0.08, the current loop iteration is skipped to wait for the next frame; this corresponds to the behavior described in the documentation as "the robot arm stops moving when the target is lost."
  4. Error Calculation: error_x = center_x - 320 and error_y = center_y - 240 calculate the pixel deviation using the image center (320, 240) as the reference point.
  5. Gaze Control: Calls _gaze_control() to adjust the joint angles based on the calculated errors, thereby centering the target within the frame.

4.3 _get_bbox() — Retrieving the Target Bounding Box Center

xxxxxxxxxx
def _get_bbox(self)-> list:
    with self._track_lock:
        center_x=(self.track_box.bbox[0]+self.track_box.bbox[2])/2
        center_y=(self.track_box.bbox[1]+self.track_box.bbox[3])/2
        msg_stamp_sec = self.track_box.timestamp.sec + self.track_box.timestamp.nanosec * 1e-9
        now_sec = self.get_clock().now().nanoseconds * 1e-9
        confidence = self.track_box.confidence if (now_sec - msg_stamp_sec) < 0.5 else 0.0
        return [center_x, center_y, confidence]

Code Explanation:

  1. Bounding Box Center Calculation: (bbox[0]+bbox[2])/2 calculates the center along the X-axis, while (bbox[1]+bbox[3])/2 calculates the center along the Y-axis.
  2. Thread Safety: Access to the track_box data is protected by the _track_lock mutex.
  3. Confidence Timeliness: If a message timestamp exceeds the current system time by more than 0.5 seconds, the confidence score is forcibly set to 0 to prevent the use of stale tracking data.

4.4 _gaze_control() — Gaze Control (Single-Joint Adjustment)

xxxxxxxxxx
def _gaze_control(self, error_x, error_y):
    '''Eye gaze follows the target object'''
    if self.joint_1 is None or self.joint_2 is None or self.joint_4 is None:
        return
​
    if abs(error_x) > self.gaze_threshold:
        if error_x > self.gaze_threshold:
            self.joint_1 += self.step
        elif error_x < -self.gaze_threshold:
            self.joint_1 -= self.step
        self.SingleJoint_pub.publish(ArmJoint(id=1, joint=self.joint_1, time=100))
​
    if abs(error_y) > self.gaze_threshold:
        if error_y > self.gaze_threshold:
            self.joint_4 -= self.step
        elif error_y < -self.gaze_threshold:
            self.joint_4 += self.step
        # Limit joint_4 to prevent damage
        if self.joint_4 > -5:
            self.SingleJoint_pub.publish(ArmJoint(id=4, joint=self.joint_4, time=100))
        else:
            # joint_4 at lower limit, adjust joint_2 to continue gaze control
            self.joint_2 -= self.step
            self.SingleJoint_pub.publish(ArmJoint(id=2, joint=self.joint_2, time=100))

Code Explanation:

  1. X-Direction Control (Joint 1): When the error exceeds gaze_threshold, Joint 1 (horizontal rotation) is used to adjust the camera's left-right field of view.
  2. Y-Direction Control (Joint 4): When the error exceeds the threshold, Joint 4 (pitch) is used to adjust the camera's up-down field of view.
  3. Joint Limit Protection: When Joint 4 reaches its lower limit (< -5°), the system automatically switches to Joint 2 for compensation to prevent damage to the robotic arm.
  4. Single-Joint Publishing: Single-joint control commands are published via the SingleJoint_pub topic, adjusting the joint by step degrees with each command.

 

5. Parameter Tuning

  • Parameter file path:
xxxxxxxxxx
$HOME/M3Pro_ws/src/m3pro_bringup/config/common.yaml

 

  • Parameters related to the tracking function:
xxxxxxxxxx
...
#gaze control
gaze_threshold: 55.0           # Error threshold for gaze control (units: pixels)
gaze_step: 2                   # Step size for gaze control (units: joint degrees)
...

 

ParameterEffect of Increasing ValueEffect of Decreasing Value
gaze_thresholdAllows for larger deviations; adjustments are more lenient; no adjustments are made if the deviation is below this value.Requires more precise alignment; adjustments occur more frequently; setting this value too low may cause the robotic arm to exhibit steady-state oscillations.
gaze_stepIncreases the adjustment step size.Smoothes the adjustment process, but increases the risk of overshoot.

 

6. Common Issues and Solutions

  • Inaccurate Target ROI Box During Tracking
  • Check whether the ROI box—generated by the GetBbox function during the initial selection of the target object—is accurate. For detailed steps, refer to: [03-openclaw Development] — [05-openclaw Multimodal Vision] — [4.4 Obtaining Target Bounding Box Coordinates].
  • The verification image can be found at: $HOME/M3Pro_ws/multi_brains_file/verify_image.png image-20260430180413630
  • If the visual model's bounding box selections are inaccurate, you need to change the visual model within Dify. Log in to the Dify Admin Console and update the visual model configured for "Robot Vision."

image-20260430140523274

OpenClaw vector memory
OpenClaw robotic arm tracking and grasping

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/中文