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

4.Linear Velocity Calibration

📏 Linear Velocity Calibration

1. Course Introduction

Use a physical reference object of known length such as a tape measure to verify the actual translational distance measurement accuracy of the A1 Pro chassis wheel odometry (calculated from chassis MCU encoder and front wheel steering data), and precisely calibrate the linear velocity scale correction factor.

🎯 Course Objectives

  1. Understand the principles and calculation formulas for linear velocity calibration based on Ackerman chassis wheel odometry

  2. Master the calibration operation process using the calibrate_linear_A1P node combined with a physical tape measure

  3. Master the persistence method for writing the optimal correction factor to the low-level driver parameter configuration file a1_driver.yaml

Important

The vehicle has been calibrated at the factory before shipment, so there is no need to recalibrate for first-time use. You only need to refer to this tutorial for recalibration when long-term operation causes wear, when different tires are replaced, or when a fixed proportional cumulative error is observed in the vehicle traveling a specific distance.


2. Preparation Work

2.1 Start the Chassis Integrated Driver

Open a terminal and run the following command to start all A1 Pro chassis drivers and the EKF fusion localization node:

ros2 launch yahboomcar_bringup yahboomcar_bringup_A1_launch.py

image-20260828174047836

2.2 Prepare the Measurement Environment and Tools

  • Prepare a tape measure accurate to the millimeter (at least 2 meters long);

  • Select a flat, unobstructed open area, use tape to mark a starting line on the ground, and align the front wheel (or rear wheel axle vertical line) of the vehicle with the starting line.


3. Calibration Process

3.1 Start the Linear Velocity Calibration Program

Run the calibration test node in a new terminal:

xxxxxxxxxx
ros2 run yahboomcar_bringup calibrate_linear_A1P

image-20260828174350939

The calibration node will listen to the real-time pose transformation from odom -> base_footprint in the TF tree, and obtain the relative displacement reported by the odometry.

3.2 Trigger the Straight-Line Driving Test

In another terminal, trigger the test through a ROS 2 dynamic parameter:

xxxxxxxxxx
ros2 param set /calibrate_linear start_test True

image-20260828174311356

The vehicle will drive straight forward at a preset speed (default 0.2~0.3 m/s). When the odometry reports the displacement reaching the preset target distance (default test_distance: 1.0 meters), it will automatically brake to a stop and output the test results in the terminal.

3.3 Measure the Actual Physical Distance on the Ground

After the vehicle comes to a complete stop, use the tape measure to measure the actual physical movement distance (Actual Distance) of the vehicle reference point (such as the wheel axle center) from the starting line to the current stopping position.

3.4 Calculate and Dynamically Adjust the Correction Factor

The calibration program calculates displacement based on odometry feedback. In the program and low-level driver, the odometry displacement is multiplied by the correction factor (that is: determined displacement = odometry displacement * correction factor):

  • Writing a factor greater than 1.0: The odometry reading is amplified, displacement accumulates faster, the vehicle will reach the target value earlier and brake earlier (the actual distance traveled on the ground becomes shorter);

  • Writing a factor less than 1.0: The odometry reading is reduced, displacement accumulates slower, the vehicle needs to travel longer to reach the target value, the vehicle will brake later (the actual distance traveled on the ground becomes longer).

Therefore, based on the measured physical tape measure value on the ground and the expected target distance, the new correction factor calculation formula is:

xxxxxxxxxx
New Correction Factor = Current Factor * (Actual Physical Measured Distance / Target Travel Distance)

Parameter Adjustment Example and Calculation:

  • Scenario 1: Overshot (Actual Distance > Target Distance) Set target travel to 1.000 meters, current factor is 1.0, vehicle actually measured and moved 1.050 meters (overshot the line by 5cm):

    xxxxxxxxxx
    New Factor = 1.0 * (1.050 / 1.000) = 1.0500 (Increase the factor)

    After increasing the factor from 1.0 to 1.0500, when the vehicle actually travels 1.0 meters, the odometry will prematurely report the full 1.0 * 1.05 = 1.05 meters, thus braking earlier and stopping precisely at the 1.0 meter line.

  • Scenario 2: Under-shot (Actual Distance < Target Distance) Set target travel to 1.000 meters, current factor is 1.0, vehicle only actually moved 0.950 meters (stopped early, still 5cm short of the line):

    xxxxxxxxxx
    New Factor = 1.0 * (0.950 / 1.000) = 0.9500 (Decrease the factor)

    After decreasing the factor from 1.0 to 0.9500, the odometry reading slows down, the vehicle will continue forward to make up the extra 5cm travel, precisely reaching 1.0 meters.

Dynamically set the new factor via command line (example of increasing to 1.0500):

xxxxxxxxxx
ros2 param set /calibrate_linear odom_linear_scale_correction 1.0500

image-20260828174416418

Tip

Core rule:

  • If the actual physical measured distance on the ground is greater than the target distance (overshot) Increase the correction factor;

  • If the actual physical measured distance on the ground is less than the target distance (under-shot) Decrease the correction factor.

