yahboom
HomeTutorialsProduct
Solution
Blog
Online Store
About Us
EN/中文
Store
ROSMASTER A1 PRO📖
00.Configuration and Operation Guide
  • 0. Unboxing and Review
  • 1.Assembly Videos
  • 2.User Manual
  • 3.Enter Docker (For Raspberry Pi)
  • 4.A1Pro Front Wheel Servo Calibration
  • 5.USB Camera Calibration
  • 6.Depth Camera Calibration
  • 7.FAQ
  • 8.Desktop Configuration Center and Remote Control Guide
01.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
02.Lidar Course
  • 1.Lidar Introduction and Use
  • 2.Lidar Obstacle Avoidance
  • 3.Lidar Following
  • 4.Lidar Patrol
  • 5.GMapping-SLAM Mapping
  • 6.Cartographer-SLAM Mapping
  • 7.Slam-Toolbox Mapping
  • 8.Lifelong Mode Mapping
  • 9.Navigation2 Single Point Navigation
  • 10.Navigation2 Multi Point Navigation
  • 11.Cartographer Relocalization Navigation
  • 12.Slam-Toolbox Localization Navigation
  • 13.Synchronous Mapping And Navigation
  • 14.Aruco Visual Relocalization Navigation
  • 15.Mobile App Mapping And Navigation
  • 16.AprilTag Transport
  • 17.Color Block Transport
03.USB Camera-Depth Camera Course
  • 1.USB Camera Introduction
  • 2.USB Camera Intrinsic Calibration
  • 3.Nuwa-HP60C Camera Introduction (Depth Camera Only)
  • 4.Depth Camera Distance Measurement (Depth Camera Only)
  • 5.Depth Pseudo Color Image (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)
04.Robotic Arm and 3D Space Gripping Course
  • 0.Robotic Arm Basic Usage
  • 1.Robotic Arm Kinematics
  • 2.Robotic Arm Chassis Coordination Control
  • 3.AprilTag ID Sorting
  • 4.AprilTag Height Anomaly Sorting
  • 5.AprilTag Tracking and Grasping
  • 6.Color Block Sorting
  • 7.Color Block Height Anomaly Sorting
  • 8.Color Block Tracking and Grasping
  • 9.Wood Block Shape Sorting
  • 10.KCF Tracking and Grasping Objects
  • 11.Mediapipe Gesture ID Sorting AprilTag
  • 12.Mediapipe Gesture Height Sorting AprilTag
  • 13.Desktop Tracking and Grasping AprilTag
  • 14.3D Spatial Tracking AprilTag
  • 15.Line Following Obstacle Clearing
  • 16.Transformer Model Tracking Algorithm
05.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
06.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
07.OpenClaw Interaction Method
  • 1.OpenClaw Webchat Interaction
  • 2.OpenClaw Tui Interaction
  • 3.OpenClaw Voice Dialogue Interaction
  • 4.OpenClaw WhatsApp Interaction
08.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
09.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 Prop Placement
  • 2.Build Sand Table Map
  • 3.Visual Relocation Markers
  • 4.Map Mapping Markers
  • 5.OpenClaw Scenario Sandbox Comprehensive Case
11.AI 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 Model Development
  • 1.Register a Model Service Provider Aaccount
  • 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 - Text Version
  • 1.Semantic Understand and Command Follow
  • 2.Multimodal Visual Understand
  • 3.Multimodal Visual Understand + Robotic Arm Gripping
  • 4.Multimodal Visual Understand+SLAM Navigation
  • 5.Robotic Arm Gripping+Multimodal Visual Understand+SLAM Navigation
  • 6.Intention Estimation
14.AI Model - Voice Version
  • 1.Semantic Understand and Command Follow
  • 2.Multimodal Visual Understand
  • 3. Multimodal Large Model+Robotic Arm Gripping
  • 4.Multimodal Visual Understand+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 Cobotic Arm
  • 13.Gesture Grabbing and Releasing Objects
  • 14.Finger Control Robotic Arm
  • 15.Medipipe Gesture Control Robotic arm Cction 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.Scene Design
  • 8.Trajectory Planning
  • 9.Collision Detection
  • 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
  • SystemFile
  • Code
  • 3D_Model_File
  • Software_Tools
  • Hardware_Info
  • Introduction_Manual
  • Script_File
  • Dify AI Agent
