四足机器人(二)---运动学逆解和步态规划

2023-05-16

四足机器人(二)---运动学逆解和步态规划

  • 运动学逆解
  • 步态规划
  • MATLAB仿真

运动学逆解

    其实运动学分为运动学正解和运动学逆解,二者有什么区别呢?因为在四足机器人中用的是12个舵机,所以运动学正解是已经知道运动关节的各个电机运动参数,也就是此时对于初始位置转动的角度,去求末端执行器的相对参考坐标系的位姿。而运动学逆解恰恰相反,是根据相对参考坐标系的位姿去求出运动关节的各个电机此时对于初始位置转动的角度。
在这里插入图片描述
    由上图可以看出,机体对于地的高度为z,髋关节的长度为h,腿的上半段长度为hu,下半段长度为hl,此时这个状态下,足端和机体的距离为y。如果竖直战力的图像是如下图所示:

在这里插入图片描述
    那么对于正视图的运动学力学分析如下图所示:
在这里插入图片描述

    在图中dyz’和hu是平行的,我们需要的是T的角度值,那么T = γ-a; 随后我们可以通过勾股定理得出dyz = 根号(zz+ yy)。因为我们是正视图,所以对于hu和hl并不是整个腿的长度,lyz = 根号(dyzdyz - hh),γ可以算出:γ = atan(y/z),a = atan(h/lyz),最终T = γ-a,我们就算出了髋关节电机转动的角度。
对于侧视图如下:
在这里插入图片描述

    由图可以看到lzp = 根号(lyzlyz + xx)(lyz是正视图中求得的),n = (lzplzp - hlhl - hu*hu)/2hu。此时我们的n已经得到了,那么就可以求出膝关节的角度β = acos(n/hl)。此时P = acos((hu+n)/lzp)。
& = atan(x/lyz),最终得到α = P-&。
    我们此时就可以得到α,β,γ三个角度了,我们可以通过设定X,Y,Z的三个值来求出三个角度值,再利用角度值去对应舵机应受到占空比为多少的pwm,从而达到我们所需的控制目的,这就是运动学逆解。

以下为MATLAB仿真函数,我们建立一个function块,将其中的函数替换为以下的程序:

function [alfa,beta,gamma] = xyztoang(x,y,z)
h = 45.0;
hu = 125.5899;
hl = 136.0;

dyz = sqrt(y^2+z^2);
lyz = sqrt(dyz^2-h^2);
gamma_yz = -atan(y/z);
gamma_h_offset = -atan(h/lyz);
gamma = gamma_yz-gamma_h_offset;//gamma理解为上图的T

lzp = sqrt(lyz^2+x^2);
n = (lxzp^2-hl^2-hu^2)/(2*hu);
beta = -acos(n/hl); //β

alfa_xzp = -atan(x/lyz);
alfa_off = acos((hu+n)/lxzp);
alfa = (alfa_xzp+alfa_off); //α
end

其中alfa,beta,gamma是我们要输出的三个角度,最后那个α不要觉得那个+写错了,看好alfa_xzp求得的前面带有负号。

步态规划

    步态是步行机器人的一种迈步的方式,是步行机器人各腿之间运动的规律,即各条腿的抬腿和放腿的顺序,是研究步行机构的一个重要的参数,是确保步行机构稳定运行的重要因素。我们观察马最为直观,当然也可以观察狗的,通过四条腿按一定的顺序抬起、移动和落地支撑来实现移动。整个身体的重心沿着运动方向不停移动,并始终落在不断更新的三角形中来保证静态步行。
在这里插入图片描述

    图中所示为一个运动循环,设稳定裕量就是中文数字所占的范围,小箭头表示腿的摆动方向,足端带有小圆圈的腿为正在于地面接触的腿,足端不带圆圈的腿为抬起了的腿,虚线围起了的三角形为稳定三角形。模型一为机器人原始状态,第一步为,腿1抬起向运动方向伸出,这是机器人重心不变,仍在原先三条支撑腿构成的三角形,如模型二所示。接着,图三中腿4抬起并向运动方向移动,模型还是保持着静态步行。图四为重心调整环节,腿2、3,支撑着地并向后移动,使重心向运动方向移动一个步长(λ),图五、图六分别将腿2、3抬起并还原到机器人初始时的状态。
