yahboom
HomeTutorialsProduct
Solution
Blog
Online Store
About Us
EN/中文
Store
ROSMASTER M1 PRO📖
0.Robot Configuration and Operation Guidelines
  • 0.Unboxing and Review
  • 1.Assembly Videos
  • 2.User Manual
  • 3.Enter Docker (For Raspberry Pi)
  • 4.FAQ
  • 5.RobotManager User Guide
1.Chassis Control Course
  • 1.Robot Information Publishing
  • 2.Robot Handle Control
  • 3.Robot Keyboard Control
  • 4.Linear Velocity Calibration
  • 5.Angular Velocity Calibration
  • 6.Robot URDF Model
  • 7.Robot EKF State Estimation
2.Lidar Course
  • 1.Lidar Introduction And Use
  • 2.Lidar Obstacle Avoidance
  • 3.Lidar Following
  • 4.Lidar Guard
  • 5.Lidar Patrol
  • 6.GMapping-SLAM Mapping
  • 7.Cartographer-SLAM Mapping
  • 8.Slam-Toolbox Mapping
  • 9.Lifelong Mode Mapping
  • 10.Navigation2 Single Point Navigation
  • 11.Navigation2 Multi Point Navigation
  • 12.Cartographer Relocalization Navigation
  • 13.Slam-Toolbox Localization Navigation
  • 14.Synchronous Mapping And Navigation
  • 15.Aruco Visual Relocalization Navigation
  • 16.Mobile App Mapping And Navigation
3.USB Camera-Depth Camera Course
  • 1.USB Camera Introduction
  • 2.USB Camera Intrinsic Calibration
  • 3.Nuwa-HP60C Camera Introduction (Depth Camera Only)
  • 4.Depth Pseudo Color Image (Depth Camera Only)
  • 5.Depth Camera Distance Measurement (Depth Camera Only)
  • 6.Block Volume Calculation (Depth Camera Only)
  • 7.Edge Detection (Depth Camera Only)
  • 8.RTAB-Map SLAM Mapping (Depth Camera Only)
  • 9.RTAB-Map Navigation (Depth Camera Only)
4.Robotic Arm and 3D Space Gripping Course
  • 1.Robotic Arm Basic Usage
  • 2.Robotic Arm Kinematics
  • 3.Robotic Arm Chassis Coordination Control
  • 4.AprilTag ID Sorting
  • 5.AprilTag Height Anomaly Sorting
  • 6.AprilTag Tracking and Grasping
  • 7.Color Block Sorting
  • 8.Color Block Height Anomaly Sorting
  • 9.Color Block Tracking and Grasping
  • 10.Wood Block Shape Sorting
  • 11.KCF Tracking and Grasping Objects
  • 12.Mediapipe Gesture ID Sorting AprilTag
  • 13.Mediapipe Gesture Height Sorting AprilTag
  • 14.Desktop Tracking and Grasping AprilTag
  • 15.3D Spatial Tracking AprilTag
  • 16.Transformer Model Tracking Algorithm
  • 17.Line Following Obstacle Clearing
5.Road network planning and navigation
  • 1.Introduction To Road Network Planning
  • 2.Road Network Annotation
  • 3.Planning And Navigation Between Waypoints
  • 4.Road Network Navigation In Any Pose
  • 5.Path Re-planning
6.OpenClaw Basic Course
  • 1.Introduction to OpenClaw
  • 2.OpenClaw Core Concepts
  • 3.OpenClaw API-KEY Configuration
  • 4.OpenClaw Switch Models
  • 5.OpenClaw System Prompt Words
  • 6.OpenClaw Common CLI Commands
7.OpenClaw Interaction Method
  • 1.OpenClaw Webchat Interaction
  • 2.OpenClaw Tui Interaction
  • 3.OpenClaw Voice Dialogue Interaction
  • 4.OpenClaw WhatsApp Interaction