Download ZIP

Welcome to ROSMASTER A1 PRO repository

4.OpenClaw Waste Sorting

OpenClaw Garbage Sorting

1. Course Content

Course Overview

In industrial automation and smart environmental protection scenarios, domestic waste classification and grasping is a highly challenging embodied intelligence task. Unlike regular square wooden blocks, real-world garbage comes in various bizarre shapes and messy arrangements (e.g., diagonally lying cans, bent banana peels, crumpled paper balls, etc.).

To make a robot sort garbage as dexterously as human hands, two core challenges must be solved:

  1. Not only knowing "what it is", but also "how it's tilted (pose angle)": Ordinary AI object detection gives a "horizontal square bounding box" (HBB). If a banana peel is tilted 45° on the table, the horizontal box not only captures the banana peel but also contains a lot of empty background. Most critically, the robotic arm has no idea which direction to grasp! If cutting vertically, it's easy to slip and launch the object. This course adopts advanced YOLO-OBB (Oriented Bounding Box, rotated object detection box), which can fit the object edge to output a bounding box with rotation angle. It not only identifies whether the garbage belongs to "kitchen waste, recyclable, other, or hazardous", but also precisely calculates the object's tilt angle (Angle).

  2. Wrist rotation following the trend (adaptive pose grasping): The robotic arm wrist (joint 5) rotates clockwise or counter-clockwise according to the OBB output rotation angle, keeping the two gripper claws always parallel to the object edge, achieving human finger-like adaptive gripping grasping.

Note
Hardware note: This case combines depth point cloud spatial anti-projection and 3D pose calculation, requiring RGB-D depth camera to run.

image-20261009174130863

Learning Objectives

  1. Understand the core advantages of YOLO-OBB rotated bounding boxes compared to traditional detection boxes for irregular object grasping.

  2. Learn to call the GetWasteRecognitionResults, GraspWaste, PlaceWaste toolchain through OpenClaw dialogue or CLI commands.

  3. Master the large model edge reasoning "on-demand start/stop" mechanism and performance tuning methods.

  4. Master the tuning techniques for key garbage grasping parameters (waste_grasp_offset, waste_grasp_distance).

  5. This case uses 3* 3 * 3 matching garbage cubes


2. Preparation

  • Start core nodes:

xxxxxxxxxx
ros2 launch dofbot_pro_bringup mcp_service.launch.py
  • If you need voice broadcast replies:

xxxxxxxxxx
ros2 launch dofbot_pro_bringup mcp_service.launch.py   launch_openclaw_bridge:=true 

image-20260904094627705

  • For voice dialogue interaction:

xxxxxxxxxx
ros2 run ackermann_mcp asr_detect

image-20260904101250184


3. Robotic Arm Garbage Sorting Case Practice

Tip
Instructions can be expressed naturally. Here we use WebChat as an example.

Under the hood, OpenClaw breaks down human language and calls the following 3 core tools:

Tool NameInput ParametersCore Function
GetWasteRecognitionResultsNoneWake YOLO model, get names, classification and pose of all garbage in view
GraspWaste--waste-name (garbage name)Autonomously adjust chassis and gripper angle, precisely grasp specified garbage object
PlaceWasteNoneDeposit grasped garbage into garbage bin according to preset safe action group

Step 1: Issue Garbage Recognition and Sorting Command

Enter the command in the WebChat interface:

"Help me grasp the kitchen waste in front of you" or "Grasp the banana peel in front"

image-20260904105531441

Step 2: YOLO Model Wake-up and Status Perception

  • Garbage recognition is driven by the underlying YOLO-OBB model. To balance onboard chip heat dissipation and low power consumption, the model is in standby energy-saving mode by default.

  • When first receiving a command, the system automatically wakes up and loads the model (with a few seconds cold start time). The model automatically unloads and hibernates after 240 seconds of continuous no-task, greatly protecting system computing power:

image-20260904105504276

After loading is complete, the system automatically pops up the detection window, displaying tilted rotated boxes and classification labels in real-time:

