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

6. OpenClaw chassis control

OpenClaw Chassis Control

OpenClaw Chassis Control1. Course ContentCourse OverviewLearning Objectives2. Preparation3. Chassis Control Interfaces4. Demonstration4.1 Initiating OpenClaw Interaction4.2 Chassis Movement Control4.3 Chassis Omnidirectional Movement Control4.4 Chassis In-Place Rotation5. Source Code Analysis5.1 set_cmdvel() — Setting Chassis Movement Velocity (Underlying Implementation for MoveWithSpeed)5.2 move_by_odom() — Precise Distance Movement Based on Odometry (Low-Level Implementation of Move)5.3 rotate_by_odom() — Precise Angle Rotation Based on Odometry (Underlying Implementation for Rotate)5.4 Explanation of the Underlying Implementation Architecture6. Common Issues and Solutions

1. Course Content

Course Overview

  • OpenClaw Chassis Control serves as a foundational function for robot motion control. Through the MCP interface, it provides three chassis control tools: MoveWithSpeed ​​(velocity control), Move (distance-based movement), and Rotate (in-place rotation).
  • It supports omnidirectional chassis control, allowing for simultaneous control of linear velocities in the X and Y directions, as well as angular velocity around the Z-axis, thereby enabling forward/backward movement, lateral translation, and in-place rotation.
  • Precise distance and angle control are achieved through Odometry (Odom) feedback, ensuring high motion accuracy.

Learning Objectives

  1. Understand the functions and applications of the three chassis control interfaces provided by OpenClaw.
  2. Master the interactive methods—specifically via WebChat—for controlling chassis movement, omnidirectional motion, and turning.

2. Preparation

  • Launch the MicroROS Chassis Agent (if already running, do not launch again).
sh start_agent.sh
  • Launch the Odometry, TF, Manipulator Assist, Camera, and other relevant nodes.
xxxxxxxxxx
ros2 launch m3pro_bringup car_base.launch.py
  • Launch the MCP Service.
xxxxxxxxxx
ros2 launch m3pro_bringup mcp_service.launch.py
  • If you require voice feedback/replies, you must additionally launch the openclaw_bridge; otherwise, this step may be skipped.
xxxxxxxxxx
ros2 run multi_brains_pre openclaw_bridge

3. Chassis Control Interfaces

[!NOTE]

  • For detailed information regarding the functions, parameters, and usage of these interfaces, please refer to the tutorials: [01-Integrating OpenClaw with the Robot MCP Interface] and [02-Robot CLI Command Tools].
No.Tool NameFunction Description
1MoveWithSpeed ​​Control the robot's omnidirectional chassis velocity
2MoveMove the robot's chassis a specified distance
3RotateRotate in-place by a specified angle

4. Demonstration

4.1 Initiating OpenClaw Interaction

  • Interact with OpenClaw using any available interaction method. Initiating a conversation—this section demonstrates the process using Web Chat.

image-20260430152349337

[!TIP]

  • You can formulate the conversational prompts according to your specific requirements; the following serves as a demonstration example.

4.2 Chassis Movement Control

  • Move forward 0.2 meters, then strafe right 0.2 meters.

image-20260430152927178

4.3 Chassis Omnidirectional Movement Control

  • The MoveWithSpeed tool provides lower-level velocity control, enabling complex movements through the vector composition of velocities. For example:
  • Move for 2 seconds with an X-axis velocity of 0.1 m/s and a Y-axis velocity of 0.15 m/s.

image-20260430153538629

4.4 Chassis In-Place Rotation

  • Rotate 35 degrees to the right, then rotate 40 degrees counter-clockwise.

image-20260430155400453

5. 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 three core chassis control functions within the ActionController class. These three functions constitute the underlying ROS2 implementations invoked by the MCP tools (MoveWithSpeed, Move, and Rotate).


5.1 set_cmdvel() — Setting Chassis Movement Velocity (Underlying Implementation for MoveWithSpeed)

xxxxxxxxxx
def set_cmdvel(self, linear_x:float, linear_y:float, angular_z:float, duration:float)->bool:
    """
    Set robot movement speed and duration
    """
    twist = Twist()
    twist.linear.x = linear_x
    twist.linear.y = linear_y
    twist.angular.z = angular_z
    self.cmd_pub.publish(twist)
    time.sleep(duration)
    self.cmd_pub.publish(Twist())
    return True

Code Explanation:

  1. Message Construction: Create a Twist() velocity message, setting the values for linear.x (forward/backward linear velocity), linear.y (left/right linear velocity), and angular.z (angular velocity).
  2. Publishing and Stopping: Publish the message to the cmd_vel topic via cmd_pub; after maintaining this state for a specified duration using time.sleep(), publish an empty Twist() message to bring the robot to a halt.
  3. Omnidirectional Control: By simultaneously setting the linear velocities (x and y) and the angular velocity (z), movement in any arbitrary direction is achieved through the vector composition of these velocities.

5.2 move_by_odom() — Precise Distance Movement Based on Odometry (Low-Level Implementation of Move)

​x
def move_by_odom(self, distance: float, direction: str = 'forward') -> bool:
    '''Move a specified distance based on odometer'''
    linear_speed = self.odom_linear_speed
    timeout = self.odom_timeout
    start_pose = self._get_current_odom_pose()
    if start_pose is None:
        self.get_logger().error("Failed to get current odometry position")
        return False
