yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
MicroROS V2 Robot Car📖
01.Introduction
  • 0.Unboxing Video
  • 1. Readme Learning Route
  • 2. Must Read Before Use
  • 3. Introduction to MicroROS V2 Control Board
  • 4. Introduction to LiDAR
  • 5. Introduction to ESP32 Camera Module
  • 6. FAQ
  • 7. About Charging
02.Assembly course
  • Assembly Video
03.Preparation
  • 1. Quickly Start
  • 2. Write Firmware
  • 3. Install VM and Start System
  • 4. Configure VM and Connect Robot
  • 5. Connect to MicroROS Agent
04.Quick start control course
  • 1. VM Keyboard Remote Control
  • 2. VM Handle Remote Control
  • 3. USB Handle Control
05.Robot control course
  • 1. Robot Information Release
  • 2. Robot Keyboard Control
  • 3. Robot Handle Control
  • 4. Robot State Estimation
  • 5. Linear Speed Calibration
  • 6. Angular Velocity Calibration
  • 7. Robot URDF Model
06.Lidar course
  • 1. Precautions for LiDAR Mapping and Navigation
  • 2. Lidar Avoid
  • 3. Lidar Following
  • 4. Lidar Guard
  • 5. Lidar Patrol
  • 6. Gmapping Mapping
  • 7. Cartographer Mapping
  • 8. Cartographer Quickly Repositioning Navigation
  • 9. Slam Toolx Mapping
  • 10. Navigation2 Single Point Navigation
  • 11. Navigation2 Multi Point Navigation
  • 12. Ros Robot App Mapping And Navigation
07.Road network planning
  • 1. Introduction to Road Network Planning and Quick Start
  • 2. Build a Pose Map
  • 3. Road Network Annotation
  • 4. Planning and Navigation Between Road Networks
  • 5. Road Network Navigation in Any Pose
  • 6. Path Replanning
08.Vision basic course
OpenCV Image Processing
  • 1. Introduction to OpenCV Source CV
  • 2. Open Source CV Geometric Transformation
  • 3. Open Source CV Image Processing and Drawing Text Line Segments
  • 4. Open Source CV Image Beautification
09.Visual General Course (For Standard&Superior version)
4. Yolov11&26 Visual Recognition
  • 1. YOLO Environment Setup
  • 2. CLI Usage
  • 3. Object Detection
  • 4. Instance Segmentation
  • 5. Pose Estimation
  • 6. Image Classification
  • 7. Oriented Bounding Boxes Object Detection
  • 8. Model Prediction
1. ESP32 Visual Recognition Module Configuration
  • 1. Serial Port Configuration WiFi Instructions
  • 2. Use ESP32 Camera Module in Robot Car
  • 3. Servo PTZ Calibration
2. OpenCV Visual Recognition
  • 1. Human Pose Estimation
  • 2. Object Detection
  • 3. AR Vision
  • 4. QR Code
  • 5. Color Recognition
  • 6. Facial Recognition
  • 7. AprilTag Machine Code Recognition
3. Mediapipe Visual Recognition
  • 1. Hand Detection
  • 2. Pose Detection
  • 3. Holistic Detection
  • 4. Facial Detection
  • 5. Facial Recognition
  • 6. Facial Special Effects
  • 7. 3D Object Recognition
  • 8. Brush
  • 9. Gesture Recognition
  • 10. Palm Target Localization
  • 11. Fingertip Trajectory Recognition
10.Visual Advanced Course (Just for Standard version)
1. Visual Control
  • 1. QR Code Recognition Control Action
  • 2. AprilTag Control Car Action Group
  • 3. Gesture Control Car Action Group
  • 4. Visual Line Tracking
2. Visual Tracking
  • 1. Color Tracking
  • 2. Facial Tracking
  • 3. QR Code Tracking
  • 4. Object Recognition And Tracking
  • 5. Mediapipe Palm Tracking
  • 6. Mediapipe Gesture Tracking
  • 7. Mediapipe Human Pose Tracking
  • 8. KCF Object Tracking
  • 9. AprilTag Machine Code Tracking
