转载注明出处

文章目录

  • 一.DogGo介绍
  • 二.相关链接
  • 三.硬件
  • 四.软件
  • 四.机器人调试

一.DogGo介绍

DogGo是由斯坦福学生机器人俱乐部(Stanford Student Robotics club)Extreme Mobility 团队设计并打造,全名为Stanford Doggo 的四足机器人。这个机器人能跳 1 米多高,还能表演后空翻。与其他四足机器人动辄上万美元的成本不同,这个机器人的成本降到了 3000 美元以下。设计团队在2019年初陆续开源了该机器人的设计图、代码以及材料清单。

Stanford Doggo采用并行腿控制,每一条腿为2个自由度,一共为8个自由度。目前在所有机器人中保持着最高弹跳记录。成本低、结构简单,几乎所有的组件都能在线上获取。当然,相比于波士顿动力、Laikago、浙大的绝影、MIT的Cheetah而言,它没有强大的硬件支持和更复杂的控制系统,但是单从研发时间、研发成本、以及最终效果来说,斯坦福的DogGo绝对是性价比最高的四足机器人。

二.相关链接

  1. Stanford Doggo github 总地址
  2. Stanford Doggo 源码 github地址
  3. Stanford Doggo CAD图纸 github地址
  4. ODrive驱动器 github地址
  5. ODrive 驱动器官网
  6. Stanford Doggo 论文原址

如果嫌上面网站麻烦,也可以直接在CSDN上下载:

  1. Stanford DogGo源码、图纸CSDN下载链接
  2. Stanford DogGo论文
  3. Stanford DogGo 硬件清单
  4. Stanford DogGo Soildword模型
  5. Stanford DogGo 编译好的ODrive固件

三.硬件

官方开源了所用到的所有硬件的清单,想要PDF文档的话可以在这下载(硬件清单)看上去很多,但其实最最核心的硬件不过就下面列出的:

材料 数量
Teensy 3.5(单片机) 1
ODrives(驱动器) 4
TMotor MN5212(电机) 8
Sparkfun BNO080 IMU (陀螺仪) 1
Xbee(遥控器) 1
Gigavac P105 Mini-Tactor(继电器) 1
其他(碳纤维板、齿带、连杆、轴承等等) ······

各硬件连接如下:

1. Doggo有四个v3.5、48V ODrives,每条腿两个,安装在碳纤维侧板上。中间的2mm碳纤维板上,有一个Teensy 3.5,一个Sparkfun BNO080 IMU和一个5mW的Xbee。

2. Teensy通过四条独立的UART线与ODrives对话,每条线路的工作频率为500000波特。在这个板块下面,有配电板和一个Gigavac P105 Mini-Tactor继电器,所以可以使用一个外接的ESTOP开关来关闭机器人电源。Doggo还有两个1000mah 6s Tattu锂电池。

3. 它的工作方式是在碳纤维侧板上安装了两个TMotor MN5212电机。这些电机每秒重复计算8000次,通过感应机器人外力的电机帮助确定每条腿应该施加多大的力和扭矩。

4. 团队还加了一个3D打印轴承座,有两个轴承来固定外同轴管。两个电机通过16T皮带轮和48T皮带轮之间的GT2皮带将动力传递给同轴皮带,每根皮带6mm宽,间距3mm间距。

5. 由于预算有限,团队并没有使用现成滑轮,而是使用Xometry SLS服务(在线3D打印服务)自己打印出轴承座。不过一定要准确地调整Xometry SLS服务,如果部件以一定角度打印,则由于偏角层,滑轮齿的几何形状会变形。

四.软件

运动控制系统是是整个电子狗最最核心的部分,四足的运动控制系统门槛一般很高。不过在这方面,Stanford Doggo 还是很友好的。相比于其他四足,DogGo的运动控制系统比较简单。如果日后想要研究更复杂的四足控制系统,那么拿它入门还是非常有意义的。 官方是使用的开发环境是Arduino+Tennsy支持包进行开发,详细搭建教程参考博客: 《如何在Arduino IDE上搭建Teensy开发环境》

先来看看Stanford Doggo的代码结构

主要还是讲我对DogGo步态控制的理解,即是上图中“position_control”的文件.“position_control”是整份源码的核心,其他文件都是围绕其写的。

1. DogGo的步态参数分为stance_height、down_amp、up_amp、flight_percent、step_length、freq、step_diff,通过步态参数的不同就能实现Tror 、Bound、 Walk、Pronk、Dance、Hop、 Flip、Turn_Tror 等各种步态。

