yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
DOFBOT SE📖
1.First Trial
  • 1.First Trial
  • 2.Analysis of common problems
  • 3.Calibration offset
  • 4.Precautions for DIY Robotic Arm
  • 5.Robotic arm gripping anomaly solutions
2.Assembly Course
  • 1.Installation video
  • 2.Calibrate the Robotic Arm
  • 3.Install the map
3.Remote Control Course
  • 1.Mobile APP control
  • 2.USB handle control
  • 3.PC software control
4.Preparation
  • 1.Manage APP control service
  • 2.Manage JupyterLab service
  • 3.Write STM32 firmware
  • 4.Introduction to expansion board
5.Basic Control Course
  • 1.Control RGB light
  • 2.Control buzzer
  • 3.Control single servo
  • 4.Read servo angle
  • 5.Control all servo
  • 6.DOFBOT up down left right
  • 7.DOFBOT dancing
  • 8.DOFBOT memory action
  • 9.DOFBOT grab block
  • 10.Porter
  • 11.Stack block
  • 12.USB camera display
  • 13.Synchronous action
6.AI Vision Basic Course
  • 1.Gesture Recognition
  • 2.Color threshold adjustment Color calibration
  • 3.Color recognition
  • 4.Face recognition
  • 5.Garbage recognition
  • 6.Yolo object recognition
  • 7.Real-time web view
7.2D Visual Tracking Course
  • 1.PID algorithm basics
  • 2.Color block positioning
  • 3.Color block tracking
  • 4.Face positioning
  • 5.Face tracking
  • 6.Gesture recognition fixed action
8.2D Visual Grasping Course
  • 0.Visual positioning
  • 1.Gesture recognition stack blocks
  • 2.Color recognition grab blocks
  • 3.Catch game
  • 4.Color sorting and stacking
  • 5.Garbage sorting
  • 6.Color interaction
9.2D Mediapipe Course
  • 1.Hand detection
  • 2.Posture detection
  • 3.Overall inspection
  • 4.Face detection
  • 5.Face recognition
  • 6.Face effects
  • 7.3D object recognition
  • 8.Paintbrush
  • 9.Finger control
  • 10.Gesture recognition
  • 11.Gesture control robotic arm action group
  • 12.Arm posture control robotic arm
  • 13.Palm Targeting
  • 14.Robotic arm tracks the palm
  • 15.Fingertip trajectory recognition
  • 16.Fingertip trajectory control robotic arm
  • 17.Gesture Grasp and Release Objects
  • 18.Finger Control Robot Arm
10.AI Large Model Voice Module (Must Read)
  • 1. Introduction to AI Large Model Voice Module
  • 2. Flash the firmware (Must read)
  • 3. Modify the wake-up word and command word
11.2D Voice Control Course
  • 1.Simple Voice Control
  • 2.Smart Voice Control
  • 3.Voice Action Control
  • 4.Memory Learning Mode
  • 5.Color Recognition with Voice Broadcast
  • 6.Color Recognition and Grasping with Voice Broadcast
  • 7.Color Recognition and Sorting with Voice Broadcast
  • 8.Voice Recognition Target Tracking
  • 9.Voice Control Stacking
  • 10.Voice Control Color Sorting
  • 11.Garbage Recognition with Voice Broadcast
  • 12.Garbage Sorting with Voice Broadcast
12.Robotic Arm Control and Inverse Kinematics
  • 1. Robotic arm ROS control
  • 2. Inverse solution
13.3D Sorting and Grasping Course
  • 1.AprilTag ID sorting
  • 2.MediaPipe Gesture-AprilTag ID sorting
  • 3.MediaPipe Gesture-AprilTag distance sorting
  • 4.Block color sorting
  • 5.Block different shape sorting
  • 6.Yolov11 garbage sorting
14.3D Tracking Course
  • 1.AprilTag Tracking
  • 2.Color Block Tracking
  • 3.KCF Object Tracking
15.3D Voice Control for Sorting & Tracking Course
  • 1.Voice Control AprilTag ID Sorting
  • 2.Voice Control Color Block Sorting
  • 3.Voice Control Yolov11 Garbage Recognition Sorting
  • 4.Voice Control AprilTag Tracking
  • 5.Voice Control Color Block Tracking
  • 6.Voice Control Object Tracking
16.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
17.AI Model Development
  • 1. Register a model service provider account
  • 2. Configure 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