在这里插入图片描述
    填充了颜色的为腿部抬起运动时间段,而非填充了的为腿部支撑地面的时间段。
    对于小跑,快跑的步态规划又是不同的,这里就不给出了。

MATLAB仿真

调用功能块还需要数模转换的一个元件。
在这里插入图片描述
最终将各个模块封装成以下的模样,这样看着好看一些:
在这里插入图片描述

在这里插入图片描述
那么我们对各个舵机的控制就可以了,我们开始加入步态控制,在走路的时候应该是对角的腿步伐是一致的,而且对于步态是一个圆弧形,或者说是一个半椭圆状的,这个形状更像是去掉了负半轴的正弦波,我们就可以用matlab里面的正弦波发生器。我们给X一个正弦波,并且让两个对角的腿拥有一定的时间差去运动,这样就可以走路了,Y轴方向因为我们的髋关节有45mm长,我们就给Y一个固定的值45就可以了,z轴我们可以暂时不管。
在这里插入图片描述
其中最上面的Function的函数是,最上面的和下面的一个函数块内的函数是一样的,因为考虑到步态运动时腿是交替运行的,所以我们加了延时函数,等会我们说怎么去调节延时函数让步态更好,上面两个Function块的作用是移动X的距离。

function y = fcn(u)

y = 30*sin(u);

最下面的两个function块的函数是,这两个函数块的作用是控制抬腿高度,使用Dead zoom功能块进行一个限幅控制。

function y = fcn(u)

y = 17*sin(u);

先将参数输入进去看看效果。
可以看到机器狗运动起来了,那么就是那个延时函数给多少合适呢?我们可以用一个波形显示功能块去观察,名字叫scope。
在这里插入图片描述

我们要比较两对腿的X移动状况和Z轴移动状况,所以我们将scope功能块设置一下配置为4路输入,四路显示,设置如下:
在这里插入图片描述
然后将四根线分别接到x1,x2,z1,z2上就可以看到运动的波形了。
在这里插入图片描述
在这里插入图片描述

我们分析一下波形,这个是已经调好的,在从上往下看,第一个波形是x1和x4的波形,在0的下方部分为脚往前的移动,而此时x2和x3应该处于后蹬的状态,所以在x1波形刚开始小于0的时候,x2的波形应该是刚开始大于0的,所以我们就可以改变控制X的延时让波形达到这个效果就可以了,并且让x的移动距离不要太大。
在这里插入图片描述
后面我加了一个延时是因为模型在掉落在平台上的时候会有些晃动,所以加了延时之后等稍微稳定一些了再走。所以这些参数我给的是:
在这里插入图片描述

