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

1. QR Code Recognition Control Action

QR Code Recognition Control Action (No-PTZ)

Experiment Objective

The camera (fixed bracket) scans QR codes, recognizes the encoded commands (forward/back/left/right/turnleft/turnright/stop), and controls the car to execute the corresponding chassis actions. The No-PTZ version has no pan-tilt servo; the camera is fixed facing forward and does not track or align.

Experiment Principle

1. Keyword Explanation

KeywordDescription
Visual ControlCamera captures image → recognize target content → map to chassis control commands, forming the "perception → decision → execution" chain
QR Code Command Mapping7 normalized commands (forward/back/left/right/turnleft/turnright/stop) → predefined linear velocity + angular velocity combinations
pyzbar / OpenCV QRDual-backend detection: pyzbar is based on the zbar library (node default), OpenCV uses the built-in QRCodeDetector (launch default)
Joy OverrideSubscribes to the /JoyState topic; when the joystick is active, the node automatically stops publishing /cmd_vel and yields control
Command Hold Timeout (hold_timeout)After the QR code is lost, the last valid command continues to be executed within qr_command_hold_timeout_sec; the car stops when the timeout expires
Buzzer FeedbackCan trigger the buzzer (/beep topic) on unknown commands
QoSbest_effort (firmware-side sensor data uplink + cmd_vel downlink), reliable (ROS2 internal forwarding)
TF Coordinate Framesodom → base_footprint → base_link (odometry EKF fusion chain)

2. Technical Architecture

The node uses a dual-timer architecture (image processing 30Hz + chassis control 20Hz), decoupling image acquisition from chassis control:

/camera/image_raw (BEST_EFFORT)
  → qr_control_node
    ├── Image processing timer: image conversion → flip/rotate → pyzbar/OpenCV QR detection → state update
    └── Chassis control timer: QR command mapping → /cmd_vel (BEST_EFFORT) → firmware execution
/JoyState (Bool)
  → Joystick override → zero velocity + buzzer off
/beep (UInt16)
  ← Unknown command buzzer alert

Key differences from the PTZ version (qr_control_ptz_node):

  • No /cmd_ptz_angle publisher — no pan-tilt servo control
  • No initial pan-tilt angle parameters (initial_horizontal_deg/initial_pitch_deg)
  • The camera is on a fixed bracket facing forward, with no pan-tilt tracking logic

3. Core Topics Quick Reference

Firmware Uplink (Sensor Data)

TopicMessage TypeQoSDescription
/camera/image_rawsensor_msgs/Imagebest_effortESP32 camera raw image frames

Firmware Downlink (Control Commands)

TopicMessage TypeQoSFieldRangeDirection
/cmd_velgeometry_msgs/Twistbest_effort + keep_last(1)linear.x-0.30~0.30 m/s+=forward, −=backward
   angular.z-1.50~1.50 rad/s+=turn left, −=turn right
/beepstd_msgs/UInt16reliabledata0/11=buzzer on

Usage example:

xxxxxxxxxx
# Forward
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.3}, angular: {z: 0.0}}" -1
# Turn right
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.3}, angular: {z: -1.5}}" -1
# Stop
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0}, angular: {z: 0.0}}" -1

ROS2 Internal Topics

TopicMessage TypeQoSSourceDescription
/JoyStatestd_msgs/BoolreliableJoystick node=true when the joystick is active; qr_control_node automatically stops

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)

xxxxxxxxxx
ros2 launch microros_v2_bringup car_base.launch.py

image-20260728144126567

3. Start QR Code Control (Terminal 2)

xxxxxxxxxx
ros2 launch microros_v2_ptz_visual_control_pkg qr_control_ptz.launch.py

image-20260728150709750

5. Operation Instructions

Interaction

KeyFunctionDescription
SpaceControl switchEnable/pause QR code control; publishes zero velocity while paused
i / IRecognition modeRecognition display only, does not decode to control the chassis
r / RReset stateClear the current QR code cache and stop control
q / Q / ESCQuitStop + os._exit(0)

On-screen overlay info: status (identify/tracking/lost/paused), frame rate, QR code payload, age since last recognition (seconds), current cmd_vel value, QR detection backend. A vertical center line is drawn on the frame.

QR Code Command Mapping

Normalized commandLinear velocity (m/s)Angular velocity (rad/s)Behavior
forwardforward_linear_speed (0.30)0Drive straight forward
backback_linear_speed (-0.30)0Drive straight backward
left0rotate_angular_speed (1.00)Rotate left in place
right0-rotate_angular_speed (-1.00)Rotate right in place
turnleftturn_linear_speed (0.30)turn_angular_speed (1.50)Forward + turn left
turnrightturn_linear_speed (0.30)-turn_angular_speed (-1.50)Forward + turn right
stop00Stop