18.AI Model – Text Version
  • 1.Semantic understand instruction following
  • 2.Multimodal visual understand
  • 3.Text Large Model + robotic arm control
  • 4.Multimodal Large Model+video understanding
  • 5.Multimodal Large Model+robotic arm gripping
  • 6.Multimodal Large Model+robotic arm tracking
  • 7.Multimodal Large Model+robotic arm sorting
  • 8.Multimodal Large Model+robotic arm handling
  • 9.Multimodal Large Model+Color Blocks Back In Place
  • 10.Multimodal Large Model + Intent Prediction + Robotic Arm Gripping
  • 11.Text Large Model + YOLOv11 + Intelligent Garbage Classification
19.AI Model – Voice Version
  • 1.Semantic understand instruction following
  • 2.Multimodal visual understand
  • 3.Text Large Model + robotic arm control
  • 4.Multimodal Large Model+video understanding
  • 5.Multimodal Large Model+robotic arm gripping
  • 6.Multimodal Large Model+robotic arm tracking
  • 7.Multimodal Large Model+robotic arm sorting
  • 8.Multimodal Large Model+robotic arm handling
  • 9.Multimodal Large Model+Color Blocks Back In Place
  • 10.Multimodal Large Model + Intent Prediction + Robotic Arm Gripping
  • 11.Text Large Model + YOLOv11 + Intelligent Garbage Classification
20.AI Model – Fun Applications
  • 1.AI Butler-Intent Inference
  • 2.AI Encyclopedia-Arithmetic Master
  • 3.AI Encyclopedia-You asked I Pointed
  • 4.AI Encyclopedia-Nutritional Analysis
  • 5.AI Encyclopedia-Problem Solving Expert
  • 6.AI Encyclopedia-English Spelling
  • 7.AI Butler-Garbage Sorting
  • 8.AI Top Chef
21.MoveIt2 Course
  • 1. MoveIt Configuration
  • 2. MoveIt Usage
  • 3. MoveIt Drive Real Robot
  • 4. MoveIt Random Movement
  • 5. MoveIt Forward Kinematics Design
  • 6. MoveIt Inverse Kinematics Design
  • 7. MoveIt Cartesian Path
  • 8. MoveIt Scene Design
  • 9. MoveIt Trajectory Planning
  • 10. MoveIt Collision Detection
22.YOLOv11 Development Course
  • 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 Conversion
  • 9. Model Prediction
23. Linux Operating System
  • 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
24.OpenCV Course
  • 1.Introduction to Open Source CV
  • 2.Image reading and display
  • 3.Picture writing
  • 4.Image Quality
  • 5.Pixel operations
  • 6.Image zoom
  • 7.Picture cut
  • 8.Picture pan
  • 9.Picture mirroring
  • 10.Affine transformation
  • 11.Picture rotation
  • 12.perspective transformation
  • 13.Grayscale processing
  • 14.Binary image
  • 15.Edge green detection
  • 16.Line segment drawing
  • 17.Rectangular circle drawing
  • 18.Text and picture drawing
25.Advanced Visuals Course
  • 1. QR Code
  • 2. Human Pose Estimation
  • 3. Object Detection
  • 4. AR Vision
  • 5. ROS + OpenCV Basics
26.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
27.Jupyter Lab Usage Course
  • 0.Read the document before operation
  • 1.Jupyter Lab environment construction
  • 2.Basic use of Jupyter Widgets
  • 3.Launch JupyterLab
  • 4.How to Use JupyterLab
Download
  • APP(iOS/Android)
  • VM File
  • Instruction manual
  • Hardware_3DModelFile
  • PC_Software
  • Code
  • Communication Protocol-Python Library
  • Tools
Download ZIP

Welcome to DOFBOT SE repository

2.USB handle control

USB Handle Control (Optional)

Install the Handle

Insert the USB cable of the wired gamepad into a USB port on the Windows computer. For a wireless gamepad, insert the USB receiver into the computer and make sure it is recognized by the virtual machine.

Run the Handle Control Program

Code path:

/home/yahboom/Dofbot/1.telecontrol/4.arm_handle/arm_handle_old.ipynb

The following code steps must be executed one at a time based on actual conditions; do not run all of them at once.