8.OpenClaw Development
  • 1.OpenClaw Connecting to Robot MCP Service
  • 2.Robot CLI Command Tool
  • 3.robot-control Plugin Tool
  • 4.reply-bridge Plugin Tool
  • 5.OpenClaw Multimodal Vision
  • 6.OpenClaw Chassis Control
  • 7.OpenClaw Robotic Arm Control
  • 8.OpenClaw Skills Development
  • 9.OpenClaw Scheduled Tasks
  • 10.OpenClaw Multi-Agent Intelligent Agent
  • 11.OpenClaw Active Interaction
  • 12.OpenClaw Vector Memory
9.OpenClaw Embodied intelligent application
  • 1.OpenClaw Target Tracking
  • 2.OpenClaw Arm Tracking And Grasping
  • 3.OpenClaw Arm Fixed-point Placement
  • 4.OpenClaw Waste Sorting
  • 5.OpenClaw SLAM Mapping And Navigation
  • 6.OpenClaw Navigation Transport
  • 7.OpenClaw AprilTag Grasping
  • 8.OpenClaw Color Line Patrol
  • 9.OpenClaw Visual Distance Measurement
10.OpenClaw scenario sandbox
  • 1.Map Description and Props Placement
  • 2.Building the Sandbox Map
  • 3.Visual Relocalization Marker
  • 4.Map Mapping Marker
  • 5.Sandbox Scenario Comprehensive Case
11.AI Large Model Basics
  • 1.AI Large Model Types and Principles
  • 2.RAG Retrieval Enhancement and Model Training Samples
  • 3.Embodied Intelligent Robot System Architecture
  • 4.Embodied Intelligent Functions Core Source Code
12.AI large Model Development
  • 1.Register a Model Service Provider Account
  • 2.Configuring API-KEY
  • 3.Introduction to Dify
  • 4.Basic Dify Features
  • 5.AI Large Model Development - Chatbot
  • 6.Deploy the RAG Knowledge Base
  • 7.RAG Knowledge Base + Chatbot
  • 8.AI Agent Workflow
  • 9.Custom Wake-up Response
13.AI Model - Voice Version
  • 1.Semantic Understanding and Command Following
  • 2.Multimodal Visual Understanding
  • 3.Multimodal Visual Understanding and Robotic Arm Gripping
  • 4.Multimodal Visual Understanding and SLAM Navigation
  • 5.Robotic arm gripping+Multimodal visual understand+SLAM navigation
  • 6.Intention Understanding
14.AI Model - Text Version
  • 1.Semantic Understanding and Command Following
  • 2.Multimodal Visual Understanding
  • 3.Multimodal Visual Understanding and Robotic Arm Gripping
  • 4.Multimodal Visual Understanding and SLAM Navigation
  • 5.Robotic arm gripping+Multimodal visual understand+SLAM navigation
  • 6.Intention estimation
15.Mediapipe Visual Course
  • 1.Hand detection
  • 2.Posture detection
  • 3.Overall detection
  • 4.Facial Landmark Detection
  • 5.Face detection
  • 6.Face special effects
  • 7.3D object recognition
  • 8.Brush
  • 9.Finger control
  • 10.Palm target positioning
  • 11.Fingertip trajectory recognition
  • 12.Fingertip gesture control robotic arm
  • 13.Gesture grabbing and releasing objects
  • 14.Finger control robotic arm
  • 15.Medipipe gesture control robotic arm action group
16.MoveIt2 Simulation Course
  • 1.MovelT2 configuration
  • 2.MovelT2 simulation-reality linkage
  • 3.Random movement
  • 4.Forward kinematics design
  • 5.Inverse kinematics design
  • 6.Cartesian path
  • 7.Trajectory Planning
  • 8.Collision Detection
  • 9.Scene Design
  • 10.3D perception obstacle‑avoidance
17.Multi-vehicle Course
  • 1.Multi-vehicle Control
  • 2.Multi-vehicle Navigation
  • 3.Multi-vehicle Formation
