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

3. Gesture Control Car Action Group

Gesture Control Car Action Group (No-PTZ)

Experiment Objective

Recognize 5 gestures to trigger preset chassis action sequences (square/circle/S-curve/back-and-forth/stop), with odometry-driven PD closed-loop control for completion determination. The No-PTZ version uses a fixed camera bracket.

Experiment Principle

1. Keyword Explanation

KeywordDescription
Action GroupPreset chassis motion sequences, with odometry data driving phase transitions
Odometry Closed-Loop PDSubscribes to /odom_raw; each phase uses PD to drive toward the target distance/angle, then cools down before switching phases after settling
Gesture Confirmation CountA gesture must be held for gesture_hold_confirm_frames(3) consecutive frames to trigger, preventing false triggering
Phase CooldownAfter PD settles, the car stops for phase_cooldown_ticks(10) ticks to let the robot stabilize before switching phases
Three-State Machineidle → waiting (waiting for gesture) → action_running (executing action); Space toggles idle↔waiting
5-Finger Emergency StopIn any state, extending all five fingers interrupts the current action and returns to waiting
QoSbest_effort (image/odometry input + cmd_vel downlink), depth=1
TF Coordinate Framesodom → base_footprint → base_link

2. Technical Architecture

Three-state machine + dual timers (image 15Hz + action control 30Hz):

/camera/image_raw (BEST_EFFORT)
  → gesture_action_group_control_node
    ├── Image processing timer (15Hz): image conversion → MediaPipe → gesture recognition → confirmation count → trigger action
    └── Action control timer (30Hz): odometry PD closed loop → phase transition → /cmd_vel (BEST_EFFORT)
/odom_raw (BEST_EFFORT)
  → Odometry data drives PD

Gesture → action mapping:

GestureFinger codeAction
Yes[0,1,1,0,0]square (0.5m × 4 sides)
OK≥3 fingers with index bentcircle (rotate 360°)
Rock[0,1,0,0,1]s_curve (S-curve)
Thumb Down≤1 finger with thumb downbackforth (back-and-forth 0.5m)
5 fingers[1,1,1,1,1]stop (emergency stop)

PD closed-loop parameters:

  • Distance phase: linear_kp(0.8)×error + linear_kd(0.25)×derivative → clamped to ±0.2 m/s
  • Angle phase: absolute yaw target, angular_kp(0.05)×error + angular_kd(0.005)×derivative → clamped to ±0.6 rad/s
  • Settle for 3 frames → cooldown for 10 ticks → switch phase

3. Core Topics Quick Reference

Firmware Uplink (Sensor Data)

TopicMessage TypeQoSDescription
/camera/image_rawsensor_msgs/Imagebest_effortESP32 camera raw image frames
/odom_rawnav_msgs/Odometrybest_effortRaw odometry data (drives the PD closed loop)

Firmware Downlink (Control Commands)

TopicMessage TypeQoSFieldRangeDirection
/cmd_velgeometry_msgs/Twistbest_effort + keep_last(1)linear.x-0.20~0.20 m/s+=forward, −=backward
   angular.z-0.60~0.60 rad/s+=turn left, −=turn right

Experiment Steps

1. Hardware Preparation

HardwareRequirement
PTZ version❌ This section is for the No-PTZ version
No-PTZ version✅
Required peripheralsESP32 camera (fixed bracket)

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

Start agent + camera + joint model (Terminal 1)

xxxxxxxxxx
ros2 launch microros_v2_bringup car_base.launch.py

image-20260728161255347

3. Start Gesture Action Group Control (Terminal 2)

xxxxxxxxxx
ros2 launch microros_v2_no_ptz_visual_control_pkg gesture_action_group_control.launch.py

 

4. Operation Instructions

Interaction

KeyFunction
Spacewaiting ↔ idle
i / IReturn to idle
q / Q / ESCQuit (stop first)

Safety and Boundary Handling

  • 5-finger emergency stop interrupts any action
  • Gesture must be confirmed for ≥3 frames to trigger
  • Odometry drives phase transitions
  • Angle wraps ±π
  • Stop before quitting

Experiment Result

  • idle/waiting: the car is stationary waiting for a gesture
  • Yes gesture held for 3 frames: square 0.5m × 4 sides, looped once
  • OK gesture: rotate 360° in place
  • Rock gesture: S-curve
  • Thumb Down: back-and-forth 0.5m
  • 5-finger emergency stop: immediately interrupts and returns to waiting

Code Explanation

Source paths:

  • Launch: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/launch/gesture_action_group_control.launch.py
  • Node source: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/gesture_action_group_control_node.py
  • Hand detector: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/hand_detector.py

1. Core Node Analysis

gesture_action_group_control_node is the most complex node among the 4 documents, containing a three-state machine (idle/waiting/action_running), dual timers (image processing 15Hz + action control 30Hz), and an odometry PD closed loop.

Data flow:

  • _process_image (15Hz) → _detect → MediaPipe gesture recognition → confirmation count → _start_action
  • _action_tick (30Hz) → dispatches to _square_tick/_circle_tick/_s_curve_tick/_backforth_tick by action type → PD computation → /cmd_vel
  • _odom_callback → caches odometry position and yaw

Constructor — declares parameters, creates dual timers, subscribers/publishers:

​x
# Source file: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/gesture_action_group_control_node.py
​
def __init__(self) -> None:
    super().__init__(DEFAULT_NODE_NAME)
    self._image_lock = threading.Lock()
    self._state_lock = threading.Lock()
    self._odom_lock = threading.Lock()