xxxxxxxxxx
#   Gamepad Remote Control
In this example, we will use a gamepad controller connected to a web browser to remotely control the robot arm.
​x
###   Create a Gamepad Controller
​
The first thing we need to do is create an instance of the 'Controller' widget, which we will use to drive our Dofbot-se.
​
The "Controller" widget accepts an "index" parameter that specifies the controller number. If you want to correctly use your gamepad to control the robot arm, you can:
​
1.   Open [http://html5gamepad.com](http://html5gamepad.com) in your browser.
​
2.   Press a button on the gamepad you are using
​
3.   Remember the corresponding index number that appears after pressing the button
​
Next, we will use that index to create and display the controller.
xxxxxxxxxx
import ipywidgets.widgets as widgets
​
controller = widgets.Controller(index=0)  # Replace with the index number of the controller you just tested and are using
​
display(controller)
xxxxxxxxxx
# Library path imports
import   threading
import   time
​
#   Thread operation library
import   inspect
import   ctypes
​
#   Import the robot arm object
from   Arm_Lib import Arm_Device
Arm   = Arm_Device()
xxxxxxxxxx
#Create a method to actively stop the process
​
def   _async_raise(tid, exctype):
​
    """raises the exception,   performs cleanup if needed"""
​
    tid = ctypes.c_long(tid)
​
    if not inspect.isclass(exctype):
        exctype = type(exctype)
​
    res =   ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
​
    if res == 0:
​
        raise ValueError("invalid thread   id")
    elif res != 1:
​
        # """if it returns a   number greater than one, you're in trouble,
​
        # and you should call it again with   exc=NULL to revert the effect"""
​
          ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
def   stop_thread(thread):
​
    _async_raise(thread.ident, SystemExit)
xxxxxxxxxx
#   Create a method for gamepad joystick control of the robot arm
​
##   If the gamepad's analog mode is turned on (red light on), the left direction keys will not work. Please use the left and right joysticks and the L/R keys on both sides to control the robot arm.
​
##   Program functions:
​
1.   The left joystick and direction keys control servo 1 and servo 2. Left and right control servo 1's left and right movement; up and down control servo 2's forward and backward movement.
​
2.   The right joystick and number keys control servo 5 and servo 6. Left and right control servo 5's left and right rotation; up and down control servo 6's gripper tightening and releasing.
​
3.   L1 and L2 control servo 3 moving forward or backward.
​
4.   R1 and R2 control servo 4 moving forward or backward.
​
5.   Pressing the SELECT key sets all robot arm servos to 90 degrees.
xxxxxxxxxx
def   Arm_Handle():
​
    s_time = 500
​
    s_step = 1
​
    angle_1 = angle_2 = angle_3 = angle_4 = angle_5 = angle_6 = 90
​
    while 1:
​
        # Due to individual differences in joysticks, the reset value may not be zero, so 0.1 is used as a filter to avoid accidental operation.
​
        # Servo 2, A1: negative is up, positive is down
​
        if controller.axes[1].value <= 0.1 and controller.axes[1].value >= -0.1:
​
            time.sleep(.000001)
​
        else:
​
            if controller.axes[1].value > 0.1:
​
                angle_2 += s_step
​
            else:
​
                angle_2 -= s_step
​
            if angle_2 > 180:
​
                angle_2 = 180
​
            elif angle_2 < 0:
​
                angle_2 = 0
​
            Arm.Arm_serial_servo_write(2, angle_2, s_time)
​
            time.sleep(0.01)
​
​
​
        # Servo 1, A0: negative is left, positive is right
​
        if (controller.axes[0].value <= 0.1 and controller.axes[0].value >= -0.1):
​
                time.sleep(.000001)
​
        else:
​
            if controller.axes[0].value > 0.1:
​
                angle_1 -= s_step
​
            else:
​
                angle_1 += s_step
​
​
​
            if angle_1 > 180:
​
                angle_1 = 180
​
            elif angle_1 < 0:
​
                angle_1 = 0
​
            Arm.Arm_serial_servo_write(1, angle_1, s_time)
​
            time.sleep(0.01)
​
​
​
        # Servo 6, NUM1=B0, NUM3=B2, A2: negative is up, positive is down
​
        if controller.buttons[0].value == True:
​
            angle_6 += s_step
​
            if angle_6 > 180:
​
                angle_6 = 180
​
            elif angle_6 < 0:
​
                angle_6 = 0
​
            Arm.Arm_serial_servo_write(6, angle_6, s_time)
​
            time.sleep(0.01)
​
        elif controller.buttons[2].value == True:
​
            angle_6 -= s_step
​
            if angle_6 > 180:
​
                angle_6 = 180
​
            elif angle_6 < 0:
​
                angle_6 = 0
​
            Arm.Arm_serial_servo_write(6, angle_6, s_time)
​
            time.sleep(0.01)
​
        elif controller.axes[2].value > 0.5:
​
            angle_6 -= s_step
​
            if angle_6 > 180:
​
                angle_6 = 180
​
            elif angle_6 < 0:
​
                angle_6 = 0
​
            Arm.Arm_serial_servo_write(6, angle_6, s_time)
​
            time.sleep(0.01)
​
        elif controller.axes[2].value < -0.5:
​
            angle_6 += s_step
​
            if angle_6 > 180:
​
                angle_6 = 180
​
            elif angle_6 < 0:
​
                angle_6 = 0
​
            Arm.Arm_serial_servo_write(6, angle_6, s_time)
​
            time.sleep(0.01)
​
​
​
        # Servo 5, NUM2=B1, NUM4=B3, A5: negative is left, positive is right
​
        if controller.buttons[1].value == True:
​
            angle_5 += s_step
​
            if angle_5 > 180:
​
                angle_5 = 180
​
            elif angle_5 < 0:
​
                angle_5 = 0
​
            Arm.Arm_serial_servo_write(5, angle_5, s_time)
​
            time.sleep(0.01)
​
        elif controller.buttons[3].value == True:
​
            angle_5 -= s_step
​
            if angle_5 > 180:
​
                angle_5 = 180
​
            elif angle_5 < 0:
​
                angle_5 = 0
​
            Arm.Arm_serial_servo_write(5, angle_5, s_time)
​
            time.sleep(0.01)
​
        elif controller.axes[5].value > 0.5:
​
            angle_5 += s_step
​
            if angle_5 > 180:
​
                angle_5 = 180
​
            elif angle_5 < 0:
​
                angle_5 = 0
​
            Arm.Arm_serial_servo_write(5, angle_5, s_time)
​
            time.sleep(0.01)
​
        elif controller.axes[5].value < -0.5:
​
            angle_5 -= s_step
​
            if angle_5 > 180:
​
                angle_5 = 180
​
            elif angle_5 < 0:
​
                angle_5 = 0
​
            Arm.Arm_serial_servo_write(5, angle_5, s_time)
​
            time.sleep(0.01)
​
        # Servo 4, R1=B5, R2=B7
​
        if controller.buttons[5].value == True:
​
            angle_4 -= s_step
​
            if angle_4 > 180:
​
                angle_4 = 180
​
            elif angle_4 < 0:
​
                angle_4 = 0
​
            Arm.Arm_serial_servo_write(4, angle_4, s_time)
​
            time.sleep(0.01)
​
        elif controller.buttons[7].value == True:
​
            angle_4 += s_step
​
            if angle_4 > 180:
​
                angle_4 = 180
​
            elif angle_4 < 0:
​
                angle_4 = 0
​
            Arm.Arm_serial_servo_write(4, angle_4, s_time)
​
            time.sleep(0.01)
​
        # Servo 3, L1=B4, L2=B6
​
        if controller.buttons[4].value == True:
​
            angle_3 -= s_step
​
            if angle_3 > 180:
​
                angle_3 = 180
​
            elif angle_3 < 0:
​
                angle_3 = 0
​
            Arm.Arm_serial_servo_write(3, angle_3, s_time)
​
            time.sleep(0.01)
​
        elif controller.buttons[6].value == True:
​
            angle_3 += s_step
​
            if angle_3 > 180:
​
                angle_3 = 180
​
            elif angle_3 < 0:
​
                angle_3 = 0
​
            Arm.Arm_serial_servo_write(3, angle_3, s_time)
​
            time.sleep(0.01)
​
        # Press SELECT button B8 to set all robot arm servos to 90 degrees
​
        if controller.buttons[8].value == True:
​
            angle_1 = angle_2 = angle_3 = angle_4 = angle_5 = angle_6 = 90
​
            Arm.Arm_serial_servo_write6(90, 90, 90, 90, 90, 90, 1000)
​
            time.sleep(1)
​
​
​
xxxxxxxxxx
#Run the cell code below to start the gamepad real-time control thread
​
#After waiting for the gamepad control thread to start, you can control the robot arm with the gamepad.
​
thread2 = threading.Thread(target=Arm_Handle)
​
thread2.setDaemon(True)
​
thread2.start()
xxxxxxxxxx
#End the gamepad thread; if this cell is run, the gamepad cannot control the robot arm.
​
#If thread start or end fails,
​
#please restart the kernel and run from the beginning again.
​
stop_thread(thread2)

Handle Control

The left joystick controls servo 1 and servo 2. Moving left controls servo 1 to the left; moving right controls servo 1 to the right. Moving up controls servo 2 forward; moving down controls servo 2 backward.

The left direction keys have the same functions as the left joystick.

The right joystick controls servo 5 and servo 6. Moving left controls servo 5 to rotate left; moving right controls servo 5 to rotate right. Moving up controls servo 6 to tighten the gripper; moving down controls servo 6 to release the gripper.

The right buttons have the same functions as the right joystick.

L1 controls servo 3 forward; L2 controls servo 3 backward.

R1 controls servo 4 forward; R2 controls servo 4 backward.

The SELECT key sets all robot arm servos to 90 degrees, standing vertically upright.

Mobile APP control
PC software control

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文