3. Visual Following
  • 1. Color Follow
  • 2. Face Follow
  • 3. QR Code Follow
  • 4. Mediapipe Palm Follow
  • 5. Mediapipe Gesture Follow
  • 6. Mediapipe Human Posture Follow
  • 7. AprilTag Machine Code Follow
  • 8. Object Follow
11.Visual Advanced Course (Just for Superior version)
1. Visual Control
  • 1. QR Code Recognition Control Action
  • 2. AprilTag Control Car Action Group
  • 3. Gesture Control Car Action Group
  • 4. Visual Line Tracking
2. Visual Tracking
  • 1. Color Tracking
  • 2. Facial Tracking
  • 3. QR Code Tracking
  • 4. YOLO Object Recognition and Tracking
  • 5. Mediapipe Palm Tracking
  • 6. Mediapipe Gesture Tracking
  • 7. Mediapipe Human Pose Tracking
  • 8. KCF Object Tracking
  • 9. AprilTag Machine Code Tracking
3. Visual Follow
  • 1. Color Follow
  • 2. Face Follow
  • 3. QR Code Follow
  • 4. Mediapipe Palm Follow
  • 5. Mediapipe Gesture Follow
  • 6. Mediapipe Human Pose Follow
  • 7. AprilTag Machine Code Follow
  • 8. Object Follow
12.AI Large Model Basic and Applications Course
1. AI Large Model Preparation
  • 1.AI Large Model Preparation
2. AI Large Model Basic Course
  • 1. AI Large Model Types and Principles
  • 2. RAG Retrieval Augmented and Training Samples
  • 3. Embodied Intelligent System Architecture
  • 4. Embodied Intelligence Core Source Code
3. AI Large Model Development
  • 1. Register Model Service Account
  • 2. Configure API KEY
  • 3. Dify Introduction
  • 4. Dify Basic Features
  • 5. RAG Knowledge Base Deployment
  • 6. AI Application Development Chatbot
  • 7. RAG Knowledge Base and Chatbot
  • 8. AI Agent Workflow
4. AI Large Model (Text Version)
  • 1. Semantic Understanding and Instruction Following
  • 2. Multimodal Visual Understanding
  • 3. Multimodal Visual Understanding + Basic Control
  • 4. Multimodal Visual Understanding + Object Following
  • 5. Multimodal Visual Understanding + Visual Line Following
  • 6. Multimodal Visual Understanding + SLAM Navigation
  • 7. Multimodal Visual Understanding + SLAM Navigation + Visual Line Following
  • 8. Multimodal Visual Understanding + SLAM Navigation + Object Following
  • 9. Intent Inference + Multimodal Visual Understanding + SLAM Navigation
13.Openclaw Basics Course
  • 1. Openclaw Introduction
  • 2. Openclaw Core Concepts
  • 3. Openclaw Api-Key Configuration
  • 4. Openclaw Switching Models
  • 5. Openclaw System Prompt
  • 6. Openclaw Common CLI Command
14. Openclaw Interaction Course
  • 1. Openclaw Webchat Interaction
  • 2. Openclaw Tui Interaction
  • 3. Openclaw Whatsapp Interaction
15.Openclaw Development Course
  • 1. Openclaw Robot Mcp Service Integration
  • 2. Robot CLI Command Tools
  • 3. Robot-Control Plugin Tools
  • 4. Openclaw Skills Development
  • 5. Openclaw Scheduled Tasks
  • 6. Openclaw Multi Agent System
  • 7. Openclaw Proactive Interaction
  • 8. Openclaw Vector Memory
16.Openclaw Embodied Intelligence Course
  • 1. OpenClaw Natural Interaction + Basic Control
  • 2. OpenClaw Natural Interaction + Slam Navigation
  • 3. OpenClaw Natural Interaction + Multimodal Visual Understand
  • 4. OpenClaw Natural Interaction + Multimodal Visual Understand + Slam Navigation + Visual Follow
  • 5. OpenClaw Natural Interaction + Multimodal Visual Understand + Slam Navigation + Visual Track
17.Multi-machine Course
  • 1. Multi Machine Handle Control
  • 2. Multi Machine Keyboard Control
  • 3. Multi Machine Navigation