Safety and Boundary Handling

  • pyzbar unavailable: automatically falls back to the opencv backend (launch defaults to opencv)
  • Joystick override priority: /JoyState=true → immediately zero velocity + buzzer off, resumes after release
  • Unknown command handling: when unknown_command_stop=true, an unknown payload triggers a stop, optionally with an enable_beep buzzer alert
  • Command hold timeout: stops automatically 1.5s after the code is lost, preventing "ghost commands"
  • No pan-tilt, no tracking: the position of the QR code in the frame does not affect command execution; no alignment is needed
  • Stop before quitting: publishes zero velocity + buzzer off, then os._exit(0)

Experiment Result

  • No QR code + control enabled: the frame shows "QR: None", cmd_vel is zero velocity, status is lost
  • QR code within hold_timeout: continuously re-publishes the last decoded valid command
  • QR code = forward: the car drives straight at 0.30 m/s
  • QR code = turnleft: 0.30 m/s forward + 1.50 rad/s left turn
  • QR code lost >1.5s: automatically stops, status is lost
  • Unknown QR code: stops when unknown_command_stop=true, optional buzzer
  • Joystick active: stops immediately, resumes after release
  • Multi-code scene: selects the largest code with the "largest" strategy, draws green polygon + red center point + payload annotation

Code Explanation

Source paths:

  • Launch: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/launch/qr_control.launch.py
  • Node source: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/qr_control_node.py

1. Core Node Analysis

qr_control_node uses a dual-timer architecture, decoupling image processing from chassis control:

  • Image callback (image_callback): only caches the latest raw image without processing, avoiding blocking
  • Image processing timer (30Hz, process_latest_image): takes the latest cached frame → image conversion → orientation correction → QR detection → state update
  • Chassis control timer (20Hz, publish_chassis_control_command): reads the QR state → command mapping → publishes /cmd_vel

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

​x
# Source file: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/qr_control_node.py
​
def __init__(self) -> None:
    """Initialize the QR control node."""
    super().__init__(DEFAULT_NODE_NAME)
​
    # image_lock: Image cache mutex.
    self.image_lock = threading.Lock()
    # qr_state_lock: QR state mutex.
    self.qr_state_lock = threading.Lock()
​
    # latest_image_msg: Latest raw Image message.
    self.latest_image_msg: Optional[Image] = None
    # latest_image_sequence_id: Latest image sequence ID.
    self.latest_image_sequence_id = 0
    # processed_image_sequence_id: Processed image sequence ID.
    self.processed_image_sequence_id = 0
​
    # control_state: Current control state.
    self.control_state = CONTROL_STATE_IDENTIFY
    # control_is_enabled: Whether QR control is enabled.
    self.control_is_enabled = False
    # joy_is_active: Joystick override flag.
    self.joy_is_active = False
​
    self.declare_and_get_parameters()
    self.control_is_enabled = self.auto_start_control
    self.control_state = CONTROL_STATE_TRACKING if self.control_is_enabled else CONTROL_STATE_IDENTIFY
​
    # image_subscription: Raw image subscriber (QoS: KEEP_LAST, BEST_EFFORT)
    self.image_subscription = self.create_subscription(
        Image, self.image_topic, self.image_callback,
        QoSProfile(history=QoSHistoryPolicy.KEEP_LAST, depth=1,
                   reliability=QoSReliabilityPolicy.BEST_EFFORT,
                   durability=QoSDurabilityPolicy.VOLATILE),
    )
    # joy_state_subscription: Joystick state subscriber
    self.joy_state_subscription = self.create_subscription(
        Bool, self.joy_state_topic, self.joy_state_callback, 10,
    )
    # cmd_vel_publisher: Chassis velocity publisher (QoS aligned with the ESP32 firmware BEST_EFFORT)
    self.cmd_vel_qos = QoSProfile(
        history=QoSHistoryPolicy.KEEP_LAST, depth=1,
        reliability=QoSReliabilityPolicy.BEST_EFFORT,
        durability=QoSDurabilityPolicy.VOLATILE,
    )
    self.cmd_vel_publisher = self.create_publisher(Twist, self.cmd_vel_topic, self.cmd_vel_qos)
    # beep_publisher: Buzzer publisher
    self.beep_publisher = self.create_publisher(UInt16, self.beep_topic, 10)
​
    # image_processing_timer: Image processing timer (30Hz)
    self.image_processing_timer = self.create_timer(
        1.0 / max(self.image_processing_rate_hz, MINIMUM_TIMER_RATE_HZ),
        self.process_latest_image,
    )
    # control_timer: Chassis control timer (20Hz)
    self.control_timer = self.create_timer(
        1.0 / max(self.control_rate_hz, MINIMUM_TIMER_RATE_HZ),
        self.publish_chassis_control_command,
    )
