文章目录

《从零开始配置树莓派控制机械臂》专栏

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(一)

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(二)

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(三)

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(四)

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(五)

【分享】从零开始在树莓派4B上搭建环境,使用ros控制dofbot机械臂(六)

1. 大自然搬运工

玩法简介

此实验的目的是把不同颜色的四个积木从下到上按照蓝绿红黄的顺序叠起来放到中间灰色的方块上,然后代码,机械臂会按照夹取第四层的方块放到黄色区域,夹取第三层的方块放到红色区域,夹取第二层的方块放到绿色区域,夹取最底层的方块放到蓝色区域的顺序依次执行。

摆放积木块的方式如下图所示:

执行代码后机械臂会搬运积木块到对应的位置,最后效果如下图所示:

#!/usr/bin/env   python3
#coding=utf-8
import   time
from   Arm_Lib import Arm_Device 

#   创建机械臂对象
Arm   = Arm_Device()
time.sleep(.1)
# 定义夹积木块函数,enable=1:夹住,=0:松开
def   arm_clamp_block(enable):
    if enable == 0:
        Arm.Arm_serial_servo_write(6, 60,   400)
    else:
        Arm.Arm_serial_servo_write(6, 130,   400)
    time.sleep(.5)

#   定义移动机械臂函数,同时控制1-5号舵机运动,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)

#   机械臂向上移动
def   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)
#   定义不同位置的变量参数
p_mould   = [90, 130, 0, 0, 90]
p_top   = [90, 80, 50, 50, 270]

p_Yellow   = [65, 22, 64, 56, 270]
p_Red   = [117, 19, 66, 56, 270] 

p_Green   = [136, 66, 20, 29, 270]
p_Blue   = [44, 66, 20, 28, 270]

p_layer_4   = [90, 72, 49, 13, 270]
p_layer_3   = [90, 66, 43, 20, 270]
p_layer_2   = [90, 63, 34, 30, 270]
p_layer_1   = [90, 53, 33, 36, 270]
#   让机械臂移动到一个准备抓取的位置
arm_clamp_block(0)
arm_move(p_mould,   1000)
time.sleep(1)
#   搬运第四层的积木块到黄色区域
arm_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)

#   time.sleep(1)
#   搬运第三层的积木块到红色区域
arm_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)   

#   time.sleep(1)
#   搬运第二层的积木块到绿色区域
arm_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)

#   time.sleep(1)
#   搬运第一层的积木块到蓝色区域
arm_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)

#   time.sleep(1)
del   Arm  # 释放掉Arm对象

2. 叠罗汉

玩法简介

此实验的目的与上节课‘大自然搬运工’正好相反,是把不同四周的积木块按照黄、红、绿、蓝的顺序夹取后堆叠到中间的灰色区域中。

摆放积木块的方式如下图所示:

执行代码后机械臂会把积木块堆叠起来,最后效果如下图所示:

#!/usr/bin/env   python3
#coding=utf-8
import   time
from   Arm_Lib import Arm_Device 

#   创建机械臂对象
Arm   = Arm_Device()
time.sleep(.1)
#   定义夹积木块函数,enable=1:夹住,=0:松开
def   arm_clamp_block(enable):
    if enable == 0:
        Arm.Arm_serial_servo_write(6, 60,   400)
    else:
        Arm.Arm_serial_servo_write(6, 130,   400)
    time.sleep(.5)

#   定义移动机械臂函数,同时控制1-5号舵机运动,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))
        elif id == 1 :
            Arm.Arm_serial_servo_write(id,   p[i], int(3*s_time/4))
        else:
            Arm.Arm_serial_servo_write(id,   p[i], int(s_time))
        time.sleep(.01)
    time.sleep(s_time/1000)
#   定义不同位置的变量参数
p_mould   = [90, 130, 0, 0, 90]
p_top   = [90, 80, 50, 50, 270] 

p_layer_4   = [90, 76, 40, 17, 270]
p_layer_3   = [90, 65, 44, 17, 270]
p_layer_2   = [90, 65, 25, 36, 270]
p_layer_1   = [90, 48, 35, 30, 270]

p_Yellow   = [65, 22, 64, 56, 270]
p_Red   = [118, 19, 66, 56, 270]

p_Green   = [136, 66, 20, 29, 270]
p_Blue   = [44, 66, 20, 28, 270]
#   让机械臂移动到一个准备抓取的位置
arm_clamp_block(0)
arm_move(p_mould,   1000)
time.sleep(1)
#   夹取黄色区域的方块堆叠到中间最底层的位置。
arm_move(p_top,   1000)
arm_move(p_Yellow,   1000)
arm_clamp_block(1)

arm_move(p_top,   1000)
arm_move(p_layer_1,   1000)
arm_clamp_block(0)

time.sleep(.1)

arm_move(p_mould,   1100)

#   time.sleep(1)
#   夹取红色区域的方块堆叠到中间第二层的位置。
arm_move(p_top,   1000)
arm_move(p_Red,   1000)
arm_clamp_block(1)

arm_move(p_top,   1000)
arm_move(p_layer_2,   1000)
arm_clamp_block(0) 

time.sleep(.1)

arm_move(p_mould,   1100)

#   time.sleep(1)
#   夹取绿色区域的方块堆叠到中间第三层的位置。
arm_move(p_top,   1000)
arm_move(p_Green,   1000)
arm_clamp_block(1)

arm_move(p_top,   1000)
arm_move(p_layer_3,   1000)
arm_clamp_block(0) 

time.sleep(.1)

arm_move(p_mould,   1100)

#   time.sleep(1)
#   夹取蓝色区域的方块堆叠到中间第四层的位置。
arm_move(p_top,   1000)
arm_move(p_Blue,   1000)

arm_clamp_block(1)

arm_move(p_top,   1000)
arm_move(p_layer_4,   1000)
arm_clamp_block(0) 

time.sleep(.1)

arm_move(p_mould,   1100)   

#   time.sleep(1)
del   Arm  # 释放掉Arm对象