本项目是在原有项目基础上进行的改进,改进了六足机器人的姿态算法,使姿态在变化时更稳定
基于Arduino的3D打印六足机器人
- 一、项目说明
- 二、所需配件
- 三、3D打印
- 四、机械腿部
- 4.1腿部结构
- 4.2腿部代码
- 4.3 COPY腿部结构
- 4.4伺服电机接线
- 4.5 连接腿部结构
- 五、底盘安装
- 六、顶部电路设计
- 七、机器人源码烧录
- 八、完成成果
一、项目说明
六足机器人是一种有6条腿的机器人,它们可以独立移动,这使得它们擅长在不同类型的地形上移动。几个月前,我突然想到要自己制作一个六足机器人,只是为了好玩。因此,在本项目中,展示了一个完全由3D打印制作、基于Arduino的六足机器人的设计和组装。
实物图:
视频:
六足机器人
二、所需配件
部件:
- 18× MG996R 伺服电机
- Arduino MEGA
- Arduino MEGA 传感器盾板
- 3S 锂电池 2200mAh
- 9V 电池
- 9V 电池桶形连接器
- DC-DC 降压转换模块
- 22 AWG 固体芯线
- XT60 连接器
- M3 螺丝
- 扎带
工具: - 3D 打印机
- 烙铁
- 螺丝刀
- 万用表
三、3D打印
对于这个项目,所有的机械部件都是3D打印的。其中大部分可以使用标准的PLA设置打印,并且需要的支撑很少。
一条腿由以下部件组成:leg_mount.stl, coxa.stl, femur.stl, tibia.stl,
这些部件总共需要打印6次。
其余的部件构成了机器人的底座,只需要打印一次,其中mounting_post.stl是唯一的例外,因为它需要打印两份。
⚠️ 我建议首先打印一条腿并组装起来,以检查所有部件是否正确配合。
以上需要的.stl文件可以私信我进行获取
四、机械腿部
4.1腿部结构
首先,将伺服电机插入leg_mount、coxa和tibia部件中 - 确保小心地将伺服电缆穿过每个部件的电线孔。尺寸可能非常紧凑,但所有部件应该能够紧密地组装在一起。
确保每个伺服电机都设置在0度位置,然后将伺服角连接到每个电机轴上。现在,所有部件都摆放好了,组装一条腿应该相当简单。我们希望腿部有尽可能宽的运动范围,所以我建议按照上面GIF中显示的相同角度连接关节(当腿部被拉下时)。
⚠️ 注意每个关节连接的角度,因为我们稍后会在代码中使用这些角度。
4.2腿部代码
下一步是让腿部动起来。每个伺服电机的3个引脚需要连接:红色连接到5V电源或电池,棕色连接到地线,黄色连接到Arduino上的数字引脚。
// 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);
}
4.3 COPY腿部结构
其余的六足机器人的腿部可以按照之前完全相同的方式打印和组装。由于有6条腿,总共需要18个伺服电机。
4.4伺服电机接线
将传感器盾板连接到Arduino MEGA,并连接每个伺服电机。拍照或记录哪个伺服电机连接到盾板上的哪个引脚。
将5V和GND线连接到传感器盾板上的端子块上,以备后用。
4.5 连接腿部结构
使用M3螺丝,将剩余的腿固定到六足机器人的底座框架上,留下两条彼此平行的腿在下一步中不固定。
五、底盘安装
将六足机器人翻转过来,底部朝上,按照图片所示将剩下的两条腿连接到基座框架和两个安装柱上。
使用支架(或扎带)将Arduino固定在mega_mount上,并用螺丝拧入安装柱。
六、顶部电路设计
将DC-DC降压转换模块安装到顶盖部件上。使用万用表设置为输出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处于它们的支撑阶段,保持六足机器人稳定并向前移* 动。
- 关于六足机器人步态的更多信息可以在线找到。
⚠️ 在上传代码之前,请确保将偏移量和引脚分配更改为正确的值。
这里的源码可以私信我进行获取
八、完成成果
构建现在已经完成!
要使用六足机器人:
使用9V电池通过桶形插孔为Arduino供电
通过XT60连接器连接锂聚合物电池。
该代码旨在易于扩展,使六足机器人能够转弯、以不同的速度移动并以不同的步态行走。
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!