yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
ROSMASTER M3📖
00.Configuration and Operation Guide
  • 1.Quick start handle to control the car
  • 2.Log in to the car and view the code
  • 3.Enter the Docker (For RPI5)
  • 4.Camera and Radar Configuration (Must Read)
  • 5.Assembly video
  • 6.Modify Control Board Firmware Parameters
01.Chassis Control Course
  • 01.ROS control
  • 02.Handle control
  • 03.Keyboard control
  • 04.Robot state estimation
  • 05.Data remote visualization
  • 06.Line velocity calibration
  • 07.Angular velocity calibration
  • 08.Robot URDF model
  • 09.Line patrol automatic driving
  • 10.Patrol
02.Lidar Course
  • 01.Lidar introduction and use
  • 02.Lidar point cloud fusion and filtering
  • 03.Lidar obstacle avoidance
  • 04.Lidar tracking
  • 05.Lidar guard
  • 06.Gmapping-SLAM mapping
  • 07.Cartographer-SLAM mapping
  • 08.slam_toolbox mapping
  • 09.Lifelong mapping
  • 10.Navigation2 single-point navigation avoid
  • 11.Navigation2 multi-point navigation avoid
  • 12.Cartographer relocalization navigation
  • 13.slam_toolbox localization and navigation
  • 14.Synchronous mapping and navigation
  • 15.RTAB-Map mapping
  • 16.RTAB-Map navigation
  • 17.APP mapping and navigation
03.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
04.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
05.AI Model - Voice Version
  • 1.Semantic understand and command follow
  • 2.Multimodal visual understanding
  • 3.Multimodal visual understanding+SLAM navigation
  • 4.Intention estimation
06.AI Model - Text Version
  • 1.Semantic understand and command follow
  • 2.Multimodal visual understanding
  • 3.Multimodal visual understanding+SLAM navigation
  • 4.Intention estimation
07.Road Network Planning and Navigation
  • 1.Introduction and Quick Start
  • 2.Constructing a Pose Map
  • 3.Road Network Labelling
  • 4.Inter-Road Network Planning and Navigation
  • 5.Free-Pose Road Network Navigation
  • 6.Path Replanning
08.Autonomous Driving expand(Need purchase track map)
  • 01.Environment Setup & Precautions
  • 02.YOLO Environment Configuration
  • 03.Data Collection
  • 04.Data Annotation
  • 05.YOLOv11 Model Training
  • 06.Model Format Conversion
  • 07.Vehicle Centerline Calibration
  • 08.Lane Detection
  • 09.Lane-Keeping Autonomous Driving
  • 10.Traffic Sign Recognition
  • 11.Comprehensive Autonomous Driving Applications
  • 12.Autonomous Driving Debugging Module
  • 13.Road Network Planning with Track Map
  • 14.Road Network Planning with Traffic Sign Recognition
  • 15.AI Model with Road Network Planning
  • 16.AI Model with Track Map and SLAM Navigation
  • 17.AI Model with Road Network Planning and Autonomous Driving
09.Depth Camera Course
  • 01.Dabai_DCW2 Camera Introduction
  • 02.Nuwa-HP60C Camera Introduction
  • 03.Depth Pseudo-Color Image
  • 04.Depth Camera Distance Measurement
  • 05.Wood Block Volume Measurement
  • 06.Edge Detection
  • 07.YOLOv11 Object Detection
  • 08.YOLOv11 Object Tracking
  • 09.Color Following
  • 10.Face Following
  • 11.QR Code Following
  • 12.Machine Code Following
  • 13.KCF Object Tracking
  • 14.QR Code Motion Control
  • 15.AR Vision
10.Mediapipe Visual Course
  • 01.Hand Detection
  • 02.Posture Detection
  • 03.Overall Detection
  • 04.Facial Landmark Detection
  • 05.3D Object Recognition
  • 06.Face Detection
  • 07.Gesture Recognition
  • 08.Face Special Effects
  • 09.Brush
  • 10.Finger Control
  • 11.Palm Target Positioning
  • 12.Fingertip Trajectory Recognition
  • 13.Gesture Following
  • 14.Posture Following
  • 15.Gesture Motion Control
