手把手教你做小型机器狗,毕业设计。必看

这篇博客介绍了如何使用ESP32制作一款小型四足机器狗,特点是仅需基本组件,通过ArduinoIDE编程,支持手机或平板遥控。项目包括详细的电子部分列表、打印部件和组装指南,代码可在GitHub上获取,允许用户进行校准和调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前社区也分享过用树莓派做的四足机器人Pupper——《能跑能跳能遛弯儿,波士顿动力Spot的小跟班来了!项目开源!

用Arduino Uno做的Pupper的小弟——《可扩展性高,四足机器人斯坦福Pupper的小弟来了!

今天分享的是利用ESP32制作的小型四足机器狗。

特点

  • 只需要ESP32(不需要额外的PWM I2C、蓝牙模块等)
  • Arduino IDE
  • 只需要手机或平板就能遥控
  • 具有CLI接口用于校准和调试
  • 逆向运动学代码
  • 可配置的步态序列

电子部分

  • 1个38针的ESP32
  • 1个50x70毫米的原型开发板
  • 12个TowerPro MG90D舵机(使用其他舵机可能比较麻烦,因为尺寸可能不同,可以看下三个不同的类似mg90的舵机的图片)

  • 1 x INA219 (可选)
  • 1 x MPU9250 (可选)
  • 3个Mini360(DC-DC降压转换器降压模块)或类似产品,2个用于前/后腿(或更多),1个用于ESP32
  • 1个18650锂电池电池座,用于2个元件(尝试找"18650电池座smt")。
  • 2个18650锂电池
  • 一些电容器

其他

  • 8个8x12x2.5毫米轴承
  • 4条杜邦线扎带
  • 用502胶水(氰基丙烯酸酯)将所有部件粘在一起

打印部件

有些部分是镜像的,为了保证能够正确打印。请注意观察图片。

我的打印机在第一层厚度上有问题,也就是象脚。齿轮应该被尽可能完美地打印出来,所以我添加了非常小的垫片来避免这个问题,你会看到一些部件 "飞 "过表面,记得启用对它的支持。

强烈建议大家用最好质量的打印零件,特别是齿轮部分。

要打印的零件的完整清单:

  • 1 x 身体部分
  • 2 x 腿部顶部
  • 2 x 腿顶(镜像)
  • 2 x 脚底板
  • 2 x 腿部底部(镜像)
  • 4 x 肩部1
  • 4 x 肩部部件2
  • 2 x 腿部支架部分1
  • 2 x 脚管固定器部件2
  • 4 x 伺服齿轮
  • 4 x 脚管鞋,用柔性长丝打印(非必须)
  • 1 x 盖子
  • 2 x 盖板夹子

我使用Ender 3 Pro,Cura,使用支持并选择动态质量。塑料是OPY的PLA。

可以在https://www.thingiverse.com/thing:4822059 下载。

组装

准备工作

在开始之前,检查轴承是否可以很容易地安装在机体部件和肩部部件上。

还要检查肩部和车身部件上的孔是否打印得很好,伺服杜邦线(临时拆卸的伺服连接器)是否可以装在里面。

开始组装

我试图使机身尽可能的轻,因为小舵机不是很强大。

确保胶合面是平的,这边可以用一下锉刀。确保部件之间相互连接,没有空隙。

然后如上图所示把他们粘在一起。

舵机齿轮

切断舵机角(见图),使它适合舵机齿轮的部分,并把它们粘到一起。

腿部

将短的舵机角粘在 "腿顶 "部分。

将舵机插入 "腿部底部",如图所示插入杜邦线

将另一条伺服电机的杜邦线穿过 "肩 "部的一个孔。

重复上述步骤。

把机身和腿组装在一起

如之前的图片所示,将所有杜邦线穿过腿部和机身的孔。

用Arduino/ESP32或舵机测试仪将所有舵机调到中间位置。

将 "舵机齿轮 "安装在舵机上,并将舵机插入机身。想要拧紧它可能是个挑战。

挤压没有舵机的 "肩膀 "部分(但有杜邦线),将其插入轴承之间。

重复其他舵机和部件的操作。

这个时候,我们不需要用螺栓固定腿部,等会儿我们需要按照我的GitHub资源库中的说明校准腿部:

https://github.com/SovGVD/esp32-robot-dog-code

PCB部分

PCB的配置由你决定。下面只展示我的做法。

传感器连接到ESP32的默认I2C总线(GPIO 2122)。

舵机连接到:

  • 左前方:25、26、27
  • 右前:16、18、17
  • 左后腿(后):13, 12, 14
  • 右后方(后):4、2、15

你可以在代码中重新配置,但要确保ESP32 ISR库支持。

代码

在Arduino IDE上安装额外的库:

  • ESP Async Web Server
  • ESP32 ISR Servo
  • MPU9250_WE
  • INA219_WE

设置WiFi接入点凭证:

  1. config_wifi.example.h重命名为config_wifi.h
  2. APssid改为你的机器人的任何名称,例如SmallRobotDog
  3. APpass改为密码(8个或更多字符),如MySup3rPassw0rd
  4. 代码上传到ESP32后,你应该能用你的手机或平板电脑找到SmallRobotDog的WiFi。