image-20260904110209683

Step 3: Get Recognition Results and Frame Image Return

OpenClaw calls GetWasteRecognitionResults to get the target list, and the system automatically saves a detection verification image with OBB tilted rotated box annotations:

xxxxxxxxxx
~/MODELS/multi_brains_file/yolo_detect.png

image-20260904105732826

Developer practical debugging tip: Besides large model dialogue, you can also use CLI command tool to query current garbage detection data with one click:

xxxxxxxxxx
robot_control call-tool GetWasteRecognitionResults

The terminal will directly print each object's name, classification confidence and image path in the view:

image-20260904110459180

Step 4: Tilt Angle Adaptive Grasping and Safe Deposit

  1. OpenClaw calls GraspWaste, the car chassis first moves into the graspable range;

  2. The robotic arm wrist rotates following the object's OBB angle direction, the gripper clamps down and closes, tightly locking the garbage;

  3. Call PlaceWaste, the robotic arm delivers the garbage smoothly into the corresponding garbage bin according to the step-by-step action group and releases the gripper:

image-20260904110611820

image-20261009164234732


4. YOLO-OBB Rotated Object Detection Node Analysis

To ensure extremely fast response of the robotic arm control main process, garbage detection is encapsulated as an independent ROS 2 node waste_detect.

Startup Configuration Description

In the MCP startup file mcp_service.launch.py, the detection node is configured to be off by default (detect_enable: False), started on demand:

xxxxxxxxxx
waste_classify = Node(
    package="waste_classify",
    executable="waste_detect",
    name="waste_detect",
    parameters=[
        common_param_file,
        {'image_save_path': os.path.join(os.path.expanduser('~'), 'MODELS', 'multi_brains_file', 'yolo_detect.png')},
        {'model_path': yolov26_model_path},
        {'show_image': True},
        {'detect_enable': False},  # Standby hibernation by default to protect CPU
        {'device': device}
    ],
    emulate_tty=True,
    output='screen'
)

Manual Control Service Interface (Debugging Dedicated)

Developers can manually switch detection function status through ROS 2 service at any time:

  1. Query current running status (operation=0):

    xxxxxxxxxx
    ros2 service call /waste_enable_srv waste_classify_msg/srv/WasteEnable "{operation: 0}" 

    image-20260904110715981

  2. Manually enable detection (operation=1):

    xxxxxxxxxx
    ros2 service call /waste_enable_srv waste_classify_msg/srv/WasteEnable "{operation: 1}" 

    image-20260904110723621

  3. Manually disable detection to hibernate (operation=2):

    xxxxxxxxxx
    ros2 service call /waste_enable_srv waste_classify_msg/srv/WasteEnable "{operation: 2}"

    image-20260904110759988

Topic Data Monitoring

After enabling detection, the node continuously publishes rotated box data to the /waste_detecttions topic. You can capture single frame data with:

xxxxxxxxxx
ros2 topic echo /waste_detecttions --once

Typical message output:

xxxxxxxxxx
header:
  stamp:
    sec: 1778052123
    nanosec: 473421724
  frame_id: ''
waste_detections:
- class_name: peach-pit
  classification: OtherWaste
  confidence: 0.88507
  center_x: 390.08
  center_y: 314.08
  width: 32.05
  height: 25.97
  angle: -0.0227
  points:
  - x: 406.40, y: 326.70
  - x: 405.81, y: 300.73
  - x: 373.76, y: 301.46
  - x: 374.35, y: 327.43

Key Data Field Popular Explanation

Field NameTypePopular Meaning and Role in Robotic Arm
class_namestringSpecific garbage item name (e.g., peach pit peach-pit, banana peel banana-peel)
classificationstringClassification category (Recyclable, KitchenWaste, OtherWaste, HazardousWaste)
confidencefloatModel certainty (0.0~1.0), filter low confidence noise
center_x, center_yfloatRotated box geometric center pixel coordinates, used for inverse solving 3D grasping position
anglefloatObject rotation radians relative to the plane, core parameter! The robotic arm wrist rotates following this angle for adaptive grasping
pointsPoint2D[]4 real corner coordinates of the rotated box, used for drawing tilted bounding box