18.YOLO26 Development
  • 1.CLI Use
  • 2.Object Detection
  • 3.Instance Segmentation
  • 4.Pose Estimation
  • 5.Image Classification
  • 6.Oriented Object Detection
  • 7.YOLOv26 + DeepSORT Tracking
  • 8.Monocular Depth Estimation
19.Control Board STM32 Driver Course
  • 0.Notes (Must Read)
  • 1.About Expansion Board
  • 2.STM32 Development Environment
  • 3.Button Control
  • 4.FreeRTOS Application
  • 5.Serial Communication
  • 6.SBUS Model Aircraft Remote Control
  • 7.CAN Bus Communication
  • 8.RGB Colorful Light Bar
  • 9.Timer Interrupt to Control PWM Servo
  • 10.Control Serial Port Servos
  • 11.Nine-axis Attitude Sensor to Obtain Data
  • 12.Control Motor
  • 13.Timer Captures the Encoder Data
  • 14.1 Kinematic Analysis of Mecanum Wheel
  • 14.2 Kinematic Analysis of Ackerman
  • 14.3 Kinematic Analysis of 4WD
  • 15.PID Control Robot Movement
20.Docker Course
  • 1.Docker Introduction and Installation
  • 2.Docker Basic Commands
  • 3.Docker Submission and Multi-Terminal Access
  • 4. Docker Startup Script
  • 5.Docker-Vscode Environment Construction
21.Image Processing Basics Course
  • 1. Introduction to Open Source CV
  • 2. Image reading and display
  • 3. Image writing
  • 4. Image quality
  • 5. Pixel Operation
  • 6. Image zoom
  • 7. Image cutting
  • 8. Image translation
  • 9. Image Mirroring
  • 10. Affine Transformation
  • 11. Image Rotation
  • 12. Perspective Transformation
  • 13. Grayscale processing
  • 14. Image Binarization
  • 15. Edge Detection
  • 16. Line drawing
  • 17. Rectangle and circle drawing
  • 18. Drawing text and pictures
22.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
23.ROS2 Basic Course
  • 1.Introduction to ROS2
  • 2.ROS2 install Humble
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
24.Main Control Course
Jetson Orin Nano_NX
  • 1.Jetson Orin board introduction
  • 2.Restore the factory image system
  • 3.Backup SSD system
  • 4.SSD expansion
  • 5.Network configuration
  • 6.SSH remote login
  • 7.VNC remote control
  • 8.Remote file transfer
  • 9.Jtop tool
  • 10.Exchange space expansion
Raspberry Pi
  • 1. Introduction to Raspberry PI 5
  • 2. Raspberry PI system installation and backup
  • 3. Powering the Raspberry PI 5
  • 4. Startup of Raspberry PI 5
  • 5. Update and upgrade operating system
  • 6. Introduction to raspi-config tool
  • 7. config.txt file description
  • 8. Network Configuration
  • 9. remote access
  • 10. Transfer files remotely
  • 11. Set display resolution and rotation
  • 12. Set screen to sleep
  • 13. Play audio and video
  • 14. Using USB camera
  • 15. Using MIPI camera
  • 16. Get real-time temperature of Raspberry Pi
RDKX5
  • 1.Introduction to RDK X5 board
  • 2.Write system file
  • 3.Hardware interface description
  • 4.Install case and other accessories
  • 5.Network configuration
  • 6.Remote login
  • 7.Update system
  • 8.srpi-config user guide
  • 9.config. txt configuration file
  • 10.Self-startup setting
  • 11.RDK exclusive command usage
  • 12.Linux command usage
  • 13.GPIO readwrite operation
  • 14.Image classification algorithm
  • 15.Use USB camera
  • 16.Use MIPI camera
  • 17.Binocular camera depth algorithm
  • 18. Controlling RGB Cooling Fans
Download
  • System File
  • Code
  • 3D Model File
  • Software Tools
  • Hardware_Info
  • Deb function package
  • Dify AI Agent
Download ZIP

Welcome to ROSMASTER M1 PRO repository

11.KCF Tracking and Grasping Objects