18.MicroROS-V2 Control Board Development Environment
  • 1. Set Up the ESP32-IDF Development Environment
  • 2. ESP32-IDF Configuration Tool
  • 3. ESP Flash Tool Flashing Firmware
  • 4. Install ESP32 Microros Components
  • 5. Install And Start Microros Agent
19.MicroROS-V2 Control Board ESP32 Basic Course
  • 1. Led Light Up
  • 2. Button Function
  • 3. Drive Buzzer
  • 4. Oled
  • 5. Usb Host Function
  • 6. Serial Communication
  • 7. Battery Voltage Detection
  • 8. Drive Pwm Servo
  • 9. Drive Motors
  • 10. Read Motor Encoder Data
  • 11. Pid Motor Speed Control
  • 12. Robot Kinematics Analysis Theory
  • 13. Read Imu Data
  • 14. Read Lidar Data
  • 15. Flash Data Storage
  • 16. Custom Partition Table
  • 17. Bluetooth Communication
  • 18. Wifi Connection
  • 19. ESP32 Visual Recognition Module
20.MicroROS-V2 Control Board Micro_ros Basic Course
  • 1. Publish Topics
  • 2. Subscribe To Topics
  • 3. Multi Topic Subscription And Publishing
  • 4. Subscribe To Buzzer Topic
  • 5. Subscribe To Pwm Servo Topic
  • 6. Subscribe To Speed Control Topic
  • 7. Publish Odometry Topic
  • 8. Publish Imu Data Topic
  • 9. Publish Lidar Data Topic
21. 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
22.Docker Course
  • 1.Docker overview and docker installation
  • 2.Common commands for docker image containers
  • 3.Docker images deeply understand and publish images
23.ROS 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)
  • Code
  • Software_Tools
  • VM_System_File
  • 3D_Model_File
  • ESP32_Firmware
  • Dify LLM Base
  • Instruction_Manual
  • VMware
Download ZIP

Welcome to MicroROS V2 Robot Car repository

7. AprilTag Machine Code Follow

AprilTag Machine Code Follow (PTZ)

1. Experiment Objective

PTZ pan-tilt + car body collaborative AprilTag following — dt_apriltags detects the AprilTag, the 3D pose Z-axis enables precise distance following, the pan-tilt locks onto the Tag center with PD, and the body homes in coordination.

2. Experiment Principle

1. Key Terms

TermDescription
Visual FollowingPan-tilt tracking + coordinated body movement
AprilTagA high-precision visual fiducial marker; the dt_apriltags detector supports 6-DOF pose estimation
3D pose distance followingPD distance control based on pose_t[2] (Z-axis depth, in meters), more precise than pixel size
Error sharing / angular-rate feedforwardThe core mechanisms of the three-layer coordinated control
Lost-frame toleranceThe body is frozen only after N consecutive lost frames (default 5 frames)

2. Technical Architecture

Node chain:

State estimation layer → april_tag_follow_ptz_node → /cmd_ptz_angle (pan-tilt angle) + /cmd_vel (body velocity)

Three-layer coordinated control:

  • PTZ PD control (30 Hz): Tag center pixel error → PD (pd_kp=1.2, pd_kd=0.25) → step limiting (±1.2°) → angular-rate feedforward compensation (body_ff_gain=1.3) → /cmd_ptz_angle. Deadband 50 px (larger; AprilTag detection is stable and needs no fine-tuning).
  • Body angular-velocity PD control (10 Hz): pan-tilt horizontal angle × body_share (0.5) → error shared with the body → PD (angular_kp=0.2, angular_kd=0.06) → limiting ±0.12 rad/s.
  • 3D distance-follow PD control (10 Hz): deviation between the Tag's Z-axis depth and target_tag_pose_z (0.35 m) → PD (distance_kp=0.6, distance_kd=0.2, the highest gains — meter-level precision) → limiting ±0.12 m/s.

Multiple-Tag selection and visualization:

tag_select_strategy=largest selects the primary Tag. On-screen overlay: camera coordinate axes (X/Y/Z), the primary Tag as a purple polygon + tag_id, and the other Tags as green polygons.

3. Core Topics Quick Reference

Firmware Uplink (ESP32 → ROS2):

Topic NameTypeQoSDescription
/camera/image_rawsensor_msgs/ImageKEEP_LAST 1, BEST_EFFORT, VOLATILERaw image input from the ESP32 camera