​
    twist = Twist()
    if direction == 'forward':
        twist.linear.x = abs(linear_speed) if distance >= 0 else -abs(linear_speed)
    elif direction == 'backward':
        twist.linear.x = -abs(linear_speed) if distance >= 0 else abs(linear_speed)
    elif direction == 'left':
        twist.linear.y = abs(linear_speed) if distance >= 0 else -abs(linear_speed)
    elif direction == 'right':
        twist.linear.y = -abs(linear_speed) if distance >= 0 else abs(linear_speed)
    else:
        self.get_logger().error(f"Unknown direction: {direction}")
        return False
​
    start_time = time.time()
    while rclpy.ok():
        current_time = time.time()
        if current_time - start_time > timeout:
            self.get_logger().warn("Movement timeout")
            self.cmd_pub.publish(Twist())
            return False
​
        current_pose = self._get_current_odom_pose()
        if current_pose is None:
            time.sleep(0.1)
            continue
​
        moved_distance = calculate_distance(start_pose, current_pose)
​
        if moved_distance >= abs(distance) - self.odom_position_tolerance:
            self.cmd_pub.publish(Twist())
            self.get_logger().info(f"Movement complete! Total distance: {moved_distance:.3f}m")
            break
​
        self.cmd_pub.publish(twist)
        time.sleep(0.1)
​
    self.cmd_pub.publish(Twist())
    return True

Code Explanation:

  1. Direction Mapping: Maps the four directions—forward, backward, left, and right—to either twist.linear.x (forward/backward) or twist.linear.y (left/right).
  2. Odometry Loop Control: Retrieves the current pose using _get_current_odom_pose() and calculates the distance traveled—calculate_distance(start_pose, current_pose)—during each loop iteration.
  3. Precision Control: The operation terminates once the target distance is reached within the specified odom_position_tolerance (default: 0.005m).
  4. Timeout Protection: If the target is not reached within the odom_timeout duration (default: 30s), the operation terminates and returns a failure status.

5.3 rotate_by_odom() — Precise Angle Rotation Based on Odometry (Underlying Implementation for Rotate)

xxxxxxxxxx
def rotate_by_odom(self, angle: float, angular_speed: float = None, timeout: float = None) -> bool:
    '''Based on the odometer rotating at a specified angle (angle unit: degrees)'''
    if angular_speed is None:
        angular_speed = self.odom_angular_speed
    if timeout is None:
        timeout = self.odom_timeout
​
    angle_rad = math.radians(angle)
​
    start_pose = self._get_current_odom_pose()
    if start_pose is None:
        self.get_logger().error("Failed to get current odometry position")
        return False
    start_yaw = get_yaw_from_quaternion(start_pose.orientation)
    target_yaw = start_yaw + angle_rad
    target_yaw = normalize_angle(target_yaw)
​
    twist = Twist()
    twist.angular.z = abs(angular_speed) if angle >= 0 else -abs(angular_speed)
​
    start_time = time.time()
    while rclpy.ok():
        current_time = time.time()
        if current_time - start_time > timeout:
            self.get_logger().warn("Rotation timeout")
            self.cmd_pub.publish(Twist())
            return False
​
        current_pose = self._get_current_odom_pose()
        if current_pose is None:
            time.sleep(0.1)
            continue
​
        current_yaw = get_yaw_from_quaternion(current_pose.orientation)
        angle_diff = calculate_angle_diff(target_yaw, current_yaw)
​
        if abs(angle_diff) <= self.odom_angle_tolerance:
            self.cmd_pub.publish(Twist())
            return True
​
        self.cmd_pub.publish(twist)
        time.sleep(0.1)
​
    self.cmd_pub.publish(Twist())
    return False

Code Explanation:

  1. Angle Conversion: math.radians(angle) converts degrees to radians; get_yaw_from_quaternion() extracts the yaw angle from a quaternion.
  2. Target Calculation: target_yaw = start_yaw + angle_rad calculates the target angle; a positive value indicates a clockwise rotation, while a negative value indicates a counter-clockwise rotation.
  3. Closed-Loop Control: In each loop iteration, calculate_angle_diff() computes the difference between the current angle and the target angle; the process terminates once the difference falls within the odom_angle_tolerance (default: 0.05 rad ≈ 2.86°).
  4. Direction Determination: abs(angular_speed) if angle >= 0 else -abs(angular_speed) determines the direction of rotation based on the sign of the angle variable.

5.4 Explanation of the Underlying Implementation Architecture

MCP ToolUnderlying FunctionControl MethodPrecision Mechanism
MoveWithSpeedset_cmdvel()Open-loop velocity controlNo feedback; suitable for rapid start/stop operations
Movemove_by_odom()Closed-loop odometry feedbackPosition tolerance: ±0.005 m
Rotaterotate_by_odom()Closed-loop odometry feedbackAngle tolerance: ±0.05 rad

[!NOTE]

  • The three functions listed above are defined within the ActionController class and publish velocity commands via cmd_pub (on the cmd_vel topic).
  • The MCP Tool Layer (mcp_action.py) wraps these underlying functions as MCP tools—making them accessible to OpenClaw and the CLI—by registering the @mcp.tool() decorator.

6. Common Issues and Solutions

  • For details, please refer to the "Summary of Common Issues and Solutions" section within this tutorial chapter.

[!TIP]

  • For more detailed operational procedures regarding chassis control, please refer to the "Navigation & Transport" and "Waste Sorting" case studies found in OpenClaw Embodied AI in Action.
OpenClaw multimodal vision
OpenClaw robotic arm control

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