KCF Tracking and Grasping Objects

KCF Tracking and Grasping Objects1. Course Content2. Preparation3. Case Demonstration4. Core Source Code Analysis

1. Course Content

This feature implements the program acquiring images through the camera and then using the mouse to select the object to be tracked and grasped. After pressing the spacebar, when the tracked object is moved slowly, the robotic arm will track the object and keep its center at the image center. After the robotic arm stops tracking, the program adjusts according to the distance between the object and the car, and then controls the robotic arm to grasp the object.

Important

  • The grasping angle of the robotic arm gripper needs to be adjusted according to the selected object; otherwise it may fail to grip it firmly or grip it too tightly, which will burn out servo No. 6. For the first grasp, you can let the gripper not grip the object, then modify the angle value of servo No. 6 in the program before grasping

  • The grasping point calculation methods differ between the depth camera and the USB monocular camera: the depth camera obtains the spatial coordinates of the target center point through the depth map, while the monocular camera grasps objects at a fixed z-axis parameter through parameters

 

2. Preparation

The wooden block used in this section: 30x30x30mm color block

ros2 launch yahboomcar_bringup arm_demo.launch.py demo:=kcf_follow_grasp

image-20260916105945539

3. Case Demonstration

  • After pressing t, it enters the box-selection state; use the mouse to draw a box around the object to be grasped

image-20260916110005602

 

  • The robotic arm will first track the target, so that the camera crosshair is directly aimed at the color block. After the color block's center stably enters the central target box (the crosshair turns green), the gimbal pose is locked, and the chassis automatically drives smoothly forward toward the color block and performs grasping. The grasped object is then placed to the right side of the car, and the robotic arm resets to prepare for the next sorting round

image-20260916105619326

 

4. Core Source Code Analysis

  • Program path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/common_demo/common_demo/arm_demo/kcf_follow_grasp.py

 

rgb_callback function (RGB image callback):

This function is the main callback of KCF tracking, processing each frame of the RGB image and completing ROI selection, tracker initialization, target tracking, pose calculation, and state machine update.

Pre-check and data acquisition:

  • self.camera_K: camera intrinsic matrix; if not yet obtained, it waits and returns

  • self._depth_lock: thread lock, protecting multi-threaded access to the depth image data

  • self._latest_depth: the latest depth image, used for pose calculation in depth camera mode

  • self.bridge.imgmsg_to_cv2(msg, 'rgb8'): converts the ROS Image message into an OpenCV RGB format image

ROI selection mode (triggered by pressing the 't' key):

  • self._kcf_selecting_roi = True: enters the ROI selection state

  • Resets the tracker, bounding box, current tracking target, and other states

  • _reset_tracking_pid(): resets the tracking PID controller

  • The user drags the mouse to draw a rectangular box to select the tracking target

KCF tracker initialization:

  • cv2.TrackerKCF_create(): creates a KCF (Kernelized Correlation Filters) tracker instance

  • self._kcf_tracker.init(bgr_frame, self._kcf_bbox): initializes the tracker with the selected bounding box

  • _kcf_pending_init: pending initialization flag, ensuring initialization on a valid frame

KCF tracking execution:

  • self._kcf_tracker.update(bgr_frame): updates the tracker on the current frame, returning whether tracking succeeded and the new bounding box

  • self._kcf_bbox = tuple(map(int, bbox)): updates the tracking bounding box coordinates

  • self._kcf_lost_count: tracking loss counter; if the loss exceeds _kcf_max_lost consecutively, the tracker is reset

  • After tracking is lost, prompts the user to press 't' to re-select the target

Tracking target construction and pose calculation:

  • cx, cy = x + w // 2, y + h // 2: calculates the center pixel coordinates of the tracking box

  • self._is_mono: determines whether it is in monocular camera mode

  • _pixel_to_measure_fixed_height(cx, cy, camera_frame_id): monocular mode, intersects the pixel coordinates with a fixed-height plane to calculate the 3D position in the measure coordinate frame

  • _pixel_to_measure(cx, cy, depth_image, camera_frame_id): depth camera mode, obtaining the 3D coordinates of the target center point through the depth map

  • block['measure_dist'] = math.sqrt(pose[0]**2 + pose[1]**2) * 1000: calculates the horizontal distance (millimeters) between the target and the robot