/*步态参数*/
struct GaitParams {float stance_height = 0.18; //步行时身体与地面的期望高度(m)    *Desired height of body from ground during walking (m)float down_amp = 0.00; //正弦轨迹低于stanceHeight的峰值振幅(m) *Peak amplitude below stanceHeight in sinusoidal trajectory (m)float up_amp = 0.06; //在正弦轨迹中,足部峰值在支架高度以上(m) *Height the foot peaks at above the stanceHeight in sinusoidal trajectory (m)float flight_percent = 0.6;//飞行相时间占比     *Portion of the gait time should be doing the down portion of trajectoryfloat step_length = 0.0; //全步长(m)      *Length of entire step (m)float freq = 1.0; //一个步态周期的频率(Hz)   *Frequency of one gait cycle (Hz)float step_diff = 0.0; //左腿步长与右腿步长之差    *difference between left and right leg step length
};
/*各种步态的参数*/
struct GaitParams state_gait_params[] = {//{s.h, d.a., u.a., f.p., s.l., fr., s.d.}{NAN, NAN, NAN, NAN, NAN, NAN, NAN}, // STOP{0.17, 0.04, 0.06, 0.35, 0.15, 2.0, 0.0}, // TROT{0.17, 0.04, 0.06, 0.35, 0.0, 2.0, 0.0}, // BOUND{0.15, 0.00, 0.06, 0.25, 0.0, 1.5, 0.0}, // WALK{0.12, 0.05, 0.0, 0.75, 0.0, 1.0, 0.0}, // PRONK{NAN, NAN, NAN, NAN, NAN, NAN, NAN}, // JUMP{0.15, 0.05, 0.05, 0.35, 0.0, 1.5, 0.0}, // DANCE{0.15, 0.05, 0.05, 0.2, 0.0, 1.0, 0.0}, // HOP{NAN, NAN, NAN, NAN, NAN, 1.0, NAN}, // TEST{NAN, NAN, NAN, NAN, NAN, NAN, NAN}, // ROTATE{0.15, 0.07, 0.06, 0.2, 0.0, 1.0, 0.0}, // FLIP{0.17, 0.04, 0.06, 0.35, 0.1, 2.0, 0.06}, // TURN_TROT{NAN, NAN, NAN, NAN, NAN, NAN, NAN} // RESET
};

2. 步态参数采用的是笛卡尔坐标系(直角坐标系),但是在研究腿部轨迹的时候需要将直角坐标系转化为极坐标系,即将X、Y转化为L、θ。电机需要的是转角,所以还需要将L、θ转化为θ和γ,发送给ODrive最终就能实现足端到预期位置。(腿部连杆长度已知,所以只需要用余弦定理就能在三种参数间相互转化)

3. 运动轨迹用的是正弦函数,通过所给的步态参数可以求出预期的正弦轨迹的函数,分为上下两段(如上图黄色和紫色的两条轨迹),然后在对应时间内输出对应坐标就能实现腿部运动。

图一 是我将源码移植到stm32进行仿真,记录输出的X、Y,打印在表格上。上下两段正弦轨迹可以通过修改步态参数进行调整。

图二 是在仿真时输出各腿的θ、γ参数(放大了100倍)。(注:X、Y为正弦函数,但是θ、γ并非正弦分布)

/*DogGo的正弦轨迹发生器,即将步态参数转化为正弦轨迹的具体步骤*/void SinTrajectory (float t, struct GaitParams params, float gaitOffset, float& x, float& y) {static float p = 0;static float prev_t = 0;float stanceHeight = params.stance_height;//直立高度float downAMP = params.down_amp;//下幅值float upAMP = params.up_amp;//上幅值float flightPercent = params.flight_percent;//飞行相占比float stepLength = params.step_length;//步长float FREQ = params.freq;//频率p += FREQ * (t - prev_t < 0.5 ? t - prev_t : 0); // should reduce the lurching when starting a new gaitprev_t = t;float gp = fmod((p+gaitOffset),1.0); //mod(a,m)返回a除以m的余数  mod(a,m) returns remainder division of a by mif (gp <= flightPercent) {x = (gp/flightPercent)*stepLength - stepLength/2.0;y = -upAMP*sin(PI*gp/flightPercent) + stanceHeight;}else {float percentBack = (gp-flightPercent)/(1.0-flightPercent);x = -percentBack*stepLength + stepLength/2.0;y = downAMP*sin(PI*percentBack) + stanceHeight;}
}

四.机器人调试

下面也附上一段四足的调试视频,更换了部分硬件,下面是其框架图,主控更换为国内流行的Stm32,开发环境使用的是Keil+CubeMX,同时加入陀螺仪、语音模块、蓝牙模块、Dr16等模块。

1.走路视频

