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

5.OpenClaw SLAM Mapping And Navigation

OpenClaw SLAM Mapping And Navigation

OpenClaw SLAM Mapping And Navigation1. Course ContentCourse OverviewLearning Objectives2. Preparation3. Recording and Viewing Map Mapping FilesStep 1: Drive Car to Target Point and Record CoordinatesStep 2: View Map Mapping Configuration File4. OpenClaw Intelligent Navigation Case Practice5. Core Source Code Analysis5.1 Navigation() — Dual-Mode Navigation Decision and Scheduling Engine5.2 PreciseAdjustPosition() — Vehicle Body Local Coordinate System PID Closed-Loop Fine-tuning6. Parameter DebuggingNavigation and Fine-tuning Parameters OverviewParameter Debugging Quick Reference Guide

1. Course Content

Course Overview

In embodied intelligence systems, mobile navigation capability is the foundation for robots to break through operational space limitations and achieve large-scale autonomous services. If a robot can only operate the robotic arm in place, its operational radius is only a few dozen centimeters; once given "legs (mobile chassis)" and a "navigation brain", it can travel between various functional areas of factories, warehouses, or homes.

In complex real-world scenarios, robot navigation faces three levels of challenges, and OpenClaw solves them one by one through sophisticated combined strategies:

  1. Semantic location mapping (giving coordinates names): Humans usually say "go to the shipping area", "go to the charging station", while underlying algorithms only recognize spatial coordinates (X, Y, Z, Yaw). The system uses the RecordMapLocation tool to one-click name and persistently save the current car body pose, like posting "house numbers" on each booth in a mall.

  2. Dual-mode navigation switching (highway vs indoor slow travel):

    • Road Network Navigation: Like "city main roads and elevated dedicated lanes". In open long-distance areas, the robot strictly travels along the pre-calibrated skeleton road network at high speed, with clear paths, never lost, extremely strong anti-dynamic interference;

    • Ordinary autonomous navigation (Nav2): Like "entering station and short-range free roaming". Near short-distance target points, autonomously avoid obstacles through local costmap to approach.

    • The system uses 0.8 meters as the critical threshold, long-distance takes the elevated road network, short-distance takes local alignment, seamlessly and smoothly connected!

  3. Precise position fine-tuning (PreciseAdjustPosition reverse parking): After traveling dozens of meters at long distance, due to tiny wheel slipping, the chassis inevitably generates a few centimeters of drift error. To allow the robotic arm to accurately grasp blocks on the table, after the car arrives at the destination, it automatically enables ArUco visual re-localization, and combines with three-channel PID controller, like an old driver reverse parking, for millimeter and degree-level precise alignment!

Learning Objectives

  1. Learn to use the RecordMapLocation tool to record map mapping files, establishing correspondence between semantic location names and coordinates.

  2. Deeply understand the dynamic switching logic between road network navigation (Road Network) and Nav2 autonomous navigation.

  3. Master the coordinate system conversion and PID control principle of centimeter-level fine-tuning PreciseAdjustPosition.

  4. Master navigation key threshold and PID parameter tuning methods.


2. Preparation

Important

  • OpenClaw navigation function requires first building an environmental grid map, pose map and completing road network file annotation. For detailed operations, refer to the previous tutorial 【05.Road network planning and navigation — 2.Road Network Annotation】.

  • If you need to use visual re-localization function, you also need to annotate the ArUco code's global coordinates in the map. For detailed operations, refer to 【02.LiDAR Course — Pose Constraint Combined Visual Re-localization Navigation】.

  • Start core nodes:

ros2 launch dofbot_pro_bringup mcp_service.launch.py relocation:=false display_windows_only_track:=true
  • If you need voice broadcast replies:

xxxxxxxxxx
ros2 launch dofbot_pro_bringup mcp_service.launch.py relocation:=false   display_windows_only_track:=true launch_openclaw_bridge:=true 

image-20260904094627705

  • Enter the road network Docker container environment to start the visualization tool RViz:

​x
# Quick startup command
bringup_ros2kilted
# Enter container terminal
exec_ros2kilted

ros2 launch road_net_route rviz_only.launch.py

image-20260904122956096

  • Start positioning service (load pre-saved mapping map package):

