0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Delta型腿机器狗全动作展示

jf_72402704 来源: jf_72402704 作者: jf_72402704 2023-06-18 10:46 次阅读

1. 功能说明

本文示例将实现R322样机Delta型腿机器狗维持身体平衡、原地圆形摆动、原地踏步、蹲起、站立、前进、后退、转向、横向移动、斜向移动等功能。

wKgaomSOcBuAckjJAABazMx6Tus641.jpg

2. 电子硬件

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

主控板 Basra主控板(兼容Arduino Uno)‍
扩展板 Bigfish2.1扩展板‍
SH-SR舵机扩展板
传感器 红外传感器
六轴陀螺仪
电池 7.4v锂电池、11.1V动力电池
其它 电压显示器

电路连接说明:为了便于识别控制Delta型腿机器狗,我们先对机器狗的腿位置编号(如下图所示):

wKgZomSOcBuAfz_hAABKHgx4ts8347.png

① 硬件连接:

wKgaomSOcByAZJtYAABT3sfgpgI512.pngwKgZomSOcByATXGQAABawma7JKE824.pngwKgaomSOcB2AAWxuAABbJkTud-Y542.png

② 电压显示器与大电池连接:

wKgZomSOcB2ALHEWAACf2gJkguE119.png

③ 舵机接线位置:上面3个舵机分别连接在Bigfish扩展板的D4、D3、D8端口

wKgaomSOcB6AHAqYAACcziZtrxI202.png

Delta型腿机器狗每条腿有4个舵机,4条腿上总共有16个舵机,将这16个舵机分别连接在SH-SR舵机扩展板的舵机接口上。

wKgZomSOcB6ADSidAABbkhgECgY169.png

1号腿 :s1连接口9 s2连接口8 s3连接口5 s4连接口6

2号腿 :s1连接口18 s2连接口19 s3连接口20 s4连接口21

3号腿 :s1连接口0 s2连接口2 s3连接口1 s4连接口3

4号腿 :s1连接口27 s2连接口25 s3连接口26 s4连接口24

3. 功能实现

编程环境:Arduino 1.8.19

下面提供一个Delta型腿机器狗全动作展示(维持身体平衡、原地圆形摆动、原地踏步、蹲起、站立、前进、后退、转向、横向移动、斜向移动)的参考例程(parallel_dog_display.ino),程序源代码及样机3D文件资料详见 https://www.robotway.com/h-col-242.html,具体实验效果可参考网站演示视频

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-06-07 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()

{

  //陀螺仪连接串口,波特率115200

  Serial.begin(115200);


  //舵机驱动板初始化

  Tlc.init(0);

  tlc_initServos();   // Note: this will drop the PWM freqency down to 50Hz.


  //红外传感器初始化

  IRInit();


  //大狗身体初始化

  dogInit();


  //原地摆臂动作一次

  liftShoulder(40, 1);

  delay(500);

  //原地做圆形摆动3周

  drawCircle(0, 0, -120, 60, 3);

  delay(500);

  //原地蹲起3次

  upDown(0, 0, -160, -90, 3);

  delay(500);

  //原地踏步6次

  stepping(0, 0, -150, -100, 6);

  delay(500);



  resetCycleCount();

  enableIR();

  switchAdjustStat(ADJUST_STAT_TRACK);

  setMode(DOG_MODE_FRONT);

}


void loop()

{

  //姿态调节

  adjustAct();


  if (currentMode == DOG_MODE_STOP) return; //静止模式不进行后续动作


  updateMode(); //切换运动模式

  //计算4条腿运动位置

  leg1();

  leg4();

  leg2();

  leg3();

  //更新所有舵机位置

  Tlc.update();

  //检测红外传感器信息

  updateIR();


}


//串口与陀螺仪通信

void serialEvent() {

  readGyroSerial();

}


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器狗
    +关注

    关注

    3

    文章

    167

    浏览量

    9866
