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

3.Robot Keyboard Control

⌨️ Robot Keyboard Control

1. Course Introduction

This course will introduce how to control the chassis movement of the A1 Pro robot and the individual joint servos of the 6-DOF robotic arm via keyboard. Through this lesson, you will gain an in-depth understanding of the ROS 2 keyboard control node's working mechanism, topic communication flow, Ackermann chassis kinematics constraints, and the coordinated control logic of the underlying hardware drivers.

🎯 Course Objectives

  1. Master the startup and parameter configuration of the keyboard control node: Learn how to launch via command line and modify control step size and speed limit parameters as needed.

  2. Proficiently master key mappings and operations: Master omnidirectional/directional movement of the chassis, dynamic speed adjustment, robotic arm joint 1~6 selection and angle fine-tuning, and one-key reset operations.

  3. Understand system communication topology and message definitions: Master the data flow and roles of /cmd_vel (geometry_msgs/msg/Twist) and arm_joint (dofbot_pro_interface/msg/ArmJoint).

  4. In-depth mastery of source code implementation and safety mechanisms: Understand terminal non-blocking key capture, Ackermann non-omnidirectional chassis constraints, command timeout protection, and servo software/hardware limit protection mechanisms.


2. System Architecture and Communication Topology

The keyboard control node yahboom_keyboard.py serves as the upper-layer control interaction node, collecting user keyboard input and simultaneously publishing chassis velocity commands and robotic arm servo commands. The underlying driver node Ackman_driver_A1P.py (node name driver_node) receives commands and communicates with the STM32/Rosmaster expansion board via serial port, driving motors and bus servos to execute actions while feeding back the robot's actual status.

Hardware Execution Mechanism

Chassis and Robotic Arm Driver Node (driver_node)

ROS 2 Topic Bus

Keyboard Control Node (yahboom_keyboard_ctrl)

User Interaction Layer

Publish velocity command

Publish joint angles

Real-time feedback

Real-time feedback

Robotic arm actual pose

Chassis odometry

Keyboard Input (Terminal)

Terminal Non-blocking Key Capture
termios / select

Chassis Velocity Calculation and Speed Limit
Linear / Angular Limit

Robotic Arm Joint Calculation and Limits
Joint 1~6 / Step / Bounds

/cmd_vel
(geometry_msgs/msg/Twist)

arm_joint
(dofbot_pro_interface/msg/ArmJoint)

/arm_status/arm_joint
(sensor_msgs/msg/JointState)

/odom_raw
(nav_msgs/msg/Odometry)

cmd_vel_callback
(Ackermann steering constraint / 0.5s timeout protection)

single_arm_callback
(Servo limit check / Serial communication)

Sensor and Servo Status Publishing

Chassis Drive Motor + Steering Servo
(Ackermann structure)

6-Axis Bus Servo Motors
(Joint 1 ~ Joint 6)


3. Preparation

3.1 Start Chassis Hardware Driver

Open a terminal and run the following launch file to start the chassis and robotic arm driver nodes for the A1 Pro robot:

xxxxxxxxxx
ros2 launch yahboomcar_bringup yahboomcar_bringup_A1_launch.py

Start Chassis Driver

Note

After successful driver startup, the robotic arm will automatically execute a power-on reset motion (moving to initial pose [90, 120, 0, 0, 90, 0]), and the terminal will output A1 driver initialized related information.

3.2 Start Keyboard Control Node

Run the keyboard control node in a new terminal:

xxxxxxxxxx
ros2 run yahboomcar_ctrl yahboom_keyboard

Start Keyboard Control Node

Important

  1. Window Focus: The keyboard control node captures key presses through terminal standard input. Ensure the terminal window running keyboard control is active/selected.

  2. Input Method State: Must switch the input method to English half-width mode. Chinese input method will intercept key presses and cause no response.

  3. Safe Operation: Ensure there is sufficient open space around the vehicle before movement to avoid collisions.

4. Key Operation Guide

4.1 Chassis Motion Control

KeyFunction DescriptionKinematics Command (geometry_msgs/msg/Twist)
i / IForwardlinear.x = +speed, angular.z = 0
,Backwardlinear.x = -speed, angular.z = 0
u / UMove left-forward (forward + left turn)linear.x = +speed, angular.z = +turn
o / OMove right-forward (forward + right turn)linear.x = +speed, angular.z = -turn
m / MMove left-backward (backward + left turn)linear.x = -speed, angular.z = -turn
.Move right-backward (backward + right turn)linear.x = -speed, angular.z = +turn
k / SpaceEmergency forced stopImmediately clear velocity and publish all-zero command
Other unbound keysSmooth deceleration stopAutomatically brake after 5 consecutive cycles without valid movement input