xxxxxxxxxx
ros2 launch yahboomcar_nav localization_imu_odom.launch.py use_rviz:=false load_state_filename:=/home/jetson/map/map.pbstream 
# For Raspberry Pi:
ros2 launch yahboomcar_nav localization_imu_odom.launch.py use_rviz:=false load_state_filename:=/root/map/map.pbstream
# For RDK:
ros2 launch yahboomcar_nav localization_imu_odom.launch.py use_rviz:=false load_state_filename:=/home/sunrise/map/map.pbstream

image-20260904123201252

  • Enter the road network Docker container environment to start the navigation main service:

xxxxxxxxxx
# Note: Entering docker container requires running the following command in the terminal under vnc link to use visualization
bringup_ros2kilted
exec_ros2kilted

ros2 launch road_net_route roadnet_nav2.launch.py 

PS: If the road network sometimes doesn't display when reopened, the common problem is that the ros node from the last opening wasn't properly released. It is recommended to run in docker

xxxxxxxxxx
pkill -f ros
  • For voice dialogue interaction:

xxxxxxxxxx
ros2 run ackermann_mcp asr_detect

image-20260904101250184


3. Recording and Viewing Map Mapping Files

Tip
You can record points through the terminal robot_control CLI command tool, or directly ask OpenClaw to record the current position in dialogue. Below demonstrates using the most clear and intuitive CLI tool.

Core ToolCLI ParametersPopular Function Description
RecordMapLocation--name (Chinese location name), --symbol (short identifier)Write the car body's current spatial coordinates to the configuration file, posting a house number for the location

Step 1: Drive Car to Target Point and Record Coordinates

Drive the car to the "ShippingArea" workstation front, execute the following command in the terminal to record the car body base_link coordinates and heading in the global map map:

xxxxxxxxxx
robot_control call-tool RecordMapLocation --name ShippingArea --symbol B
  • --name: Specify the full name of the workstation (e.g., "ShippingArea", "ProcessingCenter", "ChargingPile").

  • --symbol: Specify the English letter ID of the workstation (e.g., A, B, C), convenient for quick search and deduplication.

image-20260904141624656

After successful recording, the terminal will output a prompt for successful saving. If a same-named symbol already exists in the configuration file, the system will automatically overwrite and update to the latest coordinates:

image-20260904141655758

Step 2: View Map Mapping Configuration File

Point data is persistently saved in the map_mapping.yaml file. Run the following command to view:

xxxxxxxxxx
cat ~/yahboomcar_ros2_ws/dofbot_pro_ws/install/dofbot_pro_bringup/share/dofbot_pro_bringup/config/map_mapping.yaml

In the printed content, you can clearly see the just-recorded "ShippingArea" and the corresponding Position spatial 3D coordinates and Orientation quaternion heading:

image-20260904141826986


4. OpenClaw Intelligent Navigation Case Practice

Tip
Instructions can be expressed naturally according to your actual needs. Here we use WebChat as an example.

OpenClaw navigation related core tools:

Tool NameInput ParametersCore Function
GetMapMappingNoneQuery all location names and symbol lists recorded in the current map
Navigation--location (target location name or symbol)Start autonomous decision navigation to target workstation and complete precise fine-tuning

Enter the command in WebChat:

"Navigate to the shipping area" or "Go to location B"

image-20260904142125996

After the car receives the command:

  1. Quickly look up the table to read "ShippingArea" target coordinates;

  2. Autonomously decide to take the elevated road network for high-speed cruise to near the shipping area;

  3. After arriving at the frontier, smoothly switch to local navigation, and finally through PID fine-tuning, smoothly stop in front of the shipping workstation, with posture exactly the same as when recorded!


5. Core Source Code Analysis

  • Source code file path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/dofbot_pro_ws/src/ackermann_mcp/ackermann_mcp/action_controller.py

5.1 Navigation() — Dual-Mode Navigation Decision and Scheduling Engine