​
    # dynamic_parameter_callback_handle: Dynamic parameter callback (rqt tuning)
    self.dynamic_parameter_callback_handle = self.add_on_set_parameters_callback(
        self.on_dynamic_parameter_update
    )

Chassis control timer callback — publishes cmd_vel at a fixed rate:

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/qr_control_node.py
​
def publish_chassis_control_command(self) -> None:
    """Publish chassis control command at a fixed rate."""
    if not self.is_node_running:
        return
​
    # Joystick override takes priority: immediate zero velocity + buzzer off
    if self.enable_joy_override and self.joy_is_active:
        self.publish_zero_twist()
        self.publish_beep(False)
        return
​
    # Control not enabled: zero velocity
    if not self.control_is_enabled:
        self.publish_zero_twist()
        self.publish_beep(False)
        return
​
    with self.qr_state_lock:
        local_qr_is_valid = self.qr_is_valid
        local_qr_payload = self.qr_payload
        local_latest_qr_update_time_sec = self.latest_qr_update_time_sec
​
    # QR code lost + timeout: stop
    qr_age_sec = time.perf_counter() - local_latest_qr_update_time_sec
    if (not local_qr_is_valid or qr_age_sec > self.qr_command_hold_timeout_sec) and self.stop_when_qr_lost:
        self.control_state = CONTROL_STATE_LOST
        self.publish_zero_twist()
        self.publish_beep(False)
        return
​
    # Normalize the command → map to a Twist
    normalized_command = self.normalize_qr_command(local_qr_payload)
    twist_command = self.build_twist_from_qr_command(normalized_command)
    if twist_command is None:
        # Unknown command: stop + optional buzzer
        self.unknown_command_is_active = True
        if self.unknown_command_stop:
            self.publish_zero_twist()
        self.publish_beep(True)
        return
​
    self.unknown_command_is_active = False
    self.publish_beep(False)
    self.cmd_vel_publisher.publish(twist_command)
    self.previous_twist_command = twist_command

Key logic: build_twist_from_qr_command maps the 7 normalized commands to a Twist message. normalize_qr_command strips spaces/underscores/hyphens from the raw payload and lowercases it before matching.

2. Key Parameters

Parameter definition files:

  • Launch: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/launch/qr_control.launch.py
  • Node: ~/microros_ws/src/microros_v2_no_ptz_visual_control_pkg/microros_v2_no_ptz_visual_control_pkg/qr_control_node.py
ParameterTypeDefaultDescription
forward_linear_speedfloat0.30 m/sLinear velocity for the forward command
back_linear_speedfloat-0.30 m/sLinear velocity for the back command
rotate_angular_speedfloat1.00 rad/sIn-place rotation angular velocity for left/right
turn_linear_speedfloat0.30 m/sLinear velocity for the turn commands
turn_angular_speedfloat1.50 rad/sAngular velocity for the turn commands
qr_detector_backendstropencvDetection backend (launch defaults to opencv, node declaration defaults to pyzbar)
qr_select_strategystrlargestMulti-code strategy: largest / nearest_center / first
qr_command_hold_timeout_secfloat1.5 sCommand hold time after the code is lost
control_rate_hzfloat20.0 HzChassis control publish rate
image_processing_rate_hzfloat30.0 HzImage processing rate
auto_start_controlboolfalseAutomatically enable control at startup
stop_when_qr_lostbooltrueStop when the code is lost beyond the timeout
unknown_command_stopbooltrueStop on unknown command
enable_joy_overridebooltrueJoystick override switch
enable_beepboolfalseBuzzer switch for unknown commands

3. Node Description

NodePackageDescription
qr_control_nodemicroros_v2_no_ptz_visual_control_pkgQR code recognition + control, dual-timer architecture

Common Problems

ProblemCauseSolution
QR code not recognizedInsufficient lighting or blurred QR codeEnsure the QR code is clear and evenly lit
Scanned but no actionauto_start_control=false, needs to be enabled manuallyPress Space to enable control
Car runs erratically after the code is lostqr_command_hold_timeout_sec is too largeReduce the hold timeout (e.g., 0.5s)
pyzbar unavailableMissing libzbar0Install sudo apt install libzbar0, or launch already defaults to opencv

image-20260813141908407

 

image-20260813141915531

 

image-20260813141920660

 

image-20260813141928120

image-20260813141932986

image-20260813141941968

 

image-20260813141953720

Fingertip Trajectory Recognition
AprilTag Control Car Action Group

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