RRoy 发表于 2024-7-4 10:19:56

自制一个基于Arduino的3D打印六足机器人

六足机器人,顾名思义拥有六条腿,这些腿可以独立移动,使它们能够很好地穿越不同类型的地形。






材料和工具


[*]18× MG996R 伺服电机
[*]Arduino MEGA
[*]Arduino MEGA 传感器扩展板
[*]3S 锂电池 2200mAh
[*]9V 电池
[*]9V 电池连接器
[*]DC-DC 降压转换模块
[*]22 AWG 单芯电线
[*]XT60 连接器
[*]M3 螺丝
[*]扎带
[*]3D 打印机
[*]焊接铁
[*]螺丝刀
[*]万用表
视频演示
为了更好地了解整个制作过程以及查看六足机器人的实际运动,可以先看这个视频。


https://dfrobot.loll.cc/video/3D%20Printed%20Hexapod.mp4


3D 打印
这个项目所有的机械部件都是通过 3D 打印的。大多数部件可以使用 PLA,标准设置和最少的支撑来打印。

一条腿由以下部分组成:leg_mount.stl, coxa.stl, femur.stl, tibia.stl,总共需要打印 6 次。

其余的部件组成了机器人的基座,只需要打印一次,mounting_post.stl 是例外,需要两份。

建议先打印一个单腿并组装起来,来检查所有部件是否正确配合。



3D打印文件可以文末打包下载。
腿部组装






首先,将伺服电机插入腿部支架(leg_mount)、髋节(coxa)和胫骨(tibia)部件中——确保小心地将伺服电缆穿过每个部件中的布线孔。尺寸可能会非常紧,但所有部件应该能够紧密地配合在一起。

确保每个伺服电机都设置为 0 度位置,将伺服臂连接到每个电机轴上。

现在所有部件都已摆放好,组装一条腿应该相当简单。



‍我们希望腿部有尽可能大的活动范围,所以建议按照上面的 GIF 所示的角度连接关节(当腿被拉下时)。
腿部代码




下一步是让腿动起来。每个伺服的 3 个引脚需要连接:红色连接到 5v 电源或电池,棕色连接到地线,黄色连接到 Arduino 上的数字引脚。



为了测试腿部关节,这段代码片段可以上传到 Mega:


// snippet to move leg joints
#include <Servo.h>

#define SERVO_PIN 23
#define J1_OFFSET 45
#define J2_OFFSET 0
#define J3_OFFSET 90

Servo servo;

void move_joints(double j1, double j2, double j3){
if (j1>=-15 && j1<=105 && j2>=0 && j2<=90 && j3>=0 && j3<=90){
    servo.write(j1 + J1_OFFSET);
    servo.write(j2 + J2_OFFSET);
    servo.write(j3 + J3_OFFSET);
}
}

void setup(){
servo.attach(SERVO_PIN, 600, 2600);
}

void loop(){
move_joints(...);
}
逆向运动学





将腿的末端放置在特定点需要计算腿的逆运动学。结合之前的move_joints()代码,下面的代码可以用来移动到 XYZ 位置:

// inverse kinematics
#define FEMUR_L 60
#define TIBIA_L 95.334
#define TIBIA_ANGLE 17.543
#define Y_OFFSET 50
#define Z_OFFSET -90

void move_xyz(int leg, double x, double y, double z)
{
y += Y_OFFSET;
z += Z_OFFSET;

double l = sqrt(x*x + y*y + z*z);
double j1 = atan(x/y);
double j2 = acos((FEMUR_L*FEMUR_L - TIBIA_L*TIBIA_L + l*l) / (2*FEMUR_L*l)) + atan(z / sqrt(x*x + y*y));
double j3 = acos((FEMUR_L*FEMUR_L + TIBIA_L*TIBIA_L - l*l) / (2*FEMUR_L*TIBIA_L));

j1 = 45 + j1*(180/PI);
j2 = 30 + j2*(180/PI);
j3 = 90 + 30 - TIBIA_ANGLE - j3*(180/PI);

move_joints(j1, j2, j3);
}

继续组装和编程




其余的六足机器人腿可以按照之前完全相同的方式打印和组装。由于有 6 条腿,总共需要 18 个舵机。
连线






将传感器扩展板连接到 Arduino MEGA,并连接每个舵机。拍照或记录每个舵机连接到扩展板上的哪个引脚。

将 5V 和 GND 线连接到传感器保护板上的接线端,以备后用。
安装腿部






使用 M3 螺钉,将剩余的腿固定到六足机器人底座框架上,留下两条平行的腿未固定,以便进行下一步。
底盘组装








将六足机器人翻转过来,将剩下的两条腿连接到底座框架和两个安装柱(mounting_post)上,如图所示。

将 Arduino 用支柱(或扎带)固定到 mega_mount 上,并拧入安装柱。
顶盖电子设备




将 DC-DC 降压转换器模块安装到顶盖(top_cover)上。使用万用表应将其设置为输出 5V。

现在可以使用螺钉将两个半部分 hat_1 和 hat_2 固定到顶盖上。

将传感器扩展板的 5V 和 GND 线连接到降压转换器输出端。

将 XT60 电池连接器焊接到一些电线上,并将这些电线拧入降压转换器输入端。记得检查并确保此连接和上一个连接的极性正确。
步态代码


‍最后一步是将代码 hexapod.ino上传到 Arduino。在代码中有实现六足机器人简单波动步态的函数。

代码可以在文末打包下载。

代码的快速解释:

[*]每条腿经历两个阶段:摆动相和支撑相。
[*]摆动相:腿被抬起并向前移动。
[*]支撑相:腿着地,推动身体向前。
[*]腿以波纹模式移动,以确保六足机器人保持稳定。
[*]不要同时将超过两条腿从地面抬起

运动示例

[*]想象一下,这些腿的顺序是:1、2、3、4、5、6。
[*]序列从第1条腿开始进入摆动相(抬起并向前移动)。
[*]当第1条腿开始着陆时(摆动相结束),第3条腿开始其摆动相。
[*]接下来,当第3条腿着陆时,第5条腿开始其摆动相。
[*]与此同时,腿 2、4 和 6 处于支撑阶段,保持六足机器人稳定并向前移动。

有关六足机器人步态更多信息可在网上找到。

⚠️ 在上传代码之前,请确保将偏移量和引脚分配更改为正确值。
完工




原文地址:https://www.instructables.com/3D-Printed-Hexapod-Robot/

项目作者:zeroshot

译文首发于:DF创客社区

转载请注明来源信息


刘睿鹏 发表于 2024-7-4 18:31:10

这个主板是那种?不是Uno3吗?

hnyzcj 发表于 2024-7-5 06:31:29

mega

RRoy 发表于 2024-7-5 10:22:52

刘睿鹏 发表于 2024-7-4 18:31
这个主板是那种?不是Uno3吗?

Arduino MEGA

花生编程 发表于 2024-7-17 10:16:32

厉害厉害,赞!{:6_215:}
页: [1]
查看完整版本: 自制一个基于Arduino的3D打印六足机器人