解码斯坦福开源狗DogGo--附硬件清单、源码、图纸、论文相关推荐

  1. c# 读cpu温度,显卡温度,硬盘温度,风扇转速,硬件信息,cpu占用,附赠项目源码

    http://download.csdn.net/download/fireghost57/9969844 OpenHardwareMonitor源码工程 读cpu温度,显卡温度,硬盘温度,风扇转速, ...

  2. cesium等高线_Cesium开源三维地球离线地图发布源码示例功能

    一.概述 Cesium开源三维地球离线地图发布源码提供了地图切换.查询定位.模型加载.专题图叠加显示和测量功能等,旨在为用户提供一个可以在Cesium快速加载离线地图或在线地图的解决方案,并提供技术支 ...

  3. ROCBOSS开源微社区轻论坛类源码

    ROCBOSS开源微社区轻论坛类源码 ☑️ 编号:ym477 ☑️ 品牌:无 ☑️ 语言:微信小程序 ☑️ 大小:5.9MB ☑️ 类型:微社区轻论坛 ☑️ 支持:微信小程序

  4. java开源即时通讯软件服务端openfire源码构建

    java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...

  5. 服务器端编程心得(七)——开源一款即时通讯软件的源码

    服务器端编程心得(七)--开源一款即时通讯软件的源码 2017年04月06日 22:57:01 analogous_love 阅读数:30222更多 所属专栏: 高性能服务器编程实现细节详解 版权声明 ...

  6. 基于JAVA皮皮狗宠物用品商城计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA皮皮狗宠物用品商城计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA皮皮狗宠物用品商城计算机毕业设计源码+数据库+lw文档+系统+部署 项目架构:B/S架构 开发语言:Java ...

  7. c语言远控,远控鼠标!C语言简单编程:整舍友必备+附送实例源码!

    远控鼠标!C语言简单编程:整舍友必备+附送实例源码!-1.jpg (10.71 KB, 下载次数: 0) 2018-10-11 05:24 上传 关注<一碳科技>有更多干货等着你哦! 远控 ...

  8. 舔狗日记更新美化版源码

    我们是狗,舔狗.基于上一版中的数据,重新设计了舔狗日记. 人肉对每段数据的内容.标点符号进行纠错与优化(不一定标准):并按本人理解进行了划重点标记. 接入和风天气API,获取城市.气象.气温.免费版每 ...

  9. 舔狗日记随机展示网站源码

    最近各种日记挺火的 什么 舔狗.保安.小偷...主要是在首页使用了js,首页添加了一个"再来一段"按钮,无需刷新即可实现显示新的内容.至于舔狗日记内容,存放在index.js文件里 ...

  10. php开源多功能留言板网站源码V1.2

    php开源多功能留言板网站源码V1.2 软件特点: 1.SpeedPHP框架驱动,高效轻快. 2.可创建多个留言板:每个留言板都能设置不同的模板:每个留言板都能设置单独管理员: 3.内置两套模板一个默 ...

最新文章

  1. Oracle计算时间差表达式
  2. 抓包概念大比较:数据报、数据包、分组
  3. MySQL-查询数据(SELECT)
  4. decltype判断变量或表达式类型
  5. Redis源码剖析(三)字典结构的设计与实现
  6. 优先级队列用的的数据结构
  7. linux redis 5.6扩展,Windows下为PHP5.6安装Redis扩展和memcached扩展
  8. raptor五个数排序流程图_看了这篇文章,我发现排序算法好简单
  9. 《那些年啊,那些事——一个程序员的奋斗史》——53
  10. 笔记--《谷歌和亚马逊是怎么做产品的》第一至三章
  11. 在线php网站扫描,php实现在线端口扫描实例代码_PHP教程
  12. 手机java版怎么换皮肤_手机QQ皮肤更换方法(安卓版)
  13. win10pe命令打开计算机,手把手教你如何制作win10PE启动盘
  14. 欢迎你、某某某同学python_python123第一周作业
  15. onkeypress、onkeydown、onkeyup
  16. 计算机科学应用论文题目,比较好写的计算机科学与应用论文题目 计算机科学与应用论文题目怎么取...
  17. require(): open_basedir restriction in effect错误解决
  18. http请求方法:GET、POST、PUT、PATCH、DELETE、OPTIONS、HEAD、TRACE
  19. uni-app封装请求出现跨域问题
  20. 通达OA RCE分析及复现

热门文章

  1. windows卸载linux系统,Windows和Linux双系统下完美卸载linux
  2. java基础教程:集合概述(27)
  3. composer 安装
  4. java爬虫登录_Java爬虫中怎么爬取需要登录的网站
  5. 汇编语言王爽第四版第七章(实验六)
  6. 嵌入式linux 中文输入法,基于嵌入式Linux的汉字输入法
  7. 天翼校园客户端linux,GitHub - YianAndCode/f-surfing: 佛大广东天翼校园客户端在 Linux 下的解决方案...
  8. JAVA web App扫码登录
  9. 54扑克牌轮流拿问题,Python实现(详解)
  10. 通达信公式改写成python代码