Firmware Downlink (ROS2 → ESP32 via micro_ros_agent):

Topic NameTypeQoSDescription
/cmd_ptz_anglegeometry_msgs/Vector3Default (KEEP_LAST 10)PTZ pan-tilt angle command (x: horizontal, y: tilt)
/cmd_velgeometry_msgs/TwistDefault (KEEP_LAST 10)Body velocity command (linear.x: forward/back, angular.z: rotation)

ROS2 Internal (published by the state estimation layer):

Topic NameTypeQoSDescription
/diagnosticsdiagnostic_msgs/DiagnosticArrayDefaultSummary of each node's running status

3. Experiment Steps

1. Hardware Preparation

HardwareRequirement
PTZ version✅
No-PTZ version❌
Required peripheralsESP32 camera (pan-tilt) + PTZ servo + an AprilTag (0.048 m size recommended)

2. Start Agent + Camera + Joint Model (Terminal 1)

ros2 launch microros_v2_bringup car_base.launch.py

image-20260728161615714

3. Start AprilTag Follow (Terminal 2)

Open a new terminal and run:

xxxxxxxxxx
ros2 launch microros_v2_ptz_visual_control_pkg april_tag_follow_ptz.launch.py

image-20260728195056473

After the node starts, the camera intrinsics (camera.yaml) are loaded automatically, and the Space key toggles the idle/tracking state. Without a calibration file, it automatically degrades to pixel-size distance following.

4. Operation Instructions

Interaction:

KeyFunction
Spaceidle ↔ tracking toggle
i / IForce idle
q / Q / ESCExit the program

Workflow:

  1. After the program starts, it is in the idle state by default; AprilTag detection is already running but outputs no control commands
  2. Place the AprilTag within the camera's field of view, then press Space to enter the tracking state
  3. The pan-tilt locks onto the Tag center, the body turns to home, and a distance of about 0.35 m is maintained automatically
  4. Press i to return to idle, press q to exit

Safety and Edge Cases:

  • dt_apriltags unavailable: an ImportError is logged; the node does not crash
  • Camera YAML unavailable: pose estimation is disabled; only 2D pixel tracking and distance following are performed (degraded mode)
  • No Tag ≥5 frames → freeze the body (lost_frame_threshold=5)
  • Pan-tilt limiting: horizontal [-90°, 90°], tilt [-90°, 20°]
  • Velocity limiting: angular velocity ±0.12 rad/s, linear velocity ±0.12 m/s
  • quad_decimate ≥1.0, validated at runtime

5. How to Stop

Press Ctrl+C to stop Terminal 2 → Terminal 1 in order.

4. Experiment Observations

  • idle: AprilTag detection runs but outputs no control; the frame shows the Tag border and id
  • tracking + Tag: The pan-tilt locks onto the Tag center, the body turns to home, and 3D distance following maintains a depth of about 0.35 m
  • With camera calibration: the pose X/Y/Z is displayed precisely, and distance control is based on the meter-level Z axis
  • Without camera calibration: degrades to pixel-size distance following (based on the Tag area)
  • Tag moves forward/back: the car adjusts forward/back to maintain a 0.35 m ± 0.06 m depth
  • Multiple Tags: the primary Tag is marked purple + the others green, selected by the largest strategy
  • Tag gone ≥5 frames: the body freezes

5. Program Analysis

Source code paths:

  • Launch file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/launch/april_tag_follow_ptz.launch.py
  • Node file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/april_tag_follow_ptz_node.py

1. Core Node Analysis

AprilTagFollowPtzNode inherits from rclpy.node.Node; detection and display are done in the image callback, with two independent control timers for PTZ/body. It supports dynamic parameter hot-reloading and rqt dynamic tuning.

Node initialization — __init__:

​x
# Source file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/april_tag_follow_ptz_node.py
​
class AprilTagFollowPtzNode(Node):
​
    def __init__(self) -> None:
        super().__init__(DEFAULT_NODE_NAME)
        self._tgt_lock = threading.Lock()
        self._latest_frame: Optional[np.ndarray] = None
​
        self._state = STATE_IDLE
        self._shutdown = False