Warning

Ackermann Chassis Steering Special Note:

The A1 Pro chassis uses front-wheel Ackermann steering + rear-wheel dual motor drive structure, and physically does not support in-place rotation (zero-radius turn). In the underlying driver Ackman_driver_A1P.py, when linear velocity $v_x = 0$, angular velocity $\omega_z$ is forcibly set to zero to protect the front-wheel steering servo. Therefore, pressing j or l alone will not cause the vehicle to move. Movement keys (such as u, o, m, .) must be used in combination to generate steering motion.

4.2 Speed Adjustment and Speed Limit Protection

The node default initial linear velocity is 0.2 m/s, and initial angular velocity is 1.0 rad/s.

KeyFunction DescriptionAdjustment Ratio
q / QIncrease both linear and angular velocity by 10%$\times 1.1$
z / ZDecrease both linear and angular velocity by 10%$\times 0.9$
w / WIncrease linear velocity only by 10%Linear velocity $\times 1.1$
x / XDecrease linear velocity only by 10%Linear velocity $\times 0.9$
e / EIncrease angular velocity only by 10%Angular velocity $\times 1.1$
c / CDecrease angular velocity only by 10%Angular velocity $\times 0.9$

Tip

The node has built-in maximum speed protection mechanisms:

  • Maximum linear velocity limit: Limited by linear_speed_limit parameter (default 1.0 m/s)

  • Maximum angular velocity limit: Limited by angular_speed_limit parameter (default 5.0 rad/s, the underlying driver further limits to within 3.0 rad/s)

When speed reaches the set limit, the terminal will print Linear speed limit reached! or Angular speed limit reached! prompts.

4.3 Robotic Arm 6-DOF Control

The A1 Pro is equipped with 6-DOF serial bus servos. The keyboard control node supports single-joint selection adjustment and one-key pose reset.

KeyFunction DescriptionCorresponding Action and Output
1 ~ 6Select currently controlled joint (Joint 1 ~ 6)Terminal displays selected joint number, current angle, and allowed range of motion
a / A / + / =Increase current selected joint angle (default +5°)Publish ArmJoint message, auto-clamp at upper limit
d / D / - / _Decrease current selected joint angle (default -5°)Publish ArmJoint message, auto-clamp at lower limit
0One-key reset all 6 joints to initial poseRestore to [90, 120, 0, 0, 90, 0], execution time 1500ms

Servo Parameters and Angle Limits Reference Table

Servo NumberJoint Name (URDF Joint)Allowed Angle Range (arm_bounds)Default Initial Angle (init_pose)Mechanism Motion Function Description
Servo 1arm1_Joint0° ~ 180°90°Robotic arm base left-right horizontal rotation (90° is straight ahead)
Servo 2arm2_Joint-60°~ 180°120°Upper arm front-back pitch (controls robotic arm extension range)
Servo 3arm3_Joint-20° ~ 180°0°Forearm up-down pitch (controls end effector working height)
Servo 4arm4_Joint-20° ~ 180°0°Wrist up-down pitch (adjusts end effector gripper pose pitch angle)
Servo 5arm5_Joint0° ~ 270°90°Wrist rotation servo (adjusts gripper horizontal/vertical rotation angle)
Servo 6rlink1_Joint0° ~ 180°0°End effector gripper open-close (0° is fully open, closing angle adapts to held object size)

4.4 Auxiliary and Status Toggle Keys

KeyFunction DescriptionNotes
s / SPause / Resume keyboard controlToggle stop flag. When paused, continuously publish all-zero velocity, blocking movement commands
Ctrl + CSafe exitAutomatically restore terminal original settings and send stop command to chassis

5. Source Code Analysis and Core Mechanism Implementation

Source code file location:

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_ctrl/yahboomcar_ctrl/yahboom_keyboard.py

5.1 ROS 2 Node Initialization and Parameter Declaration

In the Yahboom_Keybord class constructor, the node completes publisher creation, parameter declaration, and terminal environment preservation:

​x
class Yahboom_Keybord(Node):
    def __init__(self, name):
        super().__init__(name)
        # Create chassis velocity publisher and robotic arm servo publisher
        self.pub = self.create_publisher(Twist, 'cmd_vel', 1)
        self.pub_arm = self.create_publisher(ArmJoint, 'arm_joint', 10)

        # Declare configurable ROS 2 parameters
        self.declare_parameter("linear_speed_limit", 1.0)
        self.declare_parameter("angular_speed_limit", 5.0)
        self.declare_parameter("arm_joint_step", 5)
        self.declare_parameter("arm_joint_time", 200)
        self.declare_parameter("init_pose", [90, 120, 0, 0, 90, 0])
        self.declare_parameter(
            "arm_bounds",
            [0.0, 180.0, 0.0, 180.0, 0.0, 180.0, 0.0, 180.0, 0.0, 270.0, 0.0, 180.0]
        )

        # Load parameters and initial pose
        self.linenar_speed_limit = float(self.get_parameter("linear_speed_limit").value)
        self.angular_speed_limit = float(self.get_parameter("angular_speed_limit").value)
        self.arm_joint_step = int(self.get_parameter("arm_joint_step").value)
        self.arm_joint_time = int(self.get_parameter("arm_joint_time").value)
        
        # Save terminal attributes for restoration on exit
        self.settings = termios.tcgetattr(sys.stdin)

5.2 Terminal Non-blocking Key Capture

Standard input is set to Raw mode via the Linux standard termios module, combined with select.select with 0.1 second timeout to achieve single-character immediate reading without pressing Enter:

xxxxxxxxxx
def getKey(self):
    tty.setraw(sys.stdin.fileno())
    rlist, _, _ = select.select([sys.stdin], [], [], 0.1)
    if rlist:
        key = sys.stdin.read(1)
    else:
        key = ''
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings)
    return key

5.3 Robotic Arm Servo Adjustment and One-key Reset

When receiving angle adjustment keys, the node calculates target angle, performs range limiting, and packs/publishes ArmJoint messages:

xxxxxxxxxx
def adjust_joint(self, joint_id, delta):
    if joint_id < 1 or joint_id > 6:
        return
    idx = joint_id - 1
    lower, upper = self.arm_bounds[idx]
    # Software safety limit clipping
    new_angle = max(lower, min(upper, self.arm_joints[idx] + delta))
    self.arm_joints[idx] = new_angle
    # Publish single servo control command, single step time 200ms
    self.pub_arm_joint(joint_id, new_angle, self.arm_joint_time)
    print(f"\r[Arm] Joint {joint_id}: {new_angle}° (Limits: {lower}~{upper}°)")

def reset_arm(self):
    init_pose_param = list(self.get_parameter("init_pose").value)
    self.arm_joints = [int(angle) for angle in init_pose_param]
    # Iterate and publish all 6 joints, execution time set to 1500ms for smooth return
    for joint_id, angle in enumerate(self.arm_joints, start=1):
        self.pub_arm_joint(joint_id, angle, 1500)
    print(f"\r[Arm] Reset all joints to: {self.arm_joints}")

5.4 Underlying Driver Response and Safety Protection Mechanisms

The underlying driver Ackman_driver_A1P.py provides multiple safety and kinematics guarantees:

  1. Ackermann Non-omnidirectional Kinematics Filtering:

    xxxxxxxxxx
    # When linear velocity is 0, force angular velocity to 0 to prevent in-place steering from damaging the steering mechanism
    if abs(vx) < 1e-4:
        vx = 0.0
        angular = 0.0
  2. Communication Timeout Protection (Watchdog): The driver maintains cmd_vel_timeout (default 0.5s). If the keyboard node crashes or exits abnormally, and no new velocity command is received for more than 0.5 seconds, the driver thread will automatically trigger shutdown protection.

  3. Robotic Arm Status Feedback Loop: After executing servo motions, the driver publishes sensor_msgs/msg/JointState status on the /arm_status/arm_joint topic at 5Hz frequency, enabling the robot 3D model in RViz2 to maintain real-time pose synchronization with the physical robotic arm.


6. Operation Verification and Debugging Tips

6.1 Verify Chassis Velocity Command Publishing

Execute the following command in another terminal to observe the data flow of the /cmd_vel topic when pressing keys:

xxxxxxxxxx
ros2 topic echo /cmd_vel

When pressing i for forward movement, you will see output similar to:

xxxxxxxxxx
linear:
  x: 0.20000000298023224
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---

6.2 Verify Robotic Arm Control Commands and Feedback

xxxxxxxxxx
# Listen to single servo control commands published by the keyboard node
ros2 topic echo /arm_joint

# Listen to actual robotic arm joint status feedback from the driver node
ros2 topic echo /arm_status/arm_joint

After pressing 1 to switch to joint 1 and then pressing a to increase the angle, the /arm_joint topic will capture:

id: 1
joint: 95
time: 200
---
Robot Handle Control
Linear Velocity Calibration

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