行空板控制六足机器人

2023-02-271.9万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用行空板控制六足机器人。首先,需要准备行空板、六足机器人散件、USB转TTL工具等设备零件。接着,通过两种串口连接方式(A方案和B方案)将行空板与六足机器人连接起来。然后,通过编写代码并使用pyserial库,向六足机器人发送指令,实现对其动作的控制。此外,还介绍了通过Mind+软件和MQTT协议实现远程控制的方法。


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

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



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


行空板控制六足机器人图8



本次以幻尔的这款设备作为底盘,这款产品共使用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根线全部连接后如下图:
行空板控制六足机器人图6行空板控制六足机器人图1



第二部分      用行空板向六足机器人发送指令

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


行空板控制六足机器人图2



2,   通过阅读六足机器人的二次开发串口通信协议,波特率为9600,动作指令类型:
行空板控制六足机器人图7

3,    在mind+端用于的测试程序:

  1. from pinpong.board import Board, UART
  2. import serial
  3. ser=serial.Serial("/dev/ttyUSB0",9600)
  4. buf = bytearray(b'\x55\x55')
  5. buf.append(5 & 0xff)
  6. buf.append(6 & 0xff)
  7. buf.append(18 & 0xff)
  8. buf.append(1 & 0xff)
  9. buf.append(0 & 0xff)
  10. print(buf)
  11. ser.write(buf)  
复制代码

4,   打开串口调试工具后,记得是十六进制显示,在mind+运行后,可以得到如下结果,说明成功用行空板的串口向机器人发送一个动作指令:
行空板控制六足机器人图3


5,  这时候我们应该将行空板连接到本地WIFI,这样mind+可以通过路由器连接到行空板,返回到行空板与六足机器人连接的状态后,再次运行以上程序,将控制六足机器人行走一小步。




第三部分 如何更容易的通过行空板控制六足机器人

因为Mind+提供了大量的软件和拓展硬件,我们可以通过多种方式控制六足机器人,这边列举其中一种方法。
1,首先我们可以通过input的方式,如果输入一个字符”w”就让机器人前进(对应1号动作),字符”s”就让机器人后退(对应2号动作):
行空板控制六足机器人图5
2,我们也可以通过mind+中MQTT的方式,接收iot.dfrobot.com.cn服务器中的指令,从而实现远程控制。

例如:收到服务器中字符串”w”后,让机器人向前行走一小步。

行空板控制六足机器人图4


3,通过pygame制作一个简易的按键控制软件,当键盘上的w键被按下时,自动将字符串”w”发送到服务器端,同时机器人收到服务器端的字符串”w”后,让机器人向前行走一小步。

注意:此时一台电脑的Mind+连接行空板,另一台电脑上运行pygame程序

  1. import pygame,sys
  2. import siot
  3. import time
  4. def on_message_callback(client, userdata, msg):
  5.     print(msg.payload.decode())
  6. pygame.init()
  7. siot.init(client_id="",server="iot.dfrobot.com.cn",port=1883,user="iot用户名",password="iot密码")
  8. siot.connect()
  9. siot.loop()
  10. siot.set_callback(on_message_callback)
  11. siot.getsubscribe(topic="ioth话题")
  12. s = pygame.display.set_mode((600,400))
  13. pygame.display.set_caption("hi 键盘")   
  14. while True:
  15.     for event in pygame.event.get():
  16.         if event.type == pygame.QUIT:
  17.             sys.exit()
  18.         elif event.type == pygame.KEYDOWN:
  19.             if event.unicode == "":
  20.                 print("#",event.key,event.mod)
  21.             else:
  22.                 print(event.unicode,event.key,event.mod)
  23.                 siot.publish(
复制代码

附:mind+控制行空板代码;





move.mp

170.74 KB, 下载次数: 10312

mind+

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(19)
昊盟
昊盟
厉害厉害真厉害
lu   👣
lu 👣
从硬件的串口连接到软件的指令发送,每一步都讲解得非常清晰,期待将这些知识应用到自己的项目中,创造出更多有趣的作品。
大海986
大海986
好!来个合作,如何?
Amos Young
Amos Young
学习好教程
Forgotten
Forgotten
改造了一下,使用行空板板载的siot服务器,控制起来更迅速:
[code]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[0]
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)
[/code]
配合实时模式获取键盘更简单点:

cary_skx
cary_skx
作者
回复Forgotten
收到,谢谢
腿毛利小五郎
腿毛利小五郎
厉害厉害
花生编程
花生编程
好赞啊!
花生编程
花生编程
厉害厉害
三春牛-创客
三春牛-创客
来学习了
三春牛-创客
三春牛-创客
厉害厉害
腿毛利小五郎
腿毛利小五郎
厉害厉害!
Finland
Finland
真厉害!继续加油啊!
ThhWvnKJUAxi
ThhWvnKJUAxi
希望你能用它代替劳累的外卖员
地下铁
地下铁
这个厉害了
Eric高伟胜
Eric高伟胜
厉害厉害真厉害
aYYSW8AepLLd
aYYSW8AepLLd
厉害厉害,不错不错
Mr-k
Mr-k
厉害厉害
耘想
耘想
评论内容
Forgotten
Forgotten
评论内容
- 没有更多了 -