​
    self._state = STATE_IDLE         # State machine initial: idle
    self._latest_frame: Optional[np.ndarray] = None
​
    # Odometry state (drives PD)
    self._odom_x = 0.0
    self._odom_y = 0.0
    self._odom_yaw = 0.0
​
    # Gesture confirmation mechanism
    self._gesture_confirm_count = 0
    self._last_gesture = ""
​
    # Action engine state
    self._action_type = ""
    self._action_phase = 0
    self._phase_start_x = 0.0
    self._phase_start_y = 0.0
    self._phase_start_yaw = 0.0
    self._settle_count = 0
​
    self._declare_params()
    self._load_params()
​
    self._hand_det = HandDetector()
​
    # Subscriber QoS uniformly BEST_EFFORT (image + odometry)
    best_effort_qos = QoSProfile(
        history=QoSHistoryPolicy.KEEP_LAST, depth=1,
        reliability=QoSReliabilityPolicy.BEST_EFFORT,
        durability=QoSDurabilityPolicy.VOLATILE,
    )
    self._img_sub = self.create_subscription(
        Image, self._img_topic, self._on_image, best_effort_qos)
    self._odom_sub = self.create_subscription(
        Odometry, self._odom_topic, self._odom_callback, best_effort_qos)
    self._cmd_pub = self.create_publisher(Twist, self._cmd_topic, best_effort_qos)
​
    # Dual timers: image processing 15Hz + action control 30Hz
    self._img_timer = self.create_timer(
        1.0 / max(float(self._img_rate), MINIMUM_TIMER_RATE_HZ), self._process_image)
    self._action_timer = self.create_timer(
        1.0 / max(float(self._action_rate), MINIMUM_TIMER_RATE_HZ), self._action_tick)
​
    # Keyboard polling timer (50Hz)
    if self._show_win:
        self._ensure_win()
        self._key_timer = self.create_timer(0.05, self._poll_keys)
​
    self._param_cb = self.add_on_set_parameters_callback(self._on_param_update)

Action control timer callback — three-state machine scheduling:

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/gesture_action_group_control_node.py
​
def _action_tick(self) -> None:
    """Action control timer (30Hz), three-state machine scheduling."""
    if self._state == STATE_IDLE:
        self._pub_zero_cmd()       # idle: zero velocity
        return
    if self._state == STATE_WAITING:
        self._pub_zero_cmd()       # waiting: zero velocity, wait for gesture
        return
    if self._state != STATE_ACTION:
        return
​
    with self._odom_lock:
        ox = self._odom_x
        oy = self._odom_y
        oyaw = self._odom_yaw
​
    phase_dist = math.hypot(ox - self._phase_start_x, oy - self._phase_start_y)
​
    # Dispatch to different tick functions by action type
    if self._action_type == GESTURE_SQUARE:
        self._square_tick(oyaw, phase_dist)
    elif self._action_type == GESTURE_CIRCLE:
        self._circle_tick(oyaw)
    elif self._action_type == GESTURE_S:
        self._s_curve_tick(oyaw)
    elif self._action_type == GESTURE_BACKFORTH:
        self._backforth_tick(phase_dist)

Key logic: _distance_pd and _angle_pd compute the PD outputs for distance and angle respectively, with settle counting for determination. The S-curve action is an alternating turn→straight→turn→... sequence, driven by the s_turn_angles and s_straight_distances parameters.

2. Key Parameters

Parameter definition files:

  • Launch: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/launch/gesture_action_group_control.launch.py
  • Node: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/gesture_action_group_control_node.py
ParameterTypeDefaultDescription
linear_kp / linear_kdfloat0.8 / 0.25Distance PD gains
angular_kp / angular_kdfloat0.05 / 0.005Angle PD gains
max_linear_xfloat0.2 m/sMaximum linear velocity
max_angular_zfloat0.6 rad/sMaximum angular velocity
square_forward_distancefloat0.5 mSquare side length
circle_total_angle_degfloat360.0°Total rotation angle for the circle
backforth_distancefloat0.5 mBack-and-forth distance
gesture_hold_confirm_framesint3Gesture confirmation frame count
action_control_rate_hzfloat30.0 HzAction control rate
image_processing_rate_hzfloat15.0 HzImage processing rate
distance_tolerancefloat0.05 mDistance determination tolerance
angle_tolerance_degfloat3.0°Angle determination tolerance
settle_framesint3PD stabilization determination frames
phase_cooldown_ticksint10Cooldown ticks between phases
s_turn_angleslist[30,-60,60,-60,30]°S-curve turn angle sequence
s_straight_distanceslist[0.288,0.576,0.576,0.288,0.5] mS-curve straight distance sequence

3. Node Description

NodePackageDescription
gesture_action_group_control_nodemicroros_v2_no_ptz_visual_control_pkgGesture → action group, three-state machine + dual timers + PD closed loop

Common Problems

ProblemCauseSolution
Action group interruptedNo data from /odom_raw odometryCheck whether the odometry topic is publishing normally
Gesture not triggeredNot enough confirmation framesHold the gesture for more than 3 frames
No detection at startupMediaPipe environment not sourced`source /opt/ros/humble/setup.bash
source ~/microros_ws/install/setup.bash`  
AprilTag Control Car Action Group
Visual Line 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
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文