1. 功能说明

本文示例将实现R322样机Delta型腿机器狗原地摆臂、原地圆形摆动、原地蹲起、原地踏步的功能。

原地摆臂

原地圆形摆动

原地蹲起

原地踏步

2. 电子硬件

本实验中采用了以下硬件:
主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

SH-SR舵机扩展板
传感器 近红外传感器
六轴陀螺仪
电池 7.4v锂电池、11.1V动力电池

其它

电压显示器

电路连接说明:Delta型腿机器狗的电路连接方式可参考上文【R322】Delta型腿机器狗-全动作展示

3. 功能实现

编程环境:Arduino 1.8.0

下面提供一个Delta型腿机器狗原地动作(原地摆臂、原地圆形摆动、原地蹲起、原地踏步)的参考例程,具体实验效果可参考演示视频。

① 原地摆臂例程(parallel_dog_liftLeg.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-06-26 https://www.robotway.com/------------------------------*//*****Copyright 2017 Robot TIme摆臂例程*****/#include "Tlc5940.h"#include "tlc_servos.h"#include <math.h>#include "types.h"#include "config.h"// 相关函数声明/***** 红外相关函数 *****/void IRInit(); //红外初始化void enableIR(); //红外使能void disableIR(); //关闭红外void updateIR(); //红外避障更新动作/***** 平衡相关函数 *****/void switchAdjustStat(uint stat); //切换平衡调节模式 不调节/原地调节/行进间调节void readGyroSerial(); //读取陀螺仪串口消息void adjustAct(); //平衡调节动作/****** 腿部动作相关函数 *****/void setTurnLeftFlag(bool flag); //修改左转状态标志位void setTurnRightFlag(bool flag); //修改右转状态标志位void leg1(); //更新1号腿(左前)位置void leg2(); //更新2号腿(左后)位置void leg3(); //更新3号腿(右前)位置void leg4(); //更新4号腿(右后)位置bool calc(Point3d p, bool leg1, bool leg2, bool leg3, bool leg4); //逆解计算函数/***** 整机动作相关函数 *****/void dogReset(Point3d initPos, uint waitTime); //复位动作void dogInit(); //初始化动作void upDown(float x, float y, float z1, float z2, uint times); //蹲起动作void drawCircle(float ox, float oy, float z, float r, uint times); //原地圆形摆动动作void stepping(float x, float y, float z1, float z2, uint times); // 原地踏步动作void liftShoulder(uint height, uint times); //原地摆臂动作//动作周期计数器int cycleCount;//复位计数器void resetCycleCount(){cycleCount = -1;}void updateCycleCount(){cycleCount++;}//当前运动状态dogMode currentMode;//切换运动状态void setMode(dogMode mode){if (mode == currentMode) return;if (mode == DOG_MODE_TURN_LEFT){setTurnLeftFlag(true);setTurnRightFlag(false);} else if (mode == DOG_MODE_TURN_RIGHT){setTurnLeftFlag(false);setTurnRightFlag(true);} else {setTurnLeftFlag(false);setTurnRightFlag(false);}if (mode == DOG_MODE_BACK) //后退时关闭红外传感器{disableIR();} else if (mode == DOG_MODE_STOP) //静止后开始原地姿态调节{switchAdjustStat(ADJUST_STAT_LEG);dogReset({0, 0, Leg_Init_Z_Pos}, 200);}currentMode = mode;}void updateMode(){if (cycleCount == MOTION_TIMES + 1) setMode(DOG_MODE_BACK);if (cycleCount == 3 * MOTION_TIMES) setMode(DOG_MODE_LEFT);if (cycleCount == 4 * MOTION_TIMES) setMode(DOG_MODE_RIGHT);if (cycleCount == 5 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_FRONT);if (cycleCount == 6 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_BACK);if (cycleCount == 7 * MOTION_TIMES) setMode(DOG_MODE_LEFT_BACK);if (cycleCount == 8 * MOTION_TIMES) setMode(DOG_MODE_LEFT_FRONT);if (cycleCount == 9 * MOTION_TIMES) setMode(DOG_MODE_TURN_LEFT);if (cycleCount == 10 * MOTION_TIMES) setMode(DOG_MODE_TURN_RIGHT);if (cycleCount == 11 * MOTION_TIMES) setMode(DOG_MODE_STOP);}void setup(){//陀螺仪连接串口,波特率115200Serial.begin(115200);//舵机驱动板初始化Tlc.init(0);tlc_initServos();   // Note: this will drop the PWM freqency down to 50Hz.//红外传感器初始化IRInit();//大狗身体初始化dogInit();//原地摆臂动作10次后停止liftShoulder(40, 10);while(1);}void loop(){}

② 原地圆形摆动例程(parallel_dog_drawCircle.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-06-26 https://www.robotway.com/------------------------------*//*****Copyright 2017 Robot TIme原地圆形摆动例程*****/#include "Tlc5940.h"#include "tlc_servos.h"#include <math.h>#include "types.h"#include "config.h"// 相关函数声明/***** 红外相关函数 *****/void IRInit(); //红外初始化void enableIR(); //红外使能void disableIR(); //关闭红外void updateIR(); //红外避障更新动作/***** 平衡相关函数 *****/void switchAdjustStat(uint stat); //切换平衡调节模式 不调节/原地调节/行进间调节void readGyroSerial(); //读取陀螺仪串口消息void adjustAct(); //平衡调节动作/****** 腿部动作相关函数 *****/void setTurnLeftFlag(bool flag); //修改左转状态标志位void setTurnRightFlag(bool flag); //修改右转状态标志位void leg1(); //更新1号腿(左前)位置void leg2(); //更新2号腿(左后)位置void leg3(); //更新3号腿(右前)位置void leg4(); //更新4号腿(右后)位置bool calc(Point3d p, bool leg1, bool leg2, bool leg3, bool leg4); //逆解计算函数/***** 整机动作相关函数 *****/void dogReset(Point3d initPos, uint waitTime); //复位动作void dogInit(); //初始化动作void upDown(float x, float y, float z1, float z2, uint times); //蹲起动作void drawCircle(float ox, float oy, float z, float r, uint times); //原地圆形摆动动作void stepping(float x, float y, float z1, float z2, uint times); // 原地踏步动作void liftShoulder(uint height, uint times); //原地摆臂动作//动作周期计数器int cycleCount;//复位计数器void resetCycleCount(){cycleCount = -1;}void updateCycleCount(){cycleCount++;}//当前运动状态dogMode currentMode;//切换运动状态void setMode(dogMode mode){if (mode == currentMode) return;if (mode == DOG_MODE_TURN_LEFT){setTurnLeftFlag(true);setTurnRightFlag(false);} else if (mode == DOG_MODE_TURN_RIGHT){setTurnLeftFlag(false);setTurnRightFlag(true);} else {setTurnLeftFlag(false);setTurnRightFlag(false);}if (mode == DOG_MODE_BACK) //后退时关闭红外传感器{disableIR();} else if (mode == DOG_MODE_STOP) //静止后开始原地姿态调节{switchAdjustStat(ADJUST_STAT_LEG);dogReset({0, 0, Leg_Init_Z_Pos}, 200);}currentMode = mode;}void updateMode(){if (cycleCount == MOTION_TIMES + 1) setMode(DOG_MODE_BACK);if (cycleCount == 3 * MOTION_TIMES) setMode(DOG_MODE_LEFT);if (cycleCount == 4 * MOTION_TIMES) setMode(DOG_MODE_RIGHT);if (cycleCount == 5 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_FRONT);if (cycleCount == 6 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_BACK);if (cycleCount == 7 * MOTION_TIMES) setMode(DOG_MODE_LEFT_BACK);if (cycleCount == 8 * MOTION_TIMES) setMode(DOG_MODE_LEFT_FRONT);if (cycleCount == 9 * MOTION_TIMES) setMode(DOG_MODE_TURN_LEFT);if (cycleCount == 10 * MOTION_TIMES) setMode(DOG_MODE_TURN_RIGHT);if (cycleCount == 11 * MOTION_TIMES) setMode(DOG_MODE_STOP);}void setup(){//陀螺仪连接串口,波特率115200Serial.begin(115200);//舵机驱动板初始化Tlc.init(0);tlc_initServos();   // Note: this will drop the PWM freqency down to 50Hz.//红外传感器初始化IRInit();//大狗身体初始化dogInit();//原地做圆形摆动10周后停止drawCircle(0, 0, -120, 60, 10);while(1);}void loop(){}

③ 原地蹲起例程(parallel_dog_updown.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-06-26 https://www.robotway.com/------------------------------*//*****Copyright 2017 Robot TIme原地蹲起例程*****/#include "Tlc5940.h"#include "tlc_servos.h"#include <math.h>#include "types.h"#include "config.h"// 相关函数声明/***** 红外相关函数 *****/void IRInit(); //红外初始化void enableIR(); //红外使能void disableIR(); //关闭红外void updateIR(); //红外避障更新动作/***** 平衡相关函数 *****/void switchAdjustStat(uint stat); //切换平衡调节模式 不调节/原地调节/行进间调节void readGyroSerial(); //读取陀螺仪串口消息void adjustAct(); //平衡调节动作/****** 腿部动作相关函数 *****/void setTurnLeftFlag(bool flag); //修改左转状态标志位void setTurnRightFlag(bool flag); //修改右转状态标志位void leg1(); //更新1号腿(左前)位置void leg2(); //更新2号腿(左后)位置void leg3(); //更新3号腿(右前)位置void leg4(); //更新4号腿(右后)位置bool calc(Point3d p, bool leg1, bool leg2, bool leg3, bool leg4); //逆解计算函数/***** 整机动作相关函数 *****/void dogReset(Point3d initPos, uint waitTime); //复位动作void dogInit(); //初始化动作void upDown(float x, float y, float z1, float z2, uint times); //蹲起动作void drawCircle(float ox, float oy, float z, float r, uint times); //原地圆形摆动动作void stepping(float x, float y, float z1, float z2, uint times); // 原地踏步动作void liftShoulder(uint height, uint times); //原地摆臂动作//动作周期计数器int cycleCount;//复位计数器void resetCycleCount(){cycleCount = -1;}void updateCycleCount(){cycleCount++;}//当前运动状态dogMode currentMode;//切换运动状态void setMode(dogMode mode){if (mode == currentMode) return;if (mode == DOG_MODE_TURN_LEFT){setTurnLeftFlag(true);setTurnRightFlag(false);} else if (mode == DOG_MODE_TURN_RIGHT){setTurnLeftFlag(false);setTurnRightFlag(true);} else {setTurnLeftFlag(false);setTurnRightFlag(false);}if (mode == DOG_MODE_BACK) //后退时关闭红外传感器{disableIR();} else if (mode == DOG_MODE_STOP) //静止后开始原地姿态调节{switchAdjustStat(ADJUST_STAT_LEG);dogReset({0, 0, Leg_Init_Z_Pos}, 200);}currentMode = mode;}void updateMode(){if (cycleCount == MOTION_TIMES + 1) setMode(DOG_MODE_BACK);if (cycleCount == 3 * MOTION_TIMES) setMode(DOG_MODE_LEFT);if (cycleCount == 4 * MOTION_TIMES) setMode(DOG_MODE_RIGHT);if (cycleCount == 5 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_FRONT);if (cycleCount == 6 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_BACK);if (cycleCount == 7 * MOTION_TIMES) setMode(DOG_MODE_LEFT_BACK);if (cycleCount == 8 * MOTION_TIMES) setMode(DOG_MODE_LEFT_FRONT);if (cycleCount == 9 * MOTION_TIMES) setMode(DOG_MODE_TURN_LEFT);if (cycleCount == 10 * MOTION_TIMES) setMode(DOG_MODE_TURN_RIGHT);if (cycleCount == 11 * MOTION_TIMES) setMode(DOG_MODE_STOP);}void setup(){//陀螺仪连接串口,波特率115200Serial.begin(115200);//舵机驱动板初始化Tlc.init(0);tlc_initServos();   // Note: this will drop the PWM freqency down to 50Hz.//红外传感器初始化IRInit();//大狗身体初始化dogInit();//原地蹲起10次后停止upDown(0, 0, -160, -90, 10);while(1);}void loop(){}

④ 原地踏步例程(parallel_dog_stepping.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-06-26 https://www.robotway.com/------------------------------*//*****Copyright 2017 Robot TIme原地蹲起例程*****/#include "Tlc5940.h"#include "tlc_servos.h"#include <math.h>#include "types.h"#include "config.h"// 相关函数声明/***** 红外相关函数 *****/void IRInit(); //红外初始化void enableIR(); //红外使能void disableIR(); //关闭红外void updateIR(); //红外避障更新动作/***** 平衡相关函数 *****/void switchAdjustStat(uint stat); //切换平衡调节模式 不调节/原地调节/行进间调节void readGyroSerial(); //读取陀螺仪串口消息void adjustAct(); //平衡调节动作/****** 腿部动作相关函数 *****/void setTurnLeftFlag(bool flag); //修改左转状态标志位void setTurnRightFlag(bool flag); //修改右转状态标志位void leg1(); //更新1号腿(左前)位置void leg2(); //更新2号腿(左后)位置void leg3(); //更新3号腿(右前)位置void leg4(); //更新4号腿(右后)位置bool calc(Point3d p, bool leg1, bool leg2, bool leg3, bool leg4); //逆解计算函数/***** 整机动作相关函数 *****/void dogReset(Point3d initPos, uint waitTime); //复位动作void dogInit(); //初始化动作void upDown(float x, float y, float z1, float z2, uint times); //蹲起动作void drawCircle(float ox, float oy, float z, float r, uint times); //原地圆形摆动动作void stepping(float x, float y, float z1, float z2, uint times); // 原地踏步动作void liftShoulder(uint height, uint times); //原地摆臂动作//动作周期计数器int cycleCount;//复位计数器void resetCycleCount(){cycleCount = -1;}void updateCycleCount(){cycleCount++;}//当前运动状态dogMode currentMode;//切换运动状态void setMode(dogMode mode){if (mode == currentMode) return;if (mode == DOG_MODE_TURN_LEFT){setTurnLeftFlag(true);setTurnRightFlag(false);} else if (mode == DOG_MODE_TURN_RIGHT){setTurnLeftFlag(false);setTurnRightFlag(true);} else {setTurnLeftFlag(false);setTurnRightFlag(false);}if (mode == DOG_MODE_BACK) //后退时关闭红外传感器{disableIR();} else if (mode == DOG_MODE_STOP) //静止后开始原地姿态调节{switchAdjustStat(ADJUST_STAT_LEG);dogReset({0, 0, Leg_Init_Z_Pos}, 200);}currentMode = mode;}void updateMode(){if (cycleCount == MOTION_TIMES + 1) setMode(DOG_MODE_BACK);if (cycleCount == 3 * MOTION_TIMES) setMode(DOG_MODE_LEFT);if (cycleCount == 4 * MOTION_TIMES) setMode(DOG_MODE_RIGHT);if (cycleCount == 5 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_FRONT);if (cycleCount == 6 * MOTION_TIMES) setMode(DOG_MODE_RIGHT_BACK);if (cycleCount == 7 * MOTION_TIMES) setMode(DOG_MODE_LEFT_BACK);if (cycleCount == 8 * MOTION_TIMES) setMode(DOG_MODE_LEFT_FRONT);if (cycleCount == 9 * MOTION_TIMES) setMode(DOG_MODE_TURN_LEFT);if (cycleCount == 10 * MOTION_TIMES) setMode(DOG_MODE_TURN_RIGHT);if (cycleCount == 11 * MOTION_TIMES) setMode(DOG_MODE_STOP);}void setup(){//陀螺仪连接串口,波特率115200Serial.begin(115200);//舵机驱动板初始化Tlc.init(0);tlc_initServos();   // Note: this will drop the PWM freqency down to 50Hz.//红外传感器初始化IRInit();//大狗身体初始化dogInit();//原地蹲起10次后停止upDown(0, 0, -160, -90, 10);while(1);}void loop(){}

原地动作-程序源代码资料详见 Delta型腿机器狗-原地动作

机器人制作开源方案 | Delta型腿机器狗实现原地动作相关推荐

  1. Delta型腿机器狗全动作展示

    1. 功能说明 本文示例将实现R322样机Delta型腿机器狗维持身体平衡.原地圆形摆动.原地踏步.蹲起.站立.前进.后退.转向.横向移动.斜向移动等功能. 2. 电子硬件 本实验中采用了以下硬件: ...

  2. 百元级树莓派pico四足机器狗设计(并联腿结构)持续更新

    一.硬件选取     1.1 主板         主板用的是树莓官方的微控制器raspberry pi pico.这个板子的接口还是蛮丰富的,这个小项目完全够用.但是这个处理器有个缺点就是缺少WIF ...

  3. 波士顿动力CEO:不排斥军方订单,就想你粗暴地对待机器狗

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 机器人能够后空翻,凌空劈叉,机器狗上下楼梯如履平地-- 波士顿动力每次放出新的视频,都能激发起人们对"终结者"的想象力 ...

  4. 自制DIY 机器狗 完全教程 - MIT猎豹Cheetah

    自制DIY 机器狗 完全教程 - MIT猎豹Cheetah 背景 结构设计 模块化关节电机 性能考虑 关节结构 四足平台设计 腿部设计 身体设计 脚部设计 硬件设计 关节驱动器 通信总线板 供电系统 ...

  5. 波士顿动力机器狗要去切尔诺贝利上班了

    蕾师师 发自 凹非寺  量子位 报道 | 公众号 QbitAI 价值54万的波士顿动力机器狗,这次真的派上大用场了. 这只大机器狗要去人类的"禁区"--切尔诺贝利核电站破损的4号反 ...

  6. 人工智能时代,如何让机器狗听懂你说的话?

    [引子]我的专辑<DuerOS 的AI 实战>涵盖了DuerOS应用中较多方向的内容,有点有面,已经有39篇文字,本文是第40篇.四十不惑,如果读者目前还无法掌握DuerOS的应用全貌,或 ...

  7. 【灯哥开源四足机器人】推荐一个开源四足机器狗项目,8自有度,两个舵机控制一个腿,apache开源协议的,已经迭代了好多个版本了,设计的非常好。有官方淘宝店,没有3D打印机的可以购买散装零件自己组装

    目录 前言 1,关于[灯哥开源四足机器人] 2,使用py-apple 3,总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/detail ...

  8. java机器PDF_机器人制作入门(第3版)PDF 下载

    资料简介: 欢迎来到机器人技术的精彩世界!这是一本通俗易懂的机器人技术实践参考书.本书从仿生机器人的角度出发,以实例形式详细介绍了当今流行的机器人设计.选材和制作方法,意在让读者以*快的速度掌握制作小 ...

  9. 四足机器人|机器狗|仿生机器人|多足机器人|Adams仿真|Simulink仿真|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!

    四足机器人|机器狗|仿生机器人|多足机器人|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!QQ:1096474659 基于CPG的四 ...

最新文章

  1. python给用户输出提示_python3.4控制用户输入与输出的方法
  2. Oracle的join默认为,Oracle中的三种Join方法详解
  3. Android Studio之gradle的配置与介绍
  4. python读文件代码-简单了解Python读取大文件代码实例
  5. Thymeleaf 标准表达式语法
  6. java 常用类 练习_Java常用类之String类练习
  7. 论坛中的验证码的作用
  8. Mac上传代码到Github
  9. 为什么建议要延迟macOS升级,小编为你全面分析!
  10. 设计模式(9)----- 创建型模式-----工厂设计模式(抽象工厂模式)
  11. Python批量转换png图片为ico
  12. 取消360导航作为浏览器访问首页
  13. 开学季,微信公众号图文排版必备十大素材
  14. matlab计算一元四次方程,一元四次方程解法
  15. (零基础)如何使用python下载哔哩哔哩视频?
  16. 日语动词变形整理 By Killua
  17. disallow: /index.php?,那位高手知道robots文件的正确写法。我在网上看到两种说法。一种是 user-agent:* Disallow:/flims...
  18. 2022 CCF中国软件大会(CCF ChinaSoft)“AI软件系统工程化技术与规范”论坛成功召开...
  19. python做视频剪辑_用python进行视频剪辑
  20. 戴尔联手九大云计算伙伴成立云联盟:通吃混合云

热门文章

  1. 用Django_notifications实现网站消息通知
  2. Windows完全更换ubuntu系统
  3. VS2017+Fortran(Intel Parallel Studio XE 2018)+MPI
  4. html点击导航变色,点击导航后,当前导航的颜色变色
  5. MySQL实现树的遍历
  6. 转:乔丹·彼得森“人生十二法则”:写给每一个挣扎生活的人
  7. c# 异步回调post请求http
  8. Pytorch系列(1):torch.gather()
  9. 核密度估计KDE概率密度以及累计概率计算
  10. 微信小程序上传图片到七牛云