xxxxxxxxxx
def Navigation(self, location: str) -> list[bool, str]:
    '''Intelligent navigation scheduling main entry: Auto-decide road network and local navigation by distance'''
    location = location.strip("'\"")
    # 1. Read and parse map_mapping.yaml configuration file
    try:
        with open(self.map_mapping_file, 'r', encoding='utf-8') as file:
            map_data = yaml.safe_load(file) or {}

        target_data = None
        for symbol, data in map_data.items():
            if symbol == location or (isinstance(data, dict) and data.get('name') == location):
                target_data = data
                break
        if target_data is None:
            return [False, f"Coordinates record for '{location}' not found in map mapping file"]
    except Exception as e:
        return [False, str(e)]

    # 2. Construct target PoseStamped message
    goal_msg = PoseStamped()
    goal_msg.header.frame_id = "map"
    goal_msg.header.stamp = self.get_clock().now().to_msg()
    pos = target_data.get('position', {})
    ori = target_data.get('orientation', {})
    goal_msg.pose.position.x = float(pos.get('x', 0.0))
    goal_msg.pose.position.y = float(pos.get('y', 0.0))
    goal_msg.pose.position.z = float(pos.get('z', 0.0))
    goal_msg.pose.orientation.x = float(ori.get('x', 0.0))
    goal_msg.pose.orientation.y = float(ori.get('y', 0.0))
    goal_msg.pose.orientation.z = float(ori.get('z', 0.0))
    goal_msg.pose.orientation.w = float(ori.get('w', 1.0))

    # 3. Calculate geometric straight-line distance from car current position to target point
    current_pose = self._get_current_map_pose()
    if current_pose is None:
        return [False, "Failed to get current car body global pose"]
    distance = math.sqrt(
        (current_pose.transform.translation.x - goal_msg.pose.position.x) ** 2 +
        (current_pose.transform.translation.y - goal_msg.pose.position.y) ** 2
    )

    # 4. Decision branch: Choose navigation backend based on distance threshold
    if distance < self.nav_mode_threshold:
        # Branch A: Short distance (< 0.8 meters), directly call Nav2 ActionClient for short-range parking
        self.get_logger().info("Distance is close, enabling Nav2 local autonomous alignment")
        # ... Send Nav2 goal and wait for arrival ...
    else:  
        # Branch B: Long distance (>= 0.8 meters), publish to road network navigation topic, cruise at high speed along trunk skeleton
        self.get_logger().info("Distance is far, enabling road network planned high-speed navigation")
        self.road_net_nav_future = Future()
        self.road_net_nav_pub.publish(goal_msg)
        # Wait for road network navigation to return success status ...

    # 5. After arrival, precise alignment: Start ArUco visual re-localization and enter PID fine-tuning
    time.sleep(3.0)  # Wait for chassis sway to completely stop
    self._control_aritag_detect(sign='enable')  # Enable visual re-localization
    time.sleep(3.0)
    self.PreciseAdjustPosition(goal_msg)        # Closed-loop millimeter-level fine-tuning
    self._control_aritag_detect(sign='disable') # Fine-tuning complete, disable visual to save CPU
    return [True, "Navigation succeeded"]

Key point popular explanation:

  1. CPU energy-saving small detail: ArUco machine code detection is only started through _control_aritag_detect('enable') in the brief few seconds of fine-tuning at the destination, and immediately closed after fine-tuning, avoiding occupying valuable chip computing power during full-speed running.


5.2 PreciseAdjustPosition() — Vehicle Body Local Coordinate System PID Closed-Loop Fine-tuning

The navigation algorithm drives the car to the approximate position, but the robotic arm grasping requires error within 1 centimeter. This function is responsible for the final "crucial last step".

xxxxxxxxxx
def PreciseAdjustPosition(self, precise_pose: PoseStamped):
    '''Use local coordinate system dual closed-loop PID for centimeter-level precise position fine-tuning'''
    target_x = precise_pose.pose.position.x
    target_y = precise_pose.pose.position.y
    target_yaw = get_yaw_from_quaternion(precise_pose.pose.orientation)

    # Initialize PID parameters for position and yaw angle
    xy_kp, xy_ki, xy_kd = self.precise_adjust_xy_pid
    theta_kp, theta_ki, theta_kd = self.precise_adjust_theta_pid
    xy_integral, theta_integral = 0.0, 0.0
    xy_prev_error, theta_prev_error = 0.0, 0.0
    consecutive_success = 0
    required_success = 5  # Must have 5 consecutive frames meeting standard to be considered truly stably in place

    for attempt in range(self.precise_adjust_max_iteration):
        transform = self._get_current_map_pose()
        if transform is None: return False

        current_x = transform.transform.translation.x
        current_y = transform.transform.translation.y
        current_yaw = get_yaw_from_quaternion(transform.transform.rotation)

        # 1. Calculate error in global map coordinate system
        dx = target_x - current_x
        dy = target_y - current_y
        
        # 2. Core mathematical transformation: Rotate and project global map error to vehicle local coordinate system!
        error_x = dx * math.cos(current_yaw) + dy * math.sin(current_yaw)   # Vehicle front-rear direction error
        error_y = -dx * math.sin(current_yaw) + dy * math.cos(current_yaw)  # Vehicle left-right direction error
        error_theta = normalize_angle(target_yaw - current_yaw)            # Vehicle yaw angle error
        pos_error = math.sqrt(dx * dx + dy * dy)

        # 3. Steady-state arrival determination (position error < 1cm, angle error < 0.05rad = 2.8°)
        pos_reached = pos_error < self.precise_adjust_pos_tolerance
        angle_reached = abs(error_theta) < self.precise_adjust_angle_tolerance

        if pos_reached and angle_reached:
            consecutive_success += 1
            if consecutive_success >= required_success:
                self.cmd_pub.publish(Twist())  # Immediately brake
                self.get_logger().info("Precision alignment complete!")
                return True
        else:
            consecutive_success = 0  # Reset count once shaking exceeds standard

        # 4. PID calculation and speed limit output
        dt = 0.1
        vx = max(-self.precise_adjust_max_linear_vel, 
                 min(self.precise_adjust_max_linear_vel, xy_kp * error_x))
        omega = max(-self.precise_adjust_max_angular_vel, 
                   min(self.precise_adjust_max_angular_vel, theta_kp * error_theta))

        twist = Twist()
        twist.linear.x = vx
        twist.angular.z = omega
        self.cmd_pub.publish(twist)
        time.sleep(0.1)

    self.cmd_pub.publish(Twist())

6. Parameter Debugging

  • Core parameter configuration file path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/dofbot_pro_ws/src/dofbot_pro_bringup/config/common.yaml

Navigation and Fine-tuning Parameters Overview

xxxxxxxxxx
mcp_service:
  ros__parameters:
    # Navigation mode switching distance
    nav_mode_threshold: 0.8                       # Mode switching threshold (meters), Nav2 below this value, road network above
    
    # PreciseAdjustPosition fine-tuning PID parameters
    precise_adjust_xy_pid: [0.5, 0.0, 0.1]        # X/Y position PID [proportional Kp, integral Ki, derivative Kd]
    precise_adjust_theta_pid: [1.0, 0.0, 0.2]     # Angle PID [proportional Kp, integral Ki, derivative Kd]
    precise_adjust_max_linear_vel: 0.1            # Fine-tuning max linear velocity (0.1 m/s, smooth slow parking)
    precise_adjust_max_angular_vel: 0.5           # Fine-tuning max angular velocity (rad/s)
    precise_adjust_pos_tolerance: 0.01            # Arrival position tolerance (0.01 meters, i.e., 1 cm)
    precise_adjust_angle_tolerance: 0.05          # Arrival angle tolerance (0.05 radians, approximately 2.8°)
    precise_adjust_max_iteration: 500             # Max attempts (timeout protection)

Parameter Debugging Quick Reference Guide

PhenomenonPossible CauseSolution
Car "draws dragon" and sways back and forth at destinationPosition Kp is set too large, or differential Kd is too smallAppropriately reduce the first item in precise_adjust_xy_pid (e.g., from 0.5 to 0.3)
Fine-tuning process is too slow like a snailSpeed limit or Kp is too smallAppropriately increase precise_adjust_max_linear_vel or increase Kp
Always 2~3 cm off and prompts timeout failureTolerance is set too strict (e.g., carpet resistance is large and can't park within 1cm)Appropriately relax precise_adjust_pos_tolerance to 0.02 (2 cm)
OpenClaw Waste Sorting
OpenClaw Navigation Transport

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