​
        self._has_target = False
        self._lost_frames = 0
        self._tag_id = -1
        self._target_x: Optional[float] = None
        self._target_y: Optional[float] = None
        self._tag_pose_x: Optional[float] = None
        self._tag_pose_y: Optional[float] = None
        self._tag_pose_z: Optional[float] = None
        self._tag_corners: List[Tuple[int, int]] = []
​
        self._h_deg = 0.0
        self._p_deg = 0.0
        self._prev_err_x = 0.0
        self._prev_err_y = 0.0
        self._prev_ctrl_t = 0.0
        self._last_sx = 0.0
        self._last_sy = 0.0
​
        self._prev_s1 = 0.0
        self._prev_s1_eff = 0.0
        self._prev_body_t = 0.0
        self._last_body_az = 0.0
​
        self._prev_z_err = 0.0
        self._prev_linear_t = 0.0
​
        self._fps = 0.0
        self._fps_n = 0
        self._fps_t = time.perf_counter()
        self._win_ok = False
        self._last_print_t = 0.0
​
        self._detector = None
        self._camera_params: Optional[Tuple[float, float, float, float]] = None
​
        self._declare_params()
        self._load_params()
        self._h_deg = self._init_h_deg
        self._p_deg = self._init_p_deg
        self._init_detector()
​
        video_qos = QoSProfile(
            history=QoSHistoryPolicy.KEEP_LAST,
            depth=1,
            reliability=QoSReliabilityPolicy.BEST_EFFORT,
            durability=QoSDurabilityPolicy.VOLATILE,
        )
​
        self._sub = self.create_subscription(
            Image, self._img_topic, self._on_image, video_qos
        )
        self._ptz_pub = self.create_publisher(Vector3, self._ptz_topic, 10)
        self._cmd_pub = self.create_publisher(Twist, self._cmd_topic, 10)
​
        self._ptz_timer = self.create_timer(
            1.0 / max(self._ptz_rate, MINIMUM_TIMER_RATE_HZ), self._ptz_tick
        )
        self._body_timer = None
        self._rebuild_body_timer(False)
        self._key_timer = None
        if self._show_win:
            self._init_win()
            self._key_timer = self.create_timer(0.05, self._poll_keys)
​
        self._init_ptz_timer = None
        self._init_ptz_remain = 0
        if self._pub_init:
            self._start_init_ptz()
​
        self._param_cb = self.add_on_set_parameters_callback(self._on_param_update)
        self.get_logger().info(
            f"AprilTag follow PTZ+body started. SPACE=toggle, i=idle, q=quit. "
            f"ptz={self._ptz_rate:.0f}Hz body={self._body_rate:.0f}Hz "
            f"family={self._tag_family} tag_size={self._tag_size:.3f}m"
        )

Distance-follow core — _body_tick (3D Z-axis PD control):

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/april_tag_follow_ptz_node.py
​
    def _body_tick(self) -> None:
        if self._state != STATE_TRACKING:
            self._prev_s1 = 0.0
            self._prev_s1_eff = 0.0
            self._prev_body_t = 0.0
            self._pub_zero_cmd()
            return
​
        with self._tgt_lock:
            ok = self._has_target
            pose_z = self._tag_pose_z
        if not ok:
            self._prev_s1 = 0.0
            self._prev_s1_eff = 0.0
            self._prev_body_t = 0.0
            self._pub_zero_cmd()
            return
​
        s1 = self._h_deg
        if abs(s1) < self._ang_tol:
            s1 = 0.0
        s1_eff = s1 * self._body_share
​
        n = time.perf_counter()
        dt = n - self._prev_body_t if self._prev_body_t > 0.0 else 1.0 / max(self._body_rate, MINIMUM_TIMER_RATE_HZ)
        dt = max(dt, 1e-3)
        ds1_eff = (s1_eff - self._prev_s1_eff) / dt
        az = self._ang_kp * s1_eff + self._ang_kd * ds1_eff
        self._prev_s1 = s1
        self._prev_s1_eff = s1_eff
        self._prev_body_t = n
​
        if self._rev_body:
            az = -az
        az = clamp(az, -self._max_az, self._max_az)
        self._last_body_az = az