11.Multi-vehicle Course
  • 1.Multi-vehicle Control
  • 2.Multi-vehicle Navigation
  • 3.Multi-vehicle Platoon
12.AI Large Model Basic Course
Offline large model (Text Interaction)
  • 0. AI Large Model Mirroring Explanation
  • 1. Deployment of large-scale AI models
  • 2. Installation of the large model dialogue platform
  • 3. Meta AI Llama 3.2 model
  • 4. Alibaba Cloud Qwen3 Model
  • 5. DeepSeek DeepSeek-R1 model
  • 6. Microsoft Phi-4 mini model
  • 7. Alibaba Cloud Qwen2.5vl Visual Multimodal Large Model
  • 8. Google Gemma3 Visual Multimodal Large Model
  • 9. Llava Visual Multimodal Large Model
  • 10. Multimodal Visual Understanding Applications
  • 11.MiniCPM-V Visual Multimodal Large Model
  • 12. Multimodal Text-Based Image Application
  • 13. Multimodal Video Analysis Application
  • 14. Multimodal table scanning application
  • 15. Multimodal visual positioning applications
  • 16. Multimodal Autonomous Agent Application
Offline large model (Voice Interaction)
  • 0. Voice Interaction Hardware Connection (Must Read)
  • 1. Offline speech-to-text (ASR)
  • 2. Offline Text-to-Speech (TTS)
  • 3. AI large model voice interaction
  • 4. Multimodal visual understanding and voice interaction
  • 5. Multimodal Text-Based Image Application
  • 6. Multimodal Video Analysis Application
  • 7. Multimodal visual positioning applications
  • 8. Multimodal table scanning application
  • 9. Multimodal Autonomous Agent Applications
  • 10. AI large model offline voice assistant
Online large model (Text Interaction)
  • 1. OpenRouter Large Model API Aggregation Platform
  • 2. Multimodal visual understanding applications
  • 3. Multimodal visual positioning applications
  • 4. Multimodal table scanning application
  • 5. Multimodal Autonomous Agent Applications
Online large model (Voice Interaction)
  • 0. Voice Interaction Hardware Connection (Must Read)
  • 1. Online speech-to-text (ASR)
  • 2. Online Text-to-Speech (TTS)
  • 3. AI large model voice interaction
  • 4. Multimodal visual and voice interaction
  • 5. Multimodal visual positioning applications
  • 6. Multimodal table scanning application
  • 7. Multimodal Autonomous Agent Applications
  • 8. AI large model online voice assistant
13.Control Board Course
1.Development environment setup
  • 1.Introduction to the Control Board
  • 2.Set up the STM32CUBEIDE development environment
  • 3.Burning STM32 firmware using SWD
  • 4.Burning STM32 firmware using serial port
  • 5.Compile the microros driver library
  • 6.Install and start the microros agent
  • 7.Import Project
2.Control board STM32 basic routine
  • 1.Turn on the LED light
  • 2.Button functions
  • 3.Drive the buzzer
  • 4.Serial communication
  • 5.Battery voltage detection
  • 6.Driving PWM Servo
  • 7.Drive motor
  • 8.Read motor encoder data
  • 9.PID control of motor speed
  • 10.Robot kinematics analysis theory
  • 11.Read IMU data
  • 12.Read Lidar data
  • 13.Flash access data
  • 14.Driving OLED Displays
  • 15.Driving RGB light strip
  • 16.SBUS model aircraft remote control
  • 17.USB controller remote control
  • 18.CAN bus communication
3.Control board micro_ros basic routine
  • 1.Post a topic
  • 2.Subscribe to a topic
  • 3.Multi-topic subscription and publishing
  • 4.Subscribe to the buzzer topic
  • 5.Subscribe to the bus servo topic
  • 6.Subscribe to the rate control topic
  • 7.Release Speed Topic
  • 8.Publish IMU data topic
  • 9.Publish radar data topic