收藏 人收藏

    评论

    相关推荐

    制作一只3D打印的遥控机器

    这周介绍的这个机器可以执行基本动作,比如行走、转弯、站立、趴下和打招呼…… 在项目中,作者使用了之前设计的基于Arduino Nano的多伺服电机控制板。该板可以控制多达9个伺服电机,以及通过
    发表于 03-14 14:52

    美国军方最新型号大机器人——“阿尔法(或者LS3)”,

    `日前,美国军方展示了最新型号大机器人——“阿尔法(或者LS3)”,这是一种四自治机器人。
    发表于 01-16 14:31

    什么是龙人四足机器人?

    龙人四足机器人是一种仿生机器人,由Openduino控制板控制,有四条,每条两个自由度,由两个舵机驱动,能实现两种步态行走。配有三个超声波,实现大角度智能避障。标准演示程序有5个可
    发表于 03-24 16:17

    通过肩部动作操控机器

    在6月6日举行的2018年以色列教育科技峰会上,特拉维夫大学学生展示人机接口研发进展。学生通过肩部动作操控桌上的机器人举手、行走和转向。相关仪器通过学生身上传感器,不仅能将肢体动作信号
    发表于 11-09 16:01

    ANYmal机器人具有和脚,可跨越障碍物

    ANYmal机器人的实验版本具有和脚,苏黎世联邦理工学院步行,有机器人可能擅长于越过障碍物,但车轮在光滑地面上行驶仍然更有效率。这就是苏黎世联邦理工学院的工程师向其现有的ANYm
    发表于 08-30 08:02

    波士顿机器电机控制相关资料推荐

    开始接触到像波士顿机器这样的项目一只12个电机4条每个腿上3个1个是控制胯转动1个控制大腿也就是整条动的1个是控制小腿打弯的主控用l
    发表于 09-03 06:25

    机器人所用的线缆动作

    根据机器人的动作选择电缆首先请掌握电缆的动作。配线时尽量加大弯曲半径,减少扭转和摩擦是减少断线故障的要点,然后根据该动作下的期望寿命,选择最合适的配线材料和配线方法。根据电缆
    发表于 06-09 10:44

    一只完全由PCB制造的智能机器

    得不切割 PCB自己用卷轴锯(或类似工具),但这不会花费你超过几个小时。智能机器展示PS:在发布这个项目的时候,我没有一个好的可靠的代码可以在这个机器人上使用,所以我不会分享它,但我
    发表于 07-05 06:16

    小米机器二代来了,比上一代更瘦、更快、更强!NVIDIA主控+志MR813+志R329协处理器

    能看、能听、能感知,CyberDog2确实如雷军所调侃的那样,它比从前“更了”。 在刚刚结束的秋季新品发布会上,小米发布了最新的仿生四足机器人CyberDog2,虽然没有在发布会现场进行实物展示
    发表于 09-06 09:39

    基于DELTA机器人的动力学逆解算法设计及应用

    并联机器人由多个封闭的机构环组成。这些机构环通常是由连接基座和运动平台的两或多个机构链构成,其中一个关节被驱动,其它关节也跟着一起运动。本文介绍一种3自由度的并联机器人--DELTA机器
    发表于 01-04 15:10 43次下载

    大族机器人-Delta

    大族机器人-Delta
    发表于 12-25 22:21 0次下载

    关于Delta(德尔塔)百变积木机器人的介绍和应用

    Delta德尔塔积木机器人是一种以“自己动手做机器人”为核心思想的积木机器人套件,专为提升青少年的动手能力、发现并解决问题能力而设计。Delta
    的头像 发表于 09-21 09:18 4680次阅读

    超低价的DELTA机器人始终没有引爆DELTA市场

    DELTA机器人概述 一直觉得DELTA是一个怀才不遇的构型,明明各种性能吊打SCARA,却因为价格原因在销量被SCARA甩几条街。每隔两年总会听到“DELTA
    的头像 发表于 06-06 10:44 1702次阅读

    有趣的小型delta机器

    电子发烧友网站提供《有趣的小型delta机器人.zip》资料免费下载
    发表于 11-29 14:56 0次下载
    有趣的小型<b class='flag-5'>delta</b><b class='flag-5'>机器</b>人

    Arduino控制的Delta机器

    电子发烧友网站提供《Arduino控制的Delta机器人.zip》资料免费下载
    发表于 07-05 11:01 4次下载
    Arduino控制的<b class='flag-5'>Delta</b><b class='flag-5'>机器</b>人