5. Core Source Code Analysis

  • Source code file path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/dofbot_pro_ws/src/ackermann_mcp/ackermann_mcp/action_controller.py

5.1 GetWasteRecognitionResults() — Intelligent Wake-up and Result Acquisition

​x
def GetWasteRecognitionResults(self) -> list:
    '''Main interface for getting YOLO garbage detection results'''
    # Step 1: First move robotic arm to global top-view detection posture to avoid large arm blocking camera
    self._pubSix_Arm(self.waste_detect_pose)
    time.sleep(3.0)
    
    # Step 2: Check if detection node is in standby, if so actively wake up and enable (operation=1)
    response: WasteEnable.Response = self.waste_enable_client.call(WasteEnable.Request(operation=0))
    if not response.detect_enable:
        response = self.waste_enable_client.call(WasteEnable.Request(operation=1))
        if not response.success:
            return [False, "Failed to enable waste detection"]
        time.sleep(10.0)  # Give model sufficient time to complete cold start initialization reasoning
    
    # Step 3: Call acquisition service to extract recognition results in current view
    response: GetWaste.Response = self.get_waste_client.call(GetWaste.Request())
    if not response.success:
        return [False, response.message]

    if len(response.waste_detections) == 0:
        return [False, "No waste detected"]
    
    # Step 4: Format and package recognition results (including classification, confidence and verification image path)
    result_lines = []
    for i, item in enumerate(response.waste_detections, 1):
        result_lines.append(
            f"{i}. {item.class_name} ({item.classification}), confidence: {item.confidence:.2f}")
    
    result = waste_recognition_result(
        detections=result_lines,
        total_count=len(response.waste_detections),
        yolo_detect_image=response.image_path)
    return [True, result]

Key point popular explanation:

  • Importance of posture first: Before taking the photo, the program first calls _pubSix_Arm(self.waste_detect_pose) to raise the robotic arm to look up at the table. If the robotic arm is still lying on the table, the camera view will be blocked by its own arm for more than half, unable to capture the full table.


5.2 GraspWaste() — Tilt Angle Adaptive Following Grasping

This is the most brilliant part of the entire sorting algorithm: converting the detection box angle into the real rotation angle of joint 5.

xxxxxxxxxx
def GraspWaste(self, waste_name: str) -> list[bool, str]:
    '''Grasp specified named garbage object'''
    self._pubSix_Arm(self.waste_detect_pose)
    time.sleep(3.0)
    
    # 1. Query 3D spatial pose and OBB data of target object (retry up to 5 times to improve anti-shake robustness)
    result = self._get_target_pose(waste_name, max_attempts=5)
    if not result[0]:
        return [False, result[1]]
    target_pose: Pose = result[1]
    target_item: WasteItem = result[2]

    # 2. Chassis autonomous coordination: If beyond grasp distance threshold, car actively moves forward or laterally aligns
    adjusted_flag = False
    if target_pose.position.x > self.waste_grasp_distance[0]:
        adjusted_flag = True
        delta_x = target_pose.position.x - self.waste_grasp_distance[0]
        self.move_by_odom(distance=abs(delta_x), direction='forward')
        time.sleep(4.0)

    if abs(target_pose.position.y) > self.waste_grasp_distance[1]:
        adjusted_flag = True
        direction = 'left' if target_pose.position.y > 0 else 'right'
        self.move_by_odom(distance=abs(target_pose.position.y), direction=direction)
        time.sleep(4.0)

    # 3. If car has moved, must re-photograph to confirm pose, eliminate odometry accumulated error
    if adjusted_flag:
        result = self._get_target_pose(waste_name, max_attempts=5)
        target_pose = result[1]
        target_item = result[2]

    # 4. Core formula: Wrist joint 5 pose adaptive mapping!
    item_rotation_angle = math.degrees(target_item.angle)
    if abs(item_rotation_angle) > 5.0:
        # 90° is the wrist neutral position, superimpose the object's rotation tilt angle onto the wrist joint
        arm_joint5_angle = 90 + item_rotation_angle
    else:
        arm_joint5_angle = 90  # If deviation less than 5°, keep neutral to avoid motor tiny vibration

    # 5. Execute inverse kinematics descent grasping, pass in wrist rotation angle arm_joint5_angle
    self._waste_grasp(grasp_x=target_pose.position.x,
                      grasp_y=target_pose.position.y,
                      grasp_z=target_pose.position.z,
                      joint_5_angle=arm_joint5_angle,
                      grasp_pitch=self.waste_grasp_offset[3])

    # 6. Safe retreat
    self.move_by_odom(direction='backward', distance=self.auto_back_dist)
    return [True, "Grasp waste successfully"]