那么对于腿抬的高度,我们将幅值限制在180,当然190也可以,由原理,当x1和x4要抬起来的时候x2和x3应该是刚落下,也就是当x2和x3刚达到180的时候,x1和x4处于抬起状态,也就是小于180的状态,我们可以将六自由度功能块去掉之后仔细看步态的运动和波形,来改变延时时间。
在这里插入图片描述
当在没有六自由度模块的时候将步态调整好,调整好后再加入六自由度模块就好了。
在这里插入图片描述
需要仿真文件可通过网盘下载;链接:https://pan.baidu.com/s/1THIom-JuPCWNJkrCym1rRQ
提取码:8r7i

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四足机器人(二)---运动学逆解和步态规划 的相关文章

  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • Online Trajectory Generation of a MAV for Chasing a Moving Target in 3D Dense Environments

    微型无人机的在线轨迹生成 xff0c 用于在3D密集环境中追踪运动目标 摘要一 介绍二 相关工作A 在障碍物环境中追逐B 通过预先规划安全地生成轨迹 三 问题陈述A 问题设置B 能力C 命名 IV 视点生成A 可见度指标B 具有安全性和可见
  • 配置目标跟踪开源项目traj_gen_vis踩过的坑

    项目地址 https github com icsl Jeon traj gen vis 安装依赖需注意的问题 traj gen with qpoases 需安装ros分支的代码 xff08 这个作者并没有指出 xff0c 坑 xff09
  • cmake arm-none-eabi-gcc for stm32 cpp project

    尝试把原有的stm32工程F1canBootloader用cmake来管理 xff0c 遇到了以下几个坑 xff1a 1 报错 xff0c undefined reference to 96 dso handle 39 CMakeFiles
  • 网络攻防之wireshark抓取登录信息

    使用wireshark抓取登录信息 简介 xff1a Wireshark xff08 前称Ethereal xff09 是一个网络封包分析软件 网络封包分析软件的功能是撷取网络封包 xff0c 并尽可能显示出最为详细的网络封包资料 Wire
  • 头文件互相包含所引发的的问题(深入剖析)

    今天写程序出现了一个让人蛋疼的错误 xff0c 后来发现是由于头文件互相包含所引起的 原本只是简单的以为头文件互相包含只会触发 xff0c 头文件的递归包含 即 xff0c A包含B xff0c 所以才A的头文件里会将B的头文件内容拷贝过来
  • C++11异步操作future和aysnc 、function和bind

    C 43 43 11异步操作future和aysnc function和bind 前言异步操作std future和std aysnc 介绍std future和std aysnc的使用Demostd packaged task 介绍std
  • C++文件服务器项目—FastDFS—1

    C 43 43 文件服务器项目 FastDFS 1 前言1 项目架构2 分布式文件系统2 1 传统文件系统2 2 分布式文件系统 3 FastDFS介绍3 1 fdfs概述3 2 fdfs框架中的三个角色3 3 fdfs三个角色之间的关系3
  • C++文件服务器项目—Redis—2

    C 43 43 文件服务器项目 Redis 2 前言1 数据库类型1 1 基本概念1 2 关系 非关系型数据库搭配使用 2 redis基础知识点2 1 redis安装2 2 redis中的两个角色2 3 redis中数据的组织格式2 4 r
  • C++文件服务器项目—Nginx—3

    C 43 43 文件服务器项目 Nginx 3 前言1 Nginx一些基本概念1 1 Nginx初步认识1 2 正向代理概念理解1 3 反向代理概念理解 2 Nginx的安装与配置2 1 Nginx与相关依赖库的安装2 2 Nginx相关的
  • C++文件服务器项目—FastCGI—4

    C 43 43 文件服务器项目 FastCGI 4 前言1 CGI 概念理解2 FastCGI 概念理解3 FastCGI和spawn fcgi安装4 FastCGI和 Nginx的关系5 Nginx数据转发 修改配置文件6 spawn f
  • C++文件服务器项目—Nginx+FastDFS插件—5

    C 43 43 文件服务器项目 Nginx 43 FastDFS插件 5 前言1 文件上传下载流程1 1 文件上传流程1 2 文件下载流程1 3 文件下载优化流程 2 Nginx和fastDFS插件2 1 安装Nginx和fastdfs n
  • C++文件服务器项目—数据库表设计 与 后端接口设计—6

    C 43 43 文件服务器项目 数据库表的设计 6 前言1 数据库建表1 1 用户信息表 user info1 2 文件信息表 file info1 3 用户文件列表表 user file list1 4 用户文件数量表 user file
  • C语言中宏定义的使用

    1 引言 预处理命令可以改变程序设计环境 提高编程效率 它们并不是 C 语言本身的组成部分 不能直接对 它们进行编译 必须在对程序进行编译之前 先对程序中这些特殊的命令进行 预处理 经过预处理后 程序就不再包括预处理命令了 最后再由编译程序
  • C++文件服务器项目—项目总结与反向代理—7

    C 43 43 文件服务器项目 项目总结与反向代理 7 1 项目总结2 项目提炼3 web服务器的反向代理4 存储节点的反向代理 组件介绍基本写完了 xff0c 后续进行深入 本专栏知识点是通过零声教育的线上课学习 xff0c 进行梳理总结
  • https相关内容

    https相关内容 前言基础概念理解https传输过程 前言 本文写https相关内容 xff0c 持续补充 基础概念理解 对称加密 加解密秘钥是同一个 非对称加密 公钥 私钥 sa gt 公钥私钥都是两个数字ecc gt 椭圆曲线 两个点
  • TinyKv介绍

    TinyKv介绍 前言tinykv架构代码结构如何去写TinyKv参考内容 前言 开一个新坑 xff0c 将tinykv的4个project全部实现 虽然今天我点进去看的时候就萌生退意 好在没有放弃之前 xff0c 把project1完成了
  • TinyKv Project1 Standalone KV

    TinyKv Project1 Standalone KV 前言Project1 StandaloneKV 文档翻译文档的重点内容StandAloneStorageWriteReader Server单元测试 前言 project1还是比较
  • TinyKv Project2 PartA RaftKV

    TinyKv Project2a RaftKV 前言Project2 RaftKV 文档翻译Project2A重点内容抛出RaftLogRaftLog结构体字段详解RaftLog核心函数详解 RaftRaft 驱动规则Msg的作用与含义Ms
  • TinyKv Project2 PartB RaftKV

    TinyKv Project2 PartB RaftKV 前言Project2 PartB RaftKV 文档翻译PartB 到底想让我们做什么 xff1f 分析要实现的函数到底要干什么事情proposeRaftCommand 将上层命令打

