cary_skx 发表于 2023-2-27 16:47:35

行空板控制六足机器人

本帖最后由 cary_skx 于 2023-2-27 17:40 编辑

六足机器人源于国外的一个开源项目,最早在B站看到相关的视频,国内很多UP主也参考制作,另外有一些衍生版本。相比常规的轮式机器人,双足和四足来说,感觉是眼前一亮,更有是仿生的科技感,在参考一些开源的内容后,发现制作起来难度主要在两个方面:1、需要制作控制舵机的主控板;2、需要制作的零件较多(6只脚)。所以购买成品更加高效,这边推荐幻尔的六足机器人散件。

相关视频:
行空板控制六足机器人

https://www.bilibili.com/video/BV1ig4y1J7dh/?share_source=copy_web&vd_source=f164bf5b95b84af44a3c21d74f7c18d0

提前准备的设备零件:
[*]行空板x1,
[*]六足机器人基本款/散件,
[*]USB转TTL工具,
[*]Type-C充电线(20厘米以内),
[*]20厘米杜邦线。





本次以幻尔的这款设备作为底盘,这款产品共使用18个总线舵机,舵机接入到总线控制器(如下图),机器人的动作组文件一共有56个,大多数是和开源项目一致,少部分动作是幻尔自己开发的,可以下载安装到控制器,实际上我们需要做的事情只是让行空板通过串口发送指令给到总线控制器。

第一部分      连接行空板与六足机器人
1,串口连接方式有两种:A方案 行空板上的UART接口是金手指P0和P3,增加拓展件,用杜邦线连接;B方案 增加一个USB转TTL设备,行空板板载了USB接口,内置了ch340、cp2102、pl2303串口驱动,因此可以直接使用一个USB to TTL转接板连接串口设备,使用pyserial库进行通信。本文使用了B方案
2,六足机器人总线控制器上的二次开发通信接口一共有4个针脚,除了用于串口通信,电压正好是5V,可以给行空板供电,需要购买一根Type-C的供电线,供电端需要改装成杜邦线头。
4根线全部连接后如下图:
https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155400&size=300x300&key=fc8e5c22f47490d2&nocache=yes&type=fixnonehttps://mc.dfrobot.com.cn/forum.php?mod=image&aid=155399&size=300x300&key=245fce3071faecc7&nocache=yes&type=fixnone

第二部分      用行空板向六足机器人发送指令
1,关于串口的使用,建议大家先下载微软官方的串口调试工具,使用mind+控制行空板发送消息给到自己电脑上,就像把左口袋的东西放到右口袋。连接时注意TX和RX相对连接。




https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155401&size=300x300&key=539dab5291f4a0d8&nocache=yes&type=fixnone
2,   通过阅读六足机器人的二次开发串口通信协议,波特率为9600,动作指令类型:https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155402&size=300x300&key=644a75582b218975&nocache=yes&type=fixnone
3,    在mind+端用于的测试程序:
from pinpong.board import Board, UART
import serial

ser=serial.Serial("/dev/ttyUSB0",9600)
buf = bytearray(b'\x55\x55')
buf.append(5 & 0xff)
buf.append(6 & 0xff)
buf.append(18 & 0xff)
buf.append(1 & 0xff)
buf.append(0 & 0xff)

print(buf)
ser.write(buf)
4,   打开串口调试工具后,记得是十六进制显示,在mind+运行后,可以得到如下结果,说明成功用行空板的串口向机器人发送一个动作指令:
https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155404&size=300x300&key=c63c58a91319f7f9&nocache=yes&type=fixnone
5,这时候我们应该将行空板连接到本地WIFI,这样mind+可以通过路由器连接到行空板,返回到行空板与六足机器人连接的状态后,再次运行以上程序,将控制六足机器人行走一小步。



第三部分 如何更容易的通过行空板控制六足机器人
因为Mind+提供了大量的软件和拓展硬件,我们可以通过多种方式控制六足机器人,这边列举其中一种方法。
1,首先我们可以通过input的方式,如果输入一个字符”w”就让机器人前进(对应1号动作),字符”s”就让机器人后退(对应2号动作):https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155405&size=300x300&key=8e01851dffd4ad49&nocache=yes&type=fixnone2,我们也可以通过mind+中MQTT的方式,接收iot.dfrobot.com.cn服务器中的指令,从而实现远程控制。
例如:收到服务器中字符串”w”后,让机器人向前行走一小步。
https://mc.dfrobot.com.cn/forum.php?mod=image&aid=155406&size=300x300&key=db6bb58aa8599fc8&nocache=yes&type=fixnone