Key point popular explanation:

  • arm_joint5_angle = 90 + angle geometric mystery:
    DOFBOT Pro robotic arm's joint 5 controls gripper rotation around the axis, and 90° is exactly the gripper's "horizontal symmetric open" neutral balance position. When OBB measures the object tilted 30° to the right (angle = +30°), joint 5 is set to 90 + 30 = 120°; the gripper is exactly tilted 30°, perfectly aligned with the object's two long edges for a secure grip, preventing slippage!


5.3 PlaceWaste() — Smooth Deposit Action Group

xxxxxxxxxx
def PlaceWaste(self):
    '''Safely deposit grasped garbage into collection bin'''
    # Action 1: First raise big arm (shoulder joint 2 to 135°) and elbow (joint 4 to 50°), lift garbage to avoid table
    self.SingleJoint_pub.publish(ArmJoint(id=2, joint=135, time=1200))
    self.SingleJoint_pub.publish(ArmJoint(id=4, joint=50, time=1200))
    time.sleep(2.0)
    
    # Action 2: Overall translate to above preset position in garbage bin
    self._pubSix_Arm(self.waste_place_pose)
    time.sleep(3.0)
    
    # Action 3: Gripper opens to 0°, object falls into bin by gravity
    self.SingleJoint_pub.publish(ArmJoint(id=6, joint=0, time=1500))
    time.sleep(2.0)
    
    # Action 4: Robotic arm gracefully resets, car backs up to open safe space
    self._pubSix_Arm(self.init_arm_pose)
    self.move_by_odom(direction='backward', distance=self.auto_back_dist)
    return True

6. Parameter Debugging

  • Core parameter configuration file path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/dofbot_pro_ws/src/dofbot_pro_bringup/config/common.yaml

6.1 Garbage Sorting Control Parameters

xxxxxxxxxx
mcp_service:
  ros__parameters:
    waste_grasp_offset: [0.0, 0.015, -0.02, 1.57]  # Grasping fine-tuning offset [X, Y, Z, gripper pitch]
    waste_grasp_distance: [0.24, 0.09]             # Chassis approach threshold [X front-rear threshold, Y left-right lateral threshold]
    waste_place_pose: [90, 50, 90, 50, 90, 140]    # Garbage placement posture angles
    waste_detect_pose: [90, 90, 50, -30, 90, 0]    # Global top-view detection posture angles
Parameter NameDefault ValueFunction and Debugging Suggestion
waste_grasp_offset[2]-0.02Z-axis downward exploration depth (meters). If can't grasp thin objects, adjust to -0.03; if hitting table, adjust to -0.01
waste_grasp_distance[0]0.24Front-rear distance threshold (meters). Drive car forward when target exceeds 24cm
waste_grasp_distance[1]0.09Left-right distance threshold (meters). Drive car laterally when target eccentricity exceeds 9cm
waste_place_poseSix joint listEach joint angle when placing garbage, fine-tune based on your garbage bin height and placement position

6.2 YOLO Reasoning and Performance Optimization Parameters

waste_detect:
  ros__parameters:
    detect_enable: False              # Standby by default on startup
    conf: 0.1                         # Confidence threshold (increase to prevent false detection, decrease to prevent missed detection)
    auto_shutdown_time: 240.0         # Auto hibernation time when idle with no task (seconds)
    device: "cuda:0"                  # Reasoning device (onboard GPU acceleration)
    show_image: True                  # Whether to show real-time detection debug window
OpenClaw Arm Fixed-point Placement
OpenClaw SLAM Mapping And Navigation

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