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

6. Mediapipe Gesture Tracking

Mediapipe Gesture Tracking (PTZ)

1. Experiment Objective

The PTZ pan-tilt tracks the gesture position while recognizing the gesture class (finger-count code and gesture name) and displaying it in real time.

2. Experiment Principle

1. Key Terms

TermDescription
MediaPipe HandsGoogle's open-source hand detection and landmark localization framework; detects 21 hand landmarks and supports gesture classification
Landmark 5 (index finger MCP)The base metacarpophalangeal joint of the index finger; serves as the anchor for gesture tracking — the most stable position and suitable as the pan-tilt lock-on target
Gesture RecognitionInfers the gesture class (e.g., "Scissors", "OK") from the extension/bending state of the 5 fingers (fingersUp)
Visual TrackingDetects and continuously locks onto a target through a vision algorithm; only the pan-tilt follows, the car does not move
PTZ Pan-TiltA two-degree-of-freedom servo pan-tilt; s1 rotates horizontally and s2 tilts, controlled via the /cmd_ptz_angle topic
PD ControlProportional-derivative control; computes the pan-tilt angle step from the target offset and the offset change rate
DeadbandWhen the target offset is within the deadband pixel range, the pan-tilt does not move, avoiding continuous jitter caused by tiny errors

2. Technical Architecture

​x
ESP32 camera (firmware) → /camera/image_raw → gesture_tracker_ptz_node → /cmd_ptz_angle → firmware servo control
​
The state estimation layer (ekf_filter_node + camera_node) provides the image data stream

Node chain: state estimation (ekf_filter_node + camera_node) → gesture_tracker_ptz_node → /cmd_ptz_angle → firmware servo control

3. Core Topics Quick Reference

Firmware Uplink (data upstream):

Topic NameMessage TypeQoSDescription
/camera/image_rawsensor_msgs/ImageBEST_EFFORT, KEEP_LAST depth=1, VOLATILERaw image stream from the ESP32 camera

Firmware Downlink (command downstream):

Topic NameMessage TypeQoSDescription
/cmd_ptz_anglegeometry_msgs/Vector3RELIABLE, KEEP_LAST depth=10Pan-tilt angle command (x=horizontal angle, y=tilt angle, z=reserved)

3. Experiment Steps

1. Hardware Preparation

HardwareRequirement
PTZ version✅
No-PTZ version❌
Required peripheralsESP32 camera (pan-tilt) + PTZ servo

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

xxxxxxxxxx
ros2 launch microros_v2_bringup car_base.launch.py

image-20260728161615714

3. Start Gesture Tracking (Terminal 2)

xxxxxxxxxx
ros2 launch microros_v2_ptz_visual_control_pkg gesture_tracker_ptz.launch.py

After startup, the frame shows the idle state; palm detection and gesture recognition run normally but no pan-tilt control is output.

image-20260728191817345

4. Operation Instructions

1. Workflow

After startup, the node uses two independent timers: image processing (image_processing_rate_hz = 15 Hz) + pan-tilt control (control_rate_hz = 20 Hz). Minimal two-state machine: idle ↔ tracking.

(1) Image reception and preprocessing

Subscribes to /camera/image_raw (QoS: BEST_EFFORT, KEEP_LAST); the image callback converts and caches the raw Image. The image processing timer takes a copy of the latest frame, scales it to the processing resolution (processing_width×processing_height = 320×240), and flips/rotates as needed.

(2) MediaPipe palm detection + gesture recognition

Uses HandDetector (detectionCon=hand_detection_confidence=0.8) to detect the palm and extract:

  • The 21 hand landmark coordinates (lmList)
  • fingersUp(): a 5-bit finger extension state list, 0=bent / 1=extended
  • finger_count: the total number of extended fingers
  • get_gesture(): the gesture name (e.g., "Scissors", "OK", "Thumbs Up", etc.)
  • finger_code: the finger code string (e.g., "[0,1,1,0,0]")

(3) Tracking anchor extraction

Takes landmark 5 (index finger MCP joint) as the tracking target point. Draws the tracking point: a purple solid circle (radius 8 px) + a yellow hollow circle (radius 10 px) + the MediaPipe hand landmarks and connections.

(4) PD pan-tilt control (tracking + hand present + not a fist only)

Fixed-rate 20 Hz PD control: tracking point pixel coordinates → normalized error → PD step → limiting (±max_ptz_step=1.2°) → step smoothing (α=ptz_step_smooth_alpha=0.35) → direction reversal (horizontal not reversed, tilt reversed) → angle smoothing (α=ptz_smooth_alpha=0.85) → clamp the angle → publish.

When there is no hand or a fist (fc==0), no control is output, but the state is not changed and the PD history is not reset — tracking resumes seamlessly when the palm opens again.

(5) Gesture data display

The gesture name, finger code, and finger count are overlaid in real time at the top-left of the frame; "TRACK" is shown in the TRACKING state and "FIST" when a fist is detected.