​
        if self._enable_dist and pose_z is not None:
            z_err = pose_z - self._target_pose_z
            if abs(z_err) < self._dist_tol_z:
                z_err = 0.0
            dt_l = n - self._prev_linear_t if self._prev_linear_t > 0.0 else 1.0 / max(self._body_rate, MINIMUM_TIMER_RATE_HZ)
            dt_l = max(dt_l, 1e-3)
            dz = (z_err - self._prev_z_err) / dt_l
            lx = self._dist_kp * z_err + self._dist_kd * dz
            self._prev_z_err = z_err
            self._prev_linear_t = n
            if self._rev_linear:
                lx = -lx
            lx = clamp(lx, -self._max_lx, self._max_lx)
        else:
            self._prev_z_err = 0.0
            lx = 0.0
​
        tw = Twist()
        tw.angular.z = float(az)
        tw.linear.x = float(lx)
        self._cmd_pub.publish(tw)

The 3D distance-follow key line: z_err = pose_z - self._target_pose_z — the pose_t[2] (Z-axis depth, in meters) returned by the AprilTag pose estimation is used as the error input, and after PD computation the linear.x velocity is output. The distance_kp=0.6 / distance_kd=0.2 gains are significantly higher than the pixel-size scheme, because the meter-level error range is larger.

2. Key Parameters

Parameter definition files:

  • Launch file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/launch/april_tag_follow_ptz.launch.py
  • Node file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/april_tag_follow_ptz_node.py

Pan-tilt PTZ control parameters:

ParameterTypeDefault ValueDescription
pd_kpfloat1.2Pan-tilt PD proportional gain
pd_kdfloat0.25Pan-tilt PD derivative gain
ptz_control_ratefloat30.0 HzPan-tilt control rate (highest)
deadband_xfloat50.0 pxHorizontal deadband (larger; Tag detection is stable and needs no fine-tuning)
deadband_yfloat50.0 pxVertical deadband
max_ptz_stepfloat1.2°Maximum single step angle
ptz_step_smooth_alphafloat0.35Step smoothing coefficient
ptz_smooth_alphafloat0.85Angle output smoothing coefficient

Body control parameters:

ParameterTypeDefault ValueDescription
body_control_ratefloat10.0 HzBody control rate
angular_kpfloat0.2Body angular-velocity P gain
angular_kdfloat0.06Body angular-velocity D gain
body_sharefloat0.5Ratio of the pan-tilt error allocated to the body
body_ff_gainfloat1.3Angular-rate feedforward gain
max_angular_zfloat0.12 rad/sMaximum angular velocity

Distance-follow parameters (3D pose Z-axis):

ParameterTypeDefault ValueDescription
enable_distance_followbooltrueWhether to enable distance following
target_tag_pose_zfloat0.35 mDistance-follow target Z-axis depth
distance_kpfloat0.63D distance PD proportional gain (high gain)
distance_kdfloat0.23D distance PD derivative gain
max_linear_xfloat0.12 m/sMaximum linear velocity
distance_tolerance_pose_zfloat0.06 mDistance deadband

AprilTag detection parameters:

ParameterTypeDefault ValueDescription
tag_familystrtag36h11AprilTag tag family
tag_sizefloat0.048 mTag physical side length
quad_decimatefloat2.0Quad-tree downsampling factor (≥1.0)
tag_select_strategystrlargestMulti-Tag selection strategy (largest / smallest_id)
camera_yaml_pathstr.../config/camera.yamlCamera intrinsics file path
use_camera_yamlbooltrueWhether to load the camera calibration file

6. Frequently Asked Questions

ProblemCauseSolution
Inaccurate distance followingThe actual Tag size does not match the tag_size parameterVerify that the printed Tag size matches the parameter (default 0.048 m)
Pose jitterThe Tag is too small or the lighting is insufficientIncrease the Tag size and improve the lighting
Small Tag not detectedquad_decimate=2.0 downsampling too aggressiveReduce quad_decimate (e.g., 1.0)
dt_apriltags not installedMissing Python packagepip install dt-apriltags
Degraded to pixel followingThe camera calibration file camera.yaml does not existRun the camera calibration to generate the intrinsics file
Mediapipe Human Pose Follow
Object Follow

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
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文