3,通过pygame制作一个简易的按键控制软件,当键盘上的w键被按下时,自动将字符串”w”发送到服务器端,同时机器人收到服务器端的字符串”w”后,让机器人向前行走一小步。
注意:此时一台电脑的Mind+连接行空板,另一台电脑上运行pygame程序
import pygame,sys
import siot
import time

def on_message_callback(client, userdata, msg):
    print(msg.payload.decode())

pygame.init()
siot.init(client_id="",server="iot.dfrobot.com.cn",port=1883,user="iot用户名",password="iot密码")
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="ioth话题")

s = pygame.display.set_mode((600,400))
pygame.display.set_caption("hi 键盘")   
while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            sys.exit()
      elif event.type == pygame.KEYDOWN:
            if event.unicode == "":
                print("#",event.key,event.mod)
            else:
                print(event.unicode,event.key,event.mod)
                siot.publish(
附:mind+控制行空板代码;




Forgotten 发表于 2023-2-28 18:07:56

{:6_213:}{:6_213:}{:6_213:}

Mr-k 发表于 2023-3-6 20:41:11

厉害厉害

aYYSW8AepLLd 发表于 2023-3-8 19:21:43

厉害厉害,不错不错

Eric高伟胜 发表于 2023-3-9 08:37:05

厉害厉害真厉害

地下铁 发表于 2023-3-10 09:03:35

这个厉害了

ThhWvnKJUAxi 发表于 2023-3-16 18:59:49

希望你能用它代替劳累的外卖员

潘一豪 发表于 2023-3-25 14:37:53

真厉害!继续加油啊!

腿毛利小五郎 发表于 2023-3-27 09:06:44

厉害厉害!

三春牛-创客 发表于 2023-3-28 16:30:58

厉害厉害

三春牛-创客 发表于 2023-3-28 16:33:59

来学习了

花生编程 发表于 2023-3-28 16:35:55

厉害厉害

花生编程 发表于 2023-3-28 16:37:25

好赞啊!

腿毛利小五郎 发表于 2023-4-3 09:34:40

厉害厉害

Forgotten 发表于 2023-5-8 20:39:51

改造了一下,使用行空板板载的siot服务器,控制起来更迅速:
import time
from pinpong.board import Board, UART
import serial
import pygame,sys


def action(act,times):
    buf = bytearray(b'\x55\x55')
    buf.append(5 & 0xff)
    buf.append(6 & 0xff)
    buf.append(act& 0xff)
    buf.append(times & 0xff)
    buf.append(0 & 0xff)
    ser.write(buf)

def stop():
    buf = bytearray(b'\x55\x55')
    buf.append(2 & 0xff)
    buf.append(7 & 0xff)
    ser.write(buf)   

def contr(keys):
    key = keys
    n = len(keys)
    if key == "w":
      action(21,n)
    elif key == "s":
      action(22,n)
    elif key == "a":
      action(7,n)
    elif key == "d":
      action(8,n)
    elif key == "q":
      action(23,n)
    elif key == "e":
      action(24,n)
    elif key == " ":
      stop()

ser=serial.Serial("/dev/ttyUSB0",9600)

import siot

# siot事件回调函数
def on_message_callback(client, userdata, msg):
    val = msg.payload.decode()
    contr(val)

# siot初始化
siot.init(client_id="",server="127.0.0.1",port=1883,user="siot",password="dfrobot")
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="spider/contrl")
siot.publish(topic="spider/contrl", data="hello")

import time
while True:
    time.sleep(1)
   
   

配合实时模式获取键盘更简单点:

cary_skx 发表于 2023-9-8 14:16:20

Forgotten 发表于 2023-5-8 20:39
改造了一下,使用行空板板载的siot服务器,控制起来更迅速:




收到,谢谢

Amos Young 发表于 2023-9-11 09:01:35

学习好教程

大海986 发表于 2023-11-15 10:55:02

好!来个合作,如何?

11111111111 发表于 2024-7-19 17:29:07

从硬件的串口连接到软件的指令发送,每一步都讲解得非常清晰,期待将这些知识应用到自己的项目中,创造出更多有趣的作品。

昊盟 发表于 2024-11-27 11:22:31

厉害厉害真厉害
页: [1]
查看完整版本: 行空板控制六足机器人