2. Interaction

KeyFunctionDescription
Spaceidle ↔ trackingToggles between standby and tracking
i / IBack to idleStops tracking and pan-tilt control
q / Q / ESCExitForce-exits the node process with os._exit(0)

On-screen overlay: The debug window shows the state (idle/tracking), frame rate, gesture name, finger code, finger count (with the FIST marker), tracking point error H/V, PD parameters (kp/kd/deadband/step), pan-tilt angle, and control rate. A crosshair is drawn at the frame center + an orange deadband rectangle.

Optional legend: With overlay_show_legend=true, the "SPACE:toggle | i:idle | q:quit" key hint is shown.

3. Safety and Edge Cases

  • No hand/fist, no control: When there is no hand or a fist, the PD outputs nothing, but the state is not changed and the PD history is not reset, for a seamless handoff when tracking resumes
  • Gesture detection never changes the state: Only the Space and i keys switch states; the detection result only affects whether control is output
  • Pan-tilt angle limiting: Horizontal [-90°, 90°], tilt [-90°, 20°]
  • Deadband protection: The step is forced to zero when the tracking point offset is within the deadband (20 px)
  • Initial PTZ publish at startup: With publish_initial_ptz_command=true, the initial angle (0°, -45°) is published 20 times at 0.2 s intervals
  • Exit strategy: Press q/ESC to exit directly with os._exit(0)
  • Runtime parameter validation: Range checks cover all PD/angle/image parameters; illegal values are rejected; image_topic/ptz_command_topic/window_name require a node restart

5. How to Stop

Press Ctrl+C in sequence to stop the processes in the three terminals: Terminal 2 (gesture tracking) → Terminal 1 (chassis, agent, camera, and model).

4. Experiment Observations

  • idle state: The frame streams in real time; palm detection and gesture recognition run normally but no pan-tilt control is output, and the state is idle
  • tracking + hand present + fingers extended: The pan-tilt follows the index finger MCP joint with PD control, the MediaPipe landmarks and connections are overlaid, and the gesture name and finger code update in real time
  • tracking + fist: The frame shows "FIST", the pan-tilt stays still at its current position, and the PD history is kept; tracking resumes automatically when the palm opens again
  • tracking + palm moved out of frame: The gesture display changes to "None", the pan-tilt stays at its last position, and tracking resumes when the palm reappears
  • Palm within the deadband: The step is zeroed and the pan-tilt stays completely still without jitter
  • Gesture changes: The gesture name updates in real time when different gestures are made, and tracking is unaffected (gesture detection and pan-tilt control are fully decoupled)
  • Press i to return to idle: The pan-tilt stays at its current position; press Space to re-enter tracking

5. Program Analysis

Source code paths:

  • Launch file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/launch/gesture_tracker_ptz.launch.py
  • Node file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/gesture_tracker_ptz_node.py
  • Hand detection module: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/microros_v2_ptz_visual_control_pkg/hand_detector.py

1. Core Node Analysis

The node GestureTrackerPtzNode inherits from rclpy.node.Node and adds the full get_gesture() gesture classification logic on top of HandDetector, so it can recognize and display multiple gesture classes.

Constructor __init__ core logic:

xxxxxxxxxx
def __init__(self) -> None:
    super().__init__(DEFAULT_NODE_NAME)
    self._image_lock = threading.Lock()
    self._gesture_lock = threading.Lock()
​
    # State: IDLE / TRACKING only
    self._state = STATE_IDLE
​
    # Gesture shared data
    self._has_hand = False
    self._finger_count = 0
    self._gesture_name = "None"
    self._finger_code = "[0,0,0,0,0]"
    self._target_x: Optional[float] = None
    self._target_y: Optional[float] = None
​
    # PTZ angles (initial 0°, -45°)
    self._h_deg = 0.0
    self._p_deg = 0.0
​
    # PD history state
    self._prev_err_x = 0.0
    self._prev_err_y = 0.0
    self._last_sx = 0.0
    self._last_sy = 0.0
​
    self._declare_params()
    self._load_params()
    self._h_deg = float(self._init_h_deg)
    self._p_deg = float(self._init_p_deg)
​
    # Initialize the MediaPipe gesture detector (with the confidence parameter)
    self._hand_det = HandDetector(detectorCon=float(self._hand_conf))
​
    # Image subscription (BEST_EFFORT, KEEP_LAST depth=1, VOLATILE)
    self._img_sub = self.create_subscription(
        Image, self._img_topic, self._on_image,
        QoSProfile(history=QoSHistoryPolicy.KEEP_LAST, depth=1,
                   reliability=QoSReliabilityPolicy.BEST_EFFORT,
                   durability=QoSDurabilityPolicy.VOLATILE),
    )
​
    # Pan-tilt angle publishing
    self._ptz_pub = self.create_publisher(Vector3, self._ptz_topic, 10)