打开浏览器,输入网址http://192.168.4.1/,你会看到两个虚拟摇杆来控制机器狗。

希望大家能够喜欢。

<think>好的,用户想寻找用于四足机器狗的Arduino代码示例。首先,我需要回忆一下之前提到的参考资料,特别是关于四足机器人和相关Arduino项目的部分。引用[2]提到了闭链五杆腿结构运动学,这可能与四足机器人的腿部设计有关。引用[3]中的六足机器人使用了Arduino FOC库控制无刷电机,虽然用户需要的是四足,但代码结构可能有相似之处,比如电机控制和步态生成。 接下来,我需要考虑四足机器人的基本结构。通常四足机器狗每个腿有2-3个舵机,因此总共可能需要8-12个舵机。用户可能需要示例代码展示如何初始化这些舵机并实现简单的步态。例如,引用[1]中的六足机器人使用了波动步态,四足可能采用类似的步态模式,但需要调整腿的顺序和协调。 然后,我需要确保代码符合用户的要求,比如使用Arduino,并且结构清晰。引用[3]中的代码使用了数组来管理多个电机,这可能是一个好的参考点。同时,引用[2]提到Arduino的易用性和经济性,这可能在代码示例中体现,比如使用简单的PWM控制舵机而不是复杂的FOC控制,除非用户特别需要无刷电机。 另外,用户可能没有详细说明机器人的具体硬件配置,比如舵机型号或传感器,因此示例代码应保持通用性,使用常见的库如Servo.h,并注释清楚各部分的功能,方便用户根据实际情况调整。同时,步态生成部分需要简单易懂,比如交替步态或爬行步态,避免过于复杂的运动学计算,除非用户有更高阶的需求。 最后,生成相关问题时要围绕用户可能的后续需求,比如步态优化、添加传感器或性能提升,这些都能帮助用户进一步开发项目。需要确保问题覆盖代码实现、硬件扩展和理论支持等方面,参考已有的引用内容来保持相关性。</think>根据您对四足机器狗Arduino代码的需求,结合参考资料的机器人控制逻辑,我整理了以下分步实现方案和示例代码: 一、四足机器人基础代码框架 ```cpp #include <Servo.h> // 定义每条腿的3个关节舵机(假设每条腿3自由度) Servo legFR[3]; //前右腿 Servo legFL[3]; //前左腿 Servo legRR[3]; //后右腿 Servo legRL[3]; //后左腿 // 舵机初始角度 int initAngles[3] = {90, 45, 135}; //髋/膝/踝关节 void setup() { // 初始化12个舵机引脚(按实际接线修改) for(int i=0; i<3; i++){ legFR[i].attach(2+i); //前右腿引脚2-4 legFL[i].attach(5+i); //前左腿5-7 legRR[i].attach(8+i); //后右腿8-10 legRL[i].attach(11+i); //后左腿11-13 setAngle(legFR[i], initAngles[i]); // 其他腿同理... } } // 舵机角度设置函数 void setAngle(Servo &s, int angle){ s.write(angle); delay(15); } void loop() { // 步态控制逻辑 basicTrotGait(); } ``` 二、基本小跑步态实现 ```cpp // 小跑步态参数 int strideHeight = 30; //抬腿高度 float dutyFactor = 0.6; //支撑相占空比 void basicTrotGait(){ // 对角腿同步运动(前右+后左 vs 前左+后右) moveLegPair(legFR, legRL, strideHeight); moveLegPair(legFL, legRR, strideHeight); } void moveLegPair(Servo* legA, Servo* legB, int lift){ // 抬腿阶段(摆动相) for(int i=0; i<3; i++){ legA[i].write(initAngles[i] + lift); legB[i].write(initAngles[i] + lift); delay(50); } // 支撑相保持 delay(1000 * dutyFactor); // 复位阶段 for(int i=0; i<3; i++){ legA[i].write(initAngles[i]); legB[i].write(initAngles[i]); delay(50); } } ``` 三、运动学增强(参考闭链五杆机构[^2]) ```cpp // 逆运动学计算(二维简化模型) void legIK(float x, float y, int &hipAngle, int &kneeAngle){ float L1 = 50; //大腿长度(mm) float L2 = 60; //小腿长度 float q2 = acos((x*x + y*y - L1*L1 - L2*L2)/(2*L1*L2)); float q1 = atan2(y,x) - atan2(L2*sin(q2), L1 + L2*cos(q2)); hipAngle = degrees(q1); kneeAngle = degrees(q2); } // 应用示例:画圆轨迹 void circularMotion(){ for(int theta=0; theta<360; theta+=10){ float x = 80 + 20*cos(radians(theta)); float y = 20 + 20*sin(radians(theta)); int hip, knee; legIK(x, y, hip, knee); legFL[1].write(hip); legFL[2].write(knee); delay(50); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被大佬糊弄的只会点灯的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值