State machine update and display:

  • self._latest_blocks = blocks: updates the latest tracking target list

  • _draw_kcf_result(result_image, blocks): draws the tracking result on the image

  • _update_ema_and_alignment(self._current_track_block): updates the EMA filtering and alignment state

  • _follow_tag(blocks): if not in the grasping state, executes the tracking logic (robotic arm following + chassis movement)

  • _display_fps(result_image, is_aligned): displays the frame rate and alignment state

​x
    def rgb_callback(self, msg):
        if self.camera_K is None:
            self.get_logger().warn("Waiting for camera intrinsics...")
            return

        with self._depth_lock:
            depth_image = self._latest_depth
            camera_frame_id = self._latest_depth_frame_id
        if depth_image is None:
            camera_frame_id = self.camera_frame_id

        rgb_image = self.bridge.imgmsg_to_cv2(msg, 'rgb8')
        result_image = rgb_image

        key = getattr(self, '_last_key', -1)

        # Key: 't' enters ROI selection mode
        if key == ord('t') and not self._grasp_in_progress:
            self._kcf_selecting_roi = True
            self._kcf_drawing = False
            self._kcf_roi_start = (0, 0)
            self._kcf_roi_end = (0, 0)
            self._kcf_tracker = None
            self._kcf_bbox = None
            self._kcf_pending_init = False
            self._current_track_block = None
            self._reset_tracking_pid()
            self.get_logger().info("KCF: Press and drag mouse to select tracking ROI")

        # KCF tracker pending initialization
        if getattr(self, '_kcf_pending_init', False) and self._kcf_bbox is not None:
            try:
                bgr_frame = cv2.cvtColor(result_image, cv2.COLOR_RGB2BGR)
                self._kcf_tracker = cv2.TrackerKCF_create()
                self._kcf_tracker.init(bgr_frame, self._kcf_bbox)
                self._kcf_pending_init = False
                self.get_logger().info(f"KCF tracker initialized with bbox: {self._kcf_bbox}")
            except Exception as e:
                self.get_logger().error(f"KCF init failed: {e}")
                self._kcf_pending_init = False
                self._kcf_bbox = None

        # Draw the ROI selection box
        if self._kcf_selecting_roi:
            if self._kcf_drawing or self._kcf_roi_start != self._kcf_roi_end:
                cv2.rectangle(result_image, self._kcf_roi_start, self._kcf_roi_end,
                              (0, 255, 0), 2)
            cv2.putText(result_image, "Drag ROI to select target | 't'=cancel",
                        (10, 460), cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 255, 0), 1)

        # Run KCF tracking
        if self._kcf_tracker is not None and not self._kcf_selecting_roi:
            try:
                bgr_frame = cv2.cvtColor(result_image, cv2.COLOR_RGB2BGR)
                success, bbox = self._kcf_tracker.update(bgr_frame)
                if success:
                    self._kcf_bbox = tuple(map(int, bbox))
                    self._kcf_lost_count = 0
                else:
                    self._kcf_lost_count += 1
                    if self._kcf_lost_count >= self._kcf_max_lost:
                        self.get_logger().warn("KCF tracker lost, press 't' to re-select")
                        self._kcf_tracker = None
                        self._kcf_bbox = None
                        self._current_track_block = None
                        self._reset_tracking_pid()
            except Exception as e:
                self.get_logger().warn(f"KCF update failed: {e}")

        # ---- Build tracking blocks and run the state machine ----
        blocks = []
        if self._kcf_bbox is not None and self._kcf_tracker is not None:
            x, y, w, h = self._kcf_bbox
            cx, cy = x + w // 2, y + h // 2
            if self._is_mono:
                # Monocular camera: intersect the pixel ray with a fixed-height plane in the measure frame
                pose = self._pixel_to_measure_fixed_height(cx, cy, camera_frame_id)
            elif depth_image is not None:
                pose = self._pixel_to_measure(cx, cy, depth_image, camera_frame_id)
            else:
                pose = None
            block = {
                'center': (cx, cy),
                'bbox': (x, y, w, h),
                'measure_pose': pose,
            }
            if pose is not None:
                block['measure_dist'] = math.sqrt(pose[0]**2 + pose[1]**2) * 1000
            else:
                block['measure_dist'] = float('inf')
            blocks.append(block)

        self._latest_blocks = blocks
        self._draw_kcf_result(result_image, blocks)

        if len(blocks) == 0:
            self._reset_tracking_pid()
            self._current_track_block = None
            self._display_fps(result_image, is_aligned=False)
            return

        self._current_track_block = blocks[0]
        self._update_ema_and_alignment(self._current_track_block)

        if not self._grasp_in_progress:
            self._follow_tag(blocks)

        is_aligned = self._is_stable_aligned
        self._display_fps(result_image, is_aligned=is_aligned)

 

  • Parameter file

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/param/common.yaml