随机推荐

  • TinyKv Project2 PartC RaftKV

    TinyKv Project2 PartC RaftKV 前言Project2 PartC RaftKV 文档翻译raft节点如何自动的compact压缩自己的entries日志生成快照与快照收收发日志压缩与快照收发总结疑难杂症 前言 pr
  • TinyKv Project3 PartA Multi-raft KV

    TinyKv Project3 PartA Multi raft KV 前言Project3 PartA Multi raft KV 文档翻译Add RemoveLeaderTransfer 前言 Project3是整个项目最难的部分 xf
  • TinyKv Project3 PartB Multi-raft KV

    TinyKv Project3 PartB Multi raft KV 前言Project3 PartB Multi raft KV 文档翻译发送请求LeaderTransfer 禅让ConfChange 集群成员变更Split regio
  • TinyKv Project3 PartC Multi-raft KV

    TinyKv Project3 PartC Multi raft KV 前言Project3 PartC Multi raft KV 文档翻译processRegionHeartbeatSchedule 前言 3C要求我们实现调度 3c按照
  • nodejs api学习:fs.createReadStreame()

    作用 这个api的作用是打开一个可读的文件流并且返回一个fs ReadStream对象 参数 createReadStream path option 该用来打开一个可读的文件流 xff0c 它返回一个fs ReadStream对象 64
  • TinyKv Project4 Transactions

    TinyKv Project4 Transactions 前言Project4 Transactions 文档翻译Project 4 TransactionsTinyKV中的事务Part APart BPart C Percolator x
  • sealos issue #2157 debug 思路流程记录

    sealos issues 2157 debug思路流程 前言分析issue剖析源码解决方案总结 前言 这个项目蛮有意思的 xff0c sealos 是以 kubernetes 为内核的云操作系统发行版 boss上看到 gt 沟通 gt 解
  • 系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?

    系统设计场景题 MySQL使用InnoDB xff0c 通过二级索引查第K大的数 xff0c 时间复杂度是多少 xff1f 前言明确场景对齐表的结构分析时间复杂度执行一条 select 语句 xff0c 期间发生了什么 xff1f 分析性能
  • 《嵌入式系统》 |(四) STM32软件架构 知识梳理

    系列索引 嵌入式系统 嵌入式系统 重点知识梳理 目录 CMSIS软件架构库文件说明 CMSIS软件架构 CMSIS概述 CMSIS软件架构由四层 xff1a 用户应用层 操作系统及中间件接口层 CMSIS层和硬件层 由三部分构成 核内外设访
  • Cmake链接第三方库的三种方法

    Cmake链接第三方库的三种方法 本文介绍链接第三方库的3种方法 以OpenBLAS举例 使用的工程名称为Test lib xff08 可执行文件名字 xff09 xff0c 主程序为library c 代码中的各路径请自行替代 xff1a
  • SADP功能使用

    SADP主要使用的是链路层多播及UDP多播的原理进行实现的 1 链路层多播 span class token function socket span span class token punctuation span PF PACKET
  • MatlabR2022b + Visual Studio环境配置

    在Matlab中输入 mex setup c 43 43 命令确认MEX使用VS2022编译环境 VC 43 43 目录 包含目录 添加 D Matlab2022b extern include VC 43 43 目录 库目录 添加 D M
  • ROS小车自主导航

    在进行ROS小车自主导航时 xff0c 需要用到三维可视化软件rviz xff0c 然而出现了问题 问题 xff1a 在运行rosrun rviz rviz xff0c 导入自己导航的程序后 xff0c 需要通过2D Pose Estima
  • SIYI AK28 遥控器接收机的SBUS口与STM32通讯

    SBUS介绍 SBUS是Futaba公司定义的一种串口通信协议 xff0c Futaba的产品应用越来越广泛 xff0c 不论是航模 xff0c 无人机 xff0c 还是机器人 xff0c 遥控车 xff0c 总能有它的身影 SBUS是一个
  • 基于STM32F407四旋翼无人机---AK8975磁力计(四)

    基于STM32F407四旋翼无人机 AK8975磁力计 xff08 四 xff09 磁力计基本介绍1 2 磁力计原理图 2 磁力计数据获取3 磁力计椭球拟合校准3 1 简单介绍椭球拟合 磁力计基本介绍 该模块采用高灵敏度霍尔传感器技术 xf
  • 硬链接与软链接

    硬链接 hard link 与软链接 xff08 又称符号链接 xff0c 即 soft link 或 symbolic link xff09 链接为 Linux 系统解决了文件的共享使用 xff0c 还带来了隐藏文件路径 增加权限安全及节
  • 基于STM32F407四旋翼无人机 --- 姿态解算讲解(四元数)(叉积法融合陀螺仪数据和加速度数据)(五)

    基于STM32F407四旋翼无人机 姿态解算讲解 xff08 五 xff09 姿态解算姿态解算定义欧拉角四元数四元数性质 方向余弦矩阵四元数方向余弦矩阵 叉积法融合陀螺仪数据和加速度数据叉积运算 一阶龙格库塔法四元数更新获得欧拉角 姿态解算
  • 基于STM32F407四旋翼无人机---PID算法控制(六)

    基于STM32F407四旋翼无人机 PID算法控制 xff08 六 xff09 PID介绍PID仿真分析 PID介绍 PID介绍 此算法是由P xff08 比例 xff09 I xff08 积分 xff09 和D xff08 微分 xff0
  • 四足机器人(一)----MATLAB simulink对四足机器人物理建模

    四足机器人 xff08 一 xff09 MATLAB simulink对四足机器人物理建模 一 本设计中用的是网上下载的别人已经画好的四足机器狗的3D模型 那么我们就需要将这些3D模型导入到MATLAB的建模中 xff0c 打开MATLAB
  • 四足机器人(二)---运动学逆解和步态规划

    四足机器人 xff08 二 xff09 运动学逆解和步态规划 运动学逆解步态规划MATLAB仿真 运动学逆解 其实运动学分为运动学正解和运动学逆解 xff0c 二者有什么区别呢 xff1f 因为在四足机器人中用的是12个舵机 xff0c 所