14.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
15.YOLOv11 Development (ORIN)
  • 1.YOLO environment construction
  • 2.CLI use
  • 3.Object detection
  • 4.Instance segmentation
  • 5.Pose estimation
  • 6.Image classification
  • 7.Oriented object detection
  • 8.Model conversion
  • 9.Dataset annotation
  • 10.Model Training_Conversion
  • 11.Model prediction
16.YOLOv11 Development(RDKX5)
  • 1.YOLO environment construction
  • 2.CLI use
  • 3.Object detection
  • 4.Instance segmentation
  • 5.Pose estimation
  • 6.Image classification
  • 7.Oriented object detection
  • 8.Model prediction
  • 9.Model Quantization
17.YOLOv11 Development (RPI)
  • 1.YOLO environment construction
  • 2.CLI use
  • 3.Object detection
  • 4.Instance segmentation
  • 5.Pose estimation
  • 6.Image classification
  • 7.Oriented object detection
  • 8.Model conversion
  • 9.Model prediction
18.Linux Operating System
  • 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
19.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
20.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
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
Download
  • Mapping_APP(iOS_Android)
  • MainBoard_AI_Pure_System
  • 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 repository

07.Vehicle Centerline Calibration

Vehicle Centerline Calibration

Vehicle Centerline Calibration1. Course Content2. Run Example Program3. Calibrate Vehicle Body Centerline4. Calibrate Lane Reference Lines4.1 Calibrate Left Lane Reference Line 4.2 Calibrate Right Lane Reference Line 5. Source Code Analysis5.1 Calibration Parameter File5.2 Calibration Program

1. Course Content

  1. Start the example calibration program to calibrate the vehicle body centerline and the reference lines for left and right lane lines in the camera perspective.

 

[!NOTE]

  • This calibration tutorial is only for users who are using the autonomous driving function for the first time to calibrate according to their camera model.
  • The visual autonomous driving function uses the camera's RGB image and does not rely on depth information.
  • ROSMASTER-M3 vehicle can be optionally equipped with two depth cameras. Due to the different positions of the RGB cameras of the two depth cameras, using different cameras will result in different positions of the vehicle body centerline in the camera perspective, so it is necessary to calibrate the vehicle body's centerline in different camera perspectives.

 

  • Angstrong Nuwa-HP60C

image-20251202141642457

 

  • Orbbec DaBai DCW2

image-20251202141510736

 

2. Run Example Program

  • Start camera node
ros2 launch m3_bringup bringup_camera.launch.py 

[!IMPORTANT]

If you have not set the camera's CAMERA_TYPE environment variable, please first set the camera environment variable according to this chapter's tutorial 01-Site Layout and Precautions

image-20251119093301310

 

  • Start centerline calibration program
xxxxxxxxxx
ros2 run auto_drive cali_midline

image-20251202154555620

 

3. Calibrate Vehicle Body Centerline

  • Adjust the camera to normal use position (camera facing forward, avoid camera angle being too tilted up or down)

image-20251202150228386

 

  • Then find any reference line (any relatively straight line will work, here we use the tile grout line as reference), align the vehicle body center with the reference line

image-20251202154709656

 

  • In the camera image, we can see the reference line (tile grout line), which is the position of the vehicle body's centerline in the current camera perspective. The current mode in the upper left corner shows the current calibration mode, midline_points indicates calibrating the vehicle body centerline.

[!NOTE]

Different cameras will show differences in the vehicle body centerline due to different camera positions. It can be found that the vehicle body centerline is not completely vertical in the camera perspective, but is actually a diagonal line.

image-20251202155206378

 

  • Use the mouse to select the start and end points of the centerline in sequence. Select any two points from bottom to top on the reference line. The length does not need to be considered, as it can be adjusted through parameters later. After selection is completed, the terminal will print the coordinates of the mouse-selected start and end points.

image-20251202160043400

 

  • Then press the S key on the keyboard to save. The terminal will prompt the file location where the parameters are saved.

[!CAUTION]

  • The file save path prompted by the terminal ~/yahboomM3_ws/user_ws/install/m3_bringup/share/m3_bringup/config/auto_drive/midline_points.yaml is the install installation directory of the m3_bringup package.
  • However, the m3_bringup package uses colcon build --symlink-install for symbolic link compilation, so the actual save path of the parameters is the source code path of the m3_bringup package: ~/yahboomM3_ws/user_ws/src/m3_bringup/config/auto_drive/midline_points.yaml

image-20251202160307849

 

  • If you are not satisfied with the calibration result or clicked by mistake, you can press the R key on the keyboard to reset the calibration state and recalibrate.

image-20251202160508901

 

4. Calibrate Lane Reference Lines

  • Place the vehicle in the lane of the sandbox map

    • The vehicle body centerline should be as close as possible to the centerline position of the lane
    • The distance between the vehicle body and the left and right lane lines should be as equal as possible.

image-20251202162040819

 

4.1 Calibrate Left Lane Reference Line

  • Click on the title of cal_midline, then press the L key on the keyboard to switch to leftline_points calibration mode

image-20251202163136063

 

  • The calibration method is similar to before. Select the start and end points on the inner side of the left lane line in sequence, then click the S key to save. The terminal will print prompt information.

image-20251202163726853

 

4.2 Calibrate Right Lane Reference Line

  • First press the R key on the keyboard to reset the calibration state, then press the K key to enter rightline_points calibration mode

image-20251202165225772

 

  • The calibration method is similar to before. Select the start and end points on the inner side of the right lane line in sequence, then click the S key to save. The terminal will print prompt information

image-20251202165457428

 

[!TIP]

  • It can be found that when the vehicle is in the middle of the lane, the left and right lane lines in the camera perspective are actually two line segments extending toward the inside of the lane, and in different camera perspectives, the inclination degree of the lane lines will also be different.

 

5. Source Code Analysis

5.1 Calibration Parameter File

  • All calibrated parameters are saved in the midline_points.yaml parameter file of the m3_bringup package. The file path is:
xxxxxxxxxx
~/yahboomM3_ws/user_ws/src/m3_bringup/config/auto_drive/midline_points.yaml

 

  • The midline_points field is the data of the vehicle body centerline
  • The leftline_points field is the left lane line reference line in the camera perspective
  • The rightline_points field is the right lane line reference line in the camera perspective
  • The midline_length field is the length of the vehicle body centerline (generally use the default value, parameter adjustment will be explained in later tutorials)
​x
midline_points:
  start_point:
    x: 338
    y: 473
  end_point:
    x: 333
    y: 334
leftline_points:
  start_point:
    x: 8
    y: 381
  end_point:
    x: 177
    y: 290
rightline_points:
  start_point:
    x: 632
    y: 396
  end_point:
    x: 507
    y: 324
  midline_length: 115
​

 

5.2 Calibration Program

  • The calibration program is in the cali_midline.py program file of the auto_drive package. The file path is:
xxxxxxxxxx
~/yahboomM3_ws/code_ws/src/auto_drive/auto_drive/cali_midline.py

 

  • The core program is in the Cali_Midline class
  1. Receive RGB camera images published by ROS topics;
  2. Three calibration modes: "left line / middle line / right line" (default is middle line);
  3. Mouse interaction calibration: select 2 endpoints through left mouse button clicks, automatically draw line segments;
  4. Real-time display of selected points, line segments, and current calibration mode;
  5. Data persistence: save calibrated line segment endpoints to YAML file, while preserving other existing configurations in the file;
  6. Support keyboard shortcuts for reset selection, switch modes, and save data.
  • Node initialization: init
  • Receive images, format conversion, visualization drawing, keyboard interaction: image_callback
  • Capture left mouse button clicks, collect line segment endpoints: mouse_callback
  • Validate and save calibration data to YAML file: save_to_yaml
xxxxxxxxxx
class Cali_Midline(Node):
    def __init__(self):
        super().__init__('cali_midline')
        rgb_topic=get_rgb_topic()
        self.declare_parameter("config_file", os.path.join(get_package_share_directory("m3_bringup"), 'config','auto_drive',"midline_points.yaml"))
        self.config_file = self.get_parameter("config_file").get_parameter_value().string_value
        print(Fore.GREEN+self.config_file+Fore.RESET)
        
        # ros communication
        self.subscription = self.create_subscription(Image, rgb_topic, self.image_callback, 5)
        self.bridge = CvBridge()
​
        self.points = []
        self.line_drawn = False
        self.line_type = "midline_points"  
​
        cv2.namedWindow("cali_midline")
        cv2.setMouseCallback("cali_midline", self.mouse_callback)
        self.get_logger().info('open the cali_midline config file:'+Fore.GREEN+"cali_midline started."+Fore.RESET)
        self.get_logger().info('Press L for left line, M for middle line, R for right line')
​
    def image_callback(self, msg):
        # Convert ROS images to OpenCV format
        cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
        for (x, y) in self.points:
            cv2.circle(cv_image, (x, y), 5, (0, 255, 0), -1)  # Green dots
            cv2.putText(cv_image, f"({x},{y})", (x+10, y), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
​
        if self.line_drawn and len(self.points) == 2:
            cv2.line(cv_image, self.points[0], self.points[1], (0, 0, 255), 2)  
​
​
        cv2.putText(cv_image, f"current mode: {self.line_type}", (10, 30),
                   cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
​
        cv2.imshow("cali_midline", cv_image)
        key = cv2.waitKey(1) & 0xFF
​
        if key == ord('r'):
            self.points = []
            self.line_drawn = False
            self.get_logger().info(Fore.YELLOW+"Reset!, you can select the line segment again."+Fore.RESET)
        elif key == ord('s'):
            self.save_to_yaml(self.config_file)
        elif key == ord('l') or key == ord('L'):
            self.line_type = "leftline_points"
            self.get_logger().info(Fore.CYAN+"Switched to left line calibration mode."+Fore.RESET)
        elif key == ord('m') or key == ord('M'):
            self.line_type = "midline_points"
            self.get_logger().info(Fore.CYAN+"Switched to middle line calibration mode."+Fore.RESET)
        elif key == ord('k') or key == ord('K'):
            self.line_type = "rightline_points"
            self.get_logger().info(Fore.CYAN+"Switched to right line calibration mode."+Fore.RESET)
​
    def mouse_callback(self, event, x, y, flags, param):
        """Mouse callback function to handle click events"""
        if event == cv2.EVENT_LBUTTONDOWN:
            if len(self.points) < 2:
                self.points.append((x, y))
                self.get_logger().info(f"Selected point: ({x}, {y})")
                # Draw a straight line after selecting both points.
                if len(self.points) == 2:
                    self.line_drawn = True
​
    def save_to_yaml(self, file_path):
        """Save the endpoints of the line segment to a YAML file."""
        if len(self.points) != 2:
            self.get_logger().info(Fore.RED+"Please select two points to define the line segment!"+Fore.RESET)
            return
        if os.path.exists(file_path):
            with open(file_path, 'r') as f:
                data = yaml.safe_load(f) or {} 
        else:
            data = {}
​
​
        if self.line_type not in data:
            data[self.line_type] = {}
        data[self.line_type]["start_point"] = {"x": self.points[0][0], "y": self.points[0][1]}
        data[self.line_type]["end_point"] = {"x": self.points[1][0], "y": self.points[1][1]}
        
​
        with open(file_path, 'w') as f:
            yaml.dump(data, f, sort_keys=False, default_flow_style=False, allow_unicode=True)
        self.get_logger().info(Fore.GREEN+f"Saved {self.line_type} to YAML file :{file_path}"+Fore.RESET)

 

Model Format Conversion
Lane Detection

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