Parameter Description:

  • observation_pose: [90, 107, 0, 0, 90, 30]: the 6 joint angles (degrees) of the observation pose, at which the robotic arm has the best field of view

  • grasp_offset: [0.0, 0.0, 0.0, 80.0]: grasping offset [x, y, z, pitch], compensating for the difference between the camera-detected position and the actual grasping position; pitch set to 80° means the gripper grasps almost vertically downward

  • gripping_angle: 140: the angle (degrees) when the gripper is closed; it needs to be adjusted according to the object size, and the larger the value, the tighter the gripper; for the first grasp it is recommended not to grip the object and to adjust this parameter gradually

  • track_distance_threshold: 0.13: tracking distance threshold (meters); when the target distance exceeds this value, the chassis automatically advances toward the target

  • track_pixel_tolerance: 30: pixel alignment tolerance; alignment is considered achieved when the deviation between the target center and the image center is less than this value

  • gaze_step: 3: the step (degrees) of each joint adjustment; the larger the value, the faster the tracking response but the more likely overshoot

  • ema_alpha: 0.3: EMA filter coefficient (0~1); the smaller the value, the smoother the filtering but the slower the response

  • alignment_stable_count: 60: consecutive alignment count threshold; tracking is considered stable only after reaching this count, which can then trigger grasping (KCF tracking requires a longer stabilization time)

  • usb_object_height: 0.03: the fixed height (meters) of the object in the measure coordinate frame in USB monocular mode, used for pose solving with the monocular camera

  • usb_camera_measure: [0.012, 0.0, 0.013]: the pose compensation value [x, y, z] (meters) in USB monocular mode, correcting the deviation between the camera mounting position and the origin of the measure coordinate frame

 

xxxxxxxxxx
kcf_follow_grasp:
  ros__parameters:
    observation_pose: [90, 107, 0, 0, 90, 30]
    grasp_offset: [0.0, 0.0, 0.0, 80.0]    # x,y,z axis offset distance and included angle
    gripping_angle: 140                     # gripper grasping angle, in degrees, integer
    track_distance_threshold: 0.13          # tracking distance threshold (meters); the chassis moves when exceeded
    track_pixel_tolerance: 30               # pixel alignment tolerance
    gaze_step: 3                            # joint adjustment step per cycle (degrees)
    ema_alpha: 0.3                          # EMA filter coefficient (0~1), the smaller the smoother
    alignment_stable_count: 60               # consecutive alignment count threshold; considered stable only after reaching it
    usb_object_height: 0.03                 # fixed height of the object in the measure frame in usb monocular mode (meters)
    usb_camera_measure: [0.012, 0.0, 0.013] # pose compensation in usb monocular mode (meters)

 

Wood Block Shape Sorting
Mediapipe Gesture ID Sorting AprilTag

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