许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  升级版Matlab机器人工具箱Pinocchio Mucojo验证7轴机械臂正运动学雅克比矩阵

升级版Matlab机器人工具箱Pinocchio Mucojo验证7轴机械臂正运动学雅克比矩阵

阅读数 3
点赞 0
article_banner

1、目的

学习pinocchio库,利用它计算以及验证雅可比矩阵,和matlab机器人工具箱、mujoco等进行了对比分析

2、配置

2.1、电脑系统

芯片(Apple M1 Pro),MacOS(Sequoia 15.1)

别的平台也大差不差

2.2、pinocchio

就是一个机器人动力学的库:https://github.com/stack-of-tasks/pinocchio,参考这个链接https://stack-of-tasks.github.io/pinocchio/download.html,选择适合自己的平台安装。我选择使用python版本,利用这个命令安装conda install pinocchio -c conda-forge。版本如下:

2.3、matlab机器人工具箱

之前做过一个10.4版本的教程


    Matlab Robotics Toolbox(10.4)下载、安装、使用教程
   

本次验证使用的是10.4版本,如下:

2.4、Mujoco

mujoco是一个仿真环境(目前也在学习,后续也打算出教程哦~),利用python版本,使用

3、计算7自由度机器人(Franka)的FK、Jacobian

首先,本教程有一个配套的工程,工程文件目录如下

然后,都设置关节角度为q = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7],利用不同的库或者工具,分别计算Franka机器人的正运动学和雅可比矩阵。

3.1、pinocchio

利用pinocchio库,计算关节角度q = [0.1,0.2,0.3,0.4,0.5,0.6,0.7]时的正运动学,微分运动学,代码片段:

代码块

clike


pin.forwardKinematics(model, data, q)
pin.updateFramePlacements(model, data)

# 计算Flange的fk
Flange_pose = data.oMf[Flange_Id]
print("Flange_pose \n", Flange_pose)

# 计算jacobian,相对于local frame
Flange_Jaco_wrt_local = pin.computeFrameJacobian(model, data, q, Flange_Id, pin.LOCAL)
print("Flange_Jaco_wrt_local \n", Flange_Jaco_wrt_local)

# 计算jacobian,相对于世界坐标系
Flange_Jaco_wrt_world = pin.computeFrameJacobian(model, data, q, Flange_Id, pin.WORLD)
print("Flange_Jaco_wrt_world \n", Flange_Jaco_wrt_world)

# 计算jacobian,相对于世界坐标系
Flange_Jaco_wrt_local_world = pin.computeFrameJacobian(model, data, q, Flange_Id, pin.LOCAL_WORLD_ALIGNED)
print("Flange_Jaco_wrt_local_world \n", Flange_Jaco_wrt_local_world)

      复制成功
     
     
     
     

运行结果:

图1

利用pinocchio.visualize import MeshcatVisualizer,可视化


3.2、Robotics Toolbox for Matlab

利用matlab机器人工具箱中的自带的franka panda模型mdl_panda,计算关节角度q = [0.1,0.2,0.3,0.4,0.5,0.6,0.7]时的正运动学,微分运动学。代码片段:

代码块


% 直接调用matlab中的robotics toolbox的自带的panda,参数跟fr3是一样的
mdl_panda
% 一开始加载的panda机器人,有一个末端工具的位置,类似加上hand后的那个tcp
% 为了统一,都是按照flange的位置,所以tool的位置改成0.
panda.tool.t = [0;0;0];
% 设置关节角度
q = [0.1,0.2,0.3,0.4,0.5,0.6,0.7];
panda.plot(q);
% 计算fk
disp("panda.fkine(q)")
panda.fkine(q)
% 计算jacobian, with respect to the world frame
disp("panda.jacob0(q)")
panda.jacob0(q)
% 计算jacobian,with respect to the end effector frame
disp("panda.jacobe(q)")
panda.jacobe(q) % 在9版本是jacobn,在10版本中是jacobe

      复制成功
     
     
     
     

运行结果:


图2

可视化:


利用matlab的机器人工具箱的Link、SerialLink函数,结合DH参数。在计算计算关节角度q = [0.1,0.2,0.3,0.4,0.5,0.6,0.7]时的正运动学,微分运动学;结果跟上述保持一致。 手算各个关节连杆之间的齐次旋转矩阵T_01、xxx、T_67,然后相乘T_we = T_01*T_12*T_23*T_34*T_45*T_56*T_67;,计算正运动学,依旧跟上述保持一致

3.3、Mujoco

利用mujoco,计算关节角度q = [0.1,0.2,0.3,0.4,0.5,0.6,0.7]时的正运动学,微分运动学。代码片段:

代码块


# 获取末端法兰Flange的id,计算正运动学
Flange_site_id = m.site('attachment_site').id
Flange_site_pos = d.site_xpos[Flange_site_id]
Flange_site_rot = d.site_xmat[Flange_site_id].reshape(3, 3)
print("Flange_site 的全局位置:", Flange_site_pos)
print("Flange_site 的旋转矩阵:\n", Flange_site_rot)

# 计算末端法兰Flange的 Jacobian
Flange_site_jacp = np.zeros((3, m.nv))
Flange_site_jacr = np.zeros((3, m.nv))
mujoco.mj_jacSite(m, d, Flange_site_jacp, Flange_site_jacr, Flange_site_id)
Flange_site_jacobian = np.vstack((Flange_site_jacp, Flange_site_jacr))
print("franka fr3 的 Flange_site处的雅可比矩阵(相对于world): \n", Flange_site_jacobian)

      复制成功
     
     
     
     

运行结果:


图3

利用mujoco.viewer,可视化:


注:目前Mujoco中好像只可以计算相对于world的雅可比矩阵(mj_jacSite)。局部雅可比好像可以用mj_jac函数进行转换,后面在研究吧。

4、结果

总结一下三种方式(图1、2、3)得到的结果


发现当关节角度为[0.1,0.2,0.3,0.4,0.5,0.6,0.7]时

1、他们的FK结果都是一样。

2、pinocchio中的LOCAL参考坐标系的结果和matlab机器人工具箱中的jacobe(相对于当前局部坐标系)的结果是一致的。

3、pinocchio中的LOCAL_WORLD_ALIGNED参考坐标系结果和我理解的相对于世界坐标系(matlab机器人工具箱中的jacob0,mujoco中的mj_jacSite)的结束是一致的。

5、疑问

计算相对于世界坐标系的时候,感觉应该是pinocchio中的WORLD参考坐标系和matlab的jacob0、mujoco的mj_jacSite保持一样?但是计算WORLD,结果又很奇怪?

在pinocchio的官网中,有三个参考系的描述:https://github.com/stack-of-tasks/pinocchio/blob/master/doc/pinocchio_cheat_sheet.pdf


https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/group__pinocchio__multibody.html#gaa56acd11081bc4603c21de42b9c46c81


总感觉pinocchio中LOCAL和LOCAL_WORLD_ALIGNED表反了???

(欢迎大家讨论)

注:本文的工程代码见评论区~



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空