基于matlab的双足机器人动力学库还是比较少的。除了frost外,基本都是C++的,像Pinocchio,RBDL,以及drake等。本人对matlab比较熟悉,frost的使用介绍又太少了,因此自己摸索了一阵子。【Frost也有C版本,即CFrost】
-
frost安装与使用思路
1)frost安装
首先需要安装matlab 2016 和 mathematica 11以上的版本,具体见这里Mathematica_11.3.0 安装教程
然后,下载Frost并安装即可frost-dev安装包(github)。
【经验1:不能有中文路径,否则会出一些不必要的错误】
【经验2:一个错误的解决方案。错误提示“”】2)frost 库的使用思路:从urdf模型到matlab可调用代码生成
首先,输入并解析urdf模型文件,
其次,使用符号计算进行公式推导,并生成.cpp/.h文件(调用mathematica内核进行计算),
然后,采用matlab mex工具,将上述c++文件编译成matlab可调用的C++动态链接库(即.mexw64文件),
最终,通过matlab直接调用.mexw64文件内函数实现运动学/动力学/雅可比矩阵及其导数 计算。
【经验3:与一般C++机器人动力学库的使用逻辑好像不太一样,需要先符号推导,再编译成单个函数的mex文件,再提供给matlab实时调用】 -
frost计算功能介绍
1)frost计算功能:在机器人控制中,常常需要用到下面的计算,frost都有了,算是很齐全了。【逆运动学的,倒是没有注意】
M/C/G/B | Jc | dJc | centriodal com(pcom) | centriodal momentum (hg) | centriodal Jcom (Ag) | centriodal(dAg) | Jcom_total (*手动计算) | dJcom_total (*手动计算) |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √* | √* | √* | Ag(1:3)/m_total | dAg(1:3)/m_total |
[ * ] frost核心代码部分(class RobotLinks)未直接给出计算公式,但是在Atlas示例spatial_momentum.m文件中,有相关的计算公式(其中,hg=Agdq, dhg=Agddq + dAg*dq)。需要用的时候,基于atlas计算案例,自己修改即可。此外,总质心的雅可比/雅可比导数没有直接给出,但是可以由质心动量雅可比的公式推导出。
- 案例运行前依赖的工具包
在运行atlas等案例的时候使用到了一些函数(loadjson(),plux()),但是其依赖包并没有任何说明,需要自己找到并添加。
1)jsonlab库(对应loadjson函数):用于matlab读写json类文件。安装方式Matlab读取json文件
2)Spectial_v2库(对应plux函数):《Rigid Body Dynamics Algorithms》(Roy Featherstone2012)一书配套的matlab动力学计算工具,这个库比较简单,也没有urdf接口。注意这个与RBDL(C++库,Felix Richter 2018-2022)不是同一个东西。库链接Spatial Vector and Rigid-Body Dynamics Software
下载后添加路径即可:addpath(genpath(’ your path\spatial_v2 ')) - Atlas 案例运行
要成功运行,首先要将上述提到的依赖库安装好,并在运行文件中添加matlab路径。
1)运行main_sim,完成基础计算和仿真。进入Atlas项目子文件夹中,即可推导编译生成mex文件,并运行。
【问题1:目前,我运行到Animation这一节,是出现了问题的。还不知道怎么解决】,不影响后续进行,比如后面的plot一节,可以直接“运行当前节”进行绘图。
2)运行spatial_momentum.m,完成空间动量的计算函数编译。
【问题2:目前编译遇到算法方面的问题,就是pcm = transpose(pcom_atlas(q)); 这句话中,pcom_atlas并没有预先定义,也暂时不知道什么含义】
【经验4:自己在matlab中打开urdf后,稍微修改了点,ctrl+s保存了,结果导致后续仿真中,urdf文件总是读取不了。网上说是urdf的编码要改为 utf-8,但是自己尝试了很久,也没搞定。 最终,重新解压一份源zip,替换掉了就好了。还是不能随便乱改啊】
老早就写完的文章,居然没发表!估计当时觉得还没写完。现在因为实验需要,必须要转到C++的库了,也不知道要补什么了。补发一下。