​
    # Image processing timer (15 Hz)
    self._img_timer = self.create_timer(
        1.0 / max(float(self._img_rate), MINIMUM_TIMER_RATE_HZ),
        self._process_image,
    )
    # Pan-tilt control timer (20 Hz)
    self._ctrl_timer = None
    self._rebuild_ctrl_timer(False)
​
    # Initial PTZ timed publishing (20 times, 0.2 s interval each)
    if self._pub_init_ptz:
        self._start_init_ptz()

MediaPipe gesture detection _detect:

xxxxxxxxxx
def _detect(self, frame: np.ndarray) -> None:
    self._hand_det.findHands(frame, draw=True)
​
    if len(self._hand_det.lmList) == 0:
        with self._gesture_lock:
            self._has_hand = False
        return
​
    # Extract landmark 5 (index finger MCP) as the tracking target
    mx, my = self._hand_det.findPoint(LANDMARK_INDEX_FINGER_MCP)
​
    # Finger extension state analysis
    fingers = self._hand_det.fingersUp()
    nf = [1 if int(v) != 0 else 0 for v in fingers]
    fc = int(sum(nf))
    fcode = "[" + ",".join(str(v) for v in nf) + "]"
​
    # Gesture class recognition
    gn = str(self._hand_det.get_gesture())
​
    # Draw the tracking point
    cv.circle(frame, (int(mx), int(my)), 8, (255, 0, 255), -1)
    cv.circle(frame, (int(mx), int(my)), 10, (255, 255, 0), 2)
​
    # Update the shared data
    with self._gesture_lock:
        self._has_hand = True
        self._target_x = float(mx)
        self._target_y = float(my)
        self._finger_count = fc
        self._finger_code = fcode
        self._gesture_name = gn

Gesture recognition and pan-tilt control decoupling design:

The key difference from the palm tracking node is that the gesture tracking node additionally displays the following data in the on-screen overlay:

xxxxxxxxxx
State:tracking FPS:15
Gesture:Scissors Finger:[0,1,1,0,0] Count:2 TRACK
Target:(LM5) Error H:12.3 V:-5.6
PD kp:1.50 kd:0.35 dead:(20,20) step:1.2
PTZ s1:2.3 s2:-42.1 hz:20
SPACE:toggle | i:idle | q:quit

The get_gesture() method maps the 5-bit fingersUp() code to a gesture name:

Finger CodeGesture NameDescription
[0,0,0,0,0]FISTFist (no pan-tilt control output)
[1,0,0,0,0]Thumbs UpThumbs up
[0,1,0,0,0]PointPointing with the index finger
[0,1,1,0,0]ScissorsScissors gesture
[1,1,1,1,1]Open PalmOpen palm
[0,1,0,1,0]Yo-YoRock gesture
[0,1,1,1,0]ThreeThree fingers
[1,0,1,1,1]OKOK gesture

The PD control logic _ctrl_tick is identical to the palm tracking node, so it is not repeated here.

2. Key Parameters

Parameter definition file: ~/microros_ws/src/microros_v2_ptz_visual_control_pkg/launch/gesture_tracker_ptz.launch.py

ParameterTypeDefault ValueDescription
pd_kp / pd_kdfloat1.5 / 0.35PD proportional/derivative gains
control_rate_hzfloat20.0 HzPan-tilt control rate
image_processing_rate_hzfloat15.0 HzImage processing rate
deadband_x / deadband_yfloat20.0 / 20.0 pxHorizontal/vertical deadband
max_ptz_stepfloat1.2°Maximum single angle step
ptz_step_smooth_alphafloat0.35Step EMA smoothing coefficient
ptz_smooth_alphafloat0.85Pan-tilt angle EMA smoothing coefficient
hand_detection_confidencefloat0.8Palm detection confidence threshold
processing_width / processing_heightint320 / 240 pxProcessing resolution
display_width / display_heightint960 / 720 pxDisplay resolution
initial_horizontal_deg / initial_pitch_degfloat0.0° / -45.0°Initial pan-tilt angles

6. Frequently Asked Questions

ProblemCauseSolution
Gesture misjudgment makes the pan-tilt move erraticallyGesture recognition and pan-tilt control are decoupled by design — detection does not change the state, it only affects whether control is outputConfirm the operation logic: PD control is output only in tracking + hand present + not a fist
Palm lost when moving fastImage processing at 15 Hz + PD response delaySlow down the palm movement, or run ros2 param set /gesture_follow_ptz_node pd_kp 0.9 to increase the proportional gain
Gesture classification uncertainThe finger angles are in an ambiguous regionKeep a standard gesture facing the camera and adjust the palm orientation so the fingers are clearly separated
No display after startupThe MediaPipe environment script was not sourcedFirst run source /opt/ros/humble/setup.bash
source ~/microros_ws/install/setup.bash
Mediapipe Palm Tracking
Mediapipe Human Pose Tracking

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