Welcome to DOFBOT-Ultra repository
10. Porter
Porter
For all functions involving grabbing square blocks, please use 30x30x30 mm wooden blocks. Non-standard sized objects may cause servo 6 to stall and become damaged.
1. Overview
The purpose of this experiment is to stack four colored blocks from bottom to top in the order of blue, green, red, yellow, then place them on the center cross block. After running the code, the robotic arm will sequentially grab the fourth layer block to the yellow area, the third layer block to the red area, the second layer block to the green area, and the bottom layer block to the blue area.
The block placement method is shown in the figure below:

After executing the code, the robotic arm will move the blocks to the corresponding positions. The final result is shown below:

2. Code
Code path:
xxxxxxxxxx~/dofbot_ctrl/scripts/10.move_block.ipynb
xxxxxxxxxx#!/usr/bin/env python3#coding=utf-8import timefrom Arm_Lib import Arm_Device# Create robotic arm objectArm = Arm_Device()time.sleep(.1)from dofbot_utils.robot_controller import Robot_Controllerrobot = Robot_Controller()xxxxxxxxxx# Define block grabbing function, enable=1: grab, =0: releasedef arm_clamp_block(enable): if enable == 0: Arm.Arm_serial_servo_write(6, 60, 400) else: Arm.Arm_serial_servo_write(6, 135, 400) time.sleep(.5) # Define robotic arm movement function, simultaneously controls servos 1-5 movement, p=[S1,S2,S3,S4,S5]def arm_move(p, s_time = 500): for i in range(5): id = i + 1 if id == 5: time.sleep(.1) Arm.Arm_serial_servo_write(id, p[i], int(s_time*1.2)) else : Arm.Arm_serial_servo_write(id, p[i], s_time) time.sleep(.01) time.sleep(s_time/1000)# Robotic arm moves upwarddef arm_move_up(): Arm.Arm_serial_servo_write(2, 90, 1500) Arm.Arm_serial_servo_write(3, 90, 1500) Arm.Arm_serial_servo_write(4, 90, 1500) time.sleep(.1)xxxxxxxxxx# Define variable parameters for different positionsp_mould = robot.P_LOOK_ATp_top = robot.P_TOPp_Brown = robot.P_CENTERp_Yellow = robot.P_YELLOWp_Red = robot.P_REDp_Green = robot.P_GREENp_Blue = robot.P_BLUEp_layer_4 = robot.P_CENTER_4p_layer_3 = robot.P_CENTER_3p_layer_2 = robot.P_CENTER_2p_layer_1 = robot.P_CENTERxxxxxxxxxx# Move the robotic arm to a ready-to-grab positionarm_clamp_block(0)arm_move(p_mould, 1000)time.sleep(1)xxxxxxxxxx# Move the fourth layer block to the yellow areaarm_move(p_top, 1000)arm_move(p_layer_4, 1000)arm_clamp_block(1)arm_move(p_top, 1000)arm_move(p_Yellow, 1000)arm_clamp_block(0)time.sleep(.1)arm_move_up()arm_move(p_mould, 1100)xxxxxxxxxx# Move the third layer block to the red areaarm_move(p_top, 1000)arm_move(p_layer_3, 1000)arm_clamp_block(1)arm_move(p_top, 1000)arm_move(p_Red, 1000)arm_clamp_block(0)time.sleep(.1)arm_move_up()arm_move(p_mould, 1100)xxxxxxxxxx# Move the second layer block to the green areaarm_move(p_top, 1000)arm_move(p_layer_2, 1000)arm_clamp_block(1)arm_move(p_top, 1000)arm_move(p_Green, 1000)arm_clamp_block(0)time.sleep(.1)arm_move_up()arm_move(p_mould, 1100)xxxxxxxxxx# Move the first layer block to the blue areaarm_move(p_top, 1000)arm_move(p_layer_1, 1000)arm_clamp_block(1)arm_move(p_top, 1000)arm_move(p_Blue, 1000)arm_clamp_block(0)time.sleep(.1)arm_move_up()arm_move(p_mould, 1100)xxxxxxxxxxdel Arm # Release the Arm objectOpen the program file from Jupyter Lab and click the "Run All Cells" button on the Jupyter Lab toolbar. You will see the porter function of the robotic arm in action.