3.5 Multiple Verifications and Convergence

Move the vehicle back to the starting line, run ros2 param set /calibrate_linear start_test True again, and observe whether the vehicle stops precisely at the 1.000 meter mark after applying the new correction factor. Repeat until the actual physical error is within 5 millimeters.


4. Persist the Correction Factor to Driver Configuration

After calibration is complete, to ensure the low-level driver automatically applies the parameters on every boot or launch, write the optimal factor obtained from calibration to the parameter configuration file of the driver_node:

Parameter file path:

xxxxxxxxxx
$HOME/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/param/a1_driver.yaml

Open a1_driver.yaml, find the odom_linear_scale_x configuration item and modify it to the final calibrated value (for example 1.0500):

xxxxxxxxxx
driver_node:
  ros__parameters:
    # ...
    # Chassis linear velocity odometry scale correction factor (new value after calibration)
    odom_linear_scale_x: 1.0500
    odom_angular_scale_z: 1.0
    # ...

Note

After modifying a1_driver.yaml, it is recommended to recompile the package to synchronize the configuration file in the installation path:

xxxxxxxxxx
cd ~/yahboomcar_ros2_ws/yahboomcar_ws
colcon build --packages-select yahboomcar_bringup
source install/setup.bash

5. Using rqt_reconfigure for Graphical Parameter Tuning

In addition to the command line, you can also use the rqt_reconfigure graphical interface provided by ROS 2 for visual real-time parameter tuning and test triggering:

xxxxxxxxxx
ros2 run rqt_reconfigure rqt_reconfigure

image-20260828174614689

Important

What to do when no nodes are displayed in the interface: If after opening rqt_reconfigure, the /calibrate_linear node is not shown in the list on the left side, this is due to the timing sequence between node startup and tool loading not auto-refreshing. Simply click the Refresh button (Refresh 🔄) in the upper left corner of the rqt interface to rescan and display /calibrate_linear.

5.1 Calibration Node Parameter Description

The /calibrate_linear node panel includes the following key parameters:

Parameter NameDefault ValuePhysical Meaning and Description
start_testFalseStart test trigger switch (check to start test, automatically unchecks when travel is complete)
odom_linear_scale_correction1.0Linear velocity scale correction factor for real-time testing within the calibration node (>1.0 brakes earlier and travels shorter, <1.0 delays braking and travels farther)
test_distance1.0Target distance for test travel (meters)
speed0.2Test travel linear velocity (m/s)
tolerance0.02Position error dead zone tolerance for target distance arrival determination (meters)
num_tests1Number of consecutive test rounds
rate50.0TF query and control main loop frequency (Hz)
base_framebase_footprintRobot chassis projection base coordinate frame name
odom_frameodomOdometry global reference coordinate frame name

6. Core Source Code and Algorithm Principle Analysis

Source code path:

xxxxxxxxxx
$HOME/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/yahboomcar_bringup/calibrate_linear_A1P.py

6.1 Calibration Closed-Loop Control Core Logic

xxxxxxxxxx
def on_timer(self):
    if self.is_testing:
        x, y = self.get_position()
        if x is None:
            return
        
        # 1. Calculate cumulative displacement from starting point
        distance = sqrt((x - self.x_start)**2 + (y - self.y_start)**2)
        # 2. Multiply odometry raw displacement by correction factor
        corrected_distance = distance * odom_scale
        error = test_distance - corrected_distance
        
        # 3. Closed-loop control for straight-line movement, keep publishing linear velocity until target distance is reached
        if abs(error) > tolerance:
            move_cmd = Twist()
            move_cmd.linear.x = copysign(speed, error)
            self.cmd_vel_pub.publish(move_cmd)
        else:
            # 4. Target distance reached, publish brake stop
            self.cmd_vel_pub.publish(Twist())
            self.is_testing = False

6.2 Source Code and Driver Activation Mechanism Analysis

  • Why does the vehicle stop early when the factor is greater than 1.0: The condition for the calibration program to determine stopping is corrected_distance >= test_distance, i.e., distance * odom_scale >= test_distance. Therefore, when the vehicle stops, the odometry displacement is distance = test_distance / odom_scale. When odom_scale > 1.0, the denominator becomes larger, and the odometry only needs to accumulate a smaller displacement to determine reaching the target, thus braking earlier and stopping.

  • Low-level driver activation mechanism: In the chassis low-level driver Ackman_driver_A1P.py:

    xxxxxxxxxx
    vx = float(vx) * self.odom_linear_scale_x

    The driver node directly multiplies the speed reported by the MCU by odom_linear_scale_x. When a factor greater than 1.0 is written, the odometry displacement and speed reported to ROS 2 are proportionally amplified. After the optimal factor obtained from calibration is written to a1_driver.yaml, the odometry accuracy of the entire ROS 2 navigation and mapping localization stack will be perfectly aligned with the physical real world.

Robot Keyboard Control
Angular Velocity Calibration

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