【Pinocchio】Pinocchio 库的速查表(Python函数)

这是一份关于 Pinocchio 库的速查表,Pinocchio 是一个用于机器人运动学和动力学计算的 库。速查表涵盖了 Pinocchio 库的各个方面,提供了常用功能的代码示例,方便用户快速查阅。以下是对文档内容的详细总结:

1. 安装与导入

  • 安装

    :使用 conda install -c conda - forge pinocchio 进行安装。

  • 导入

    import pinocchio as pin 和 from pinocchio.utils import *

  • 文档查看

    :使用 pin.Model? 查看文档。

2. 空间量操作

  • 变换(SE3)

    :涉及创建、单位变换、随机变换、逆变换、作用操作、对数和指数运算等。

  • 空间速度、加速度、力、惯性

    :定义、获取线性和角分量以及 SE3 作用操作。

  • 几何

    :四元数和角轴的表示。

  • 转换器

    :SE3 与 (x,y,z,quat) 之间的转换。

3. 数据与模型

  • 数据(Data)

    :与模型相关的数据存储,包含关节数据、位置、速度、加速度、力、质量矩阵等。

  • 模型(Model)

    :运动学树的模型定义,包括名称、关节、放置、惯性等属性,以及添加关节、帧等方法。

4. 解析器

支持加载 URDF 和 SDF 文件,分别使用 pin.buildModelFromUrdf 和 pin.buildModelFromSdf 函数。

5. 参考帧

介绍了 WORLD、LOCAL 和 LOCAL_WORLD_ALIGNED 三种坐标系。

6. 帧操作

包括更新帧位置、获取帧速度、加速度、雅可比矩阵及其时间变化等。

7. 配置操作

如随机配置、中性配置、归一化、差分、距离计算、插值和积分等,以及相应的偏导数计算。

8. 碰撞检测

提供更新碰撞对象位置、检测碰撞、计算碰撞距离等功能的函数。

9. 质心计算

计算总质量、子树质量、质心位置和质心雅可比矩阵。

10. 能量计算

计算动能、势能和机械能。

11. 运动学

正向运动学及其导数计算,获取关节速度和加速度的偏导数。

12. 雅可比矩阵

计算全模型和关节的雅可比矩阵及其时间变化。

13. 动力学

  • 正向动力学

    :使用 Articulated - Body 算法和 Composite Rigid - Body 算法。

  • 逆向动力学

    :使用 Recursive Newton - Euler 算法,计算广义重力和相关导数。

14. 质心动量

计算质心动量及其时间导数。

15. 通用计算

使用 pin.computeAllTerms 计算所有项。

16. 回归器

包括运动学回归器、静态回归器、身体回归器、关节扭矩回归器等。

17. 接触相关

  • 接触雅可比矩阵

    :获取约束模型的运动学雅可比矩阵。

  • 接触动力学

    :处理有接触的约束动力学和冲击动力学。

  • 约束动力学

    :分配内存、进行正向动力学计算及其导数计算。

  • 冲击动力学

    :处理有接触约束的冲击动力学及其导数计算。

18. 乔列斯基分解

对关节空间惯性矩阵进行乔列斯基分解,求解线性方程和计算逆矩阵。

19. 查看器

创建查看器、加载模型、初始化、显示模型,添加基本形状(球体、盒子),并改变几何形状的位置。

d10104b4d37f36f2e1e560fc402997f0.png

这张图片展示了Pinocchio库的使用指南和相关操作。内容包括如何安装和导入Pinocchio库,空间量的变换、速度、加速度、力、惯性、几何转换以及数据相关的操作。

开始 Get started

  • 简单安装:conda install -c conda-forge pinocchio

  • 导入:import pinocchio as pin

  • 从pinocchio.utils导入:from pinocchio.utils import *

  • 文档:pin.Model?

空间量 Spatial quantities

变换
  • SE3:aMb = pin.SE3(aRb, apb)

  • 单位变换:M = pin.SE3(1) or pin.SE3.Identity()

  • 随机变换:pin.SE3.Random()

  • 旋转矩阵:M.rotation

  • 平移向量:M.translation

  • SE3逆:bMa = aMb.inverse()

  • SE3作用:aMc = aMb * bMc

  • 作用矩阵:aXb = aMb.action

  • 齐次矩阵:aHb = aMb.homogeneous

  • log操作SE3 → 6D:pin.log(M)

  • exp操作:pin.exp(M)

空间速度
  • 运动:m = pin.Motion(v, w)

  • 线性加速度:m.linear

  • 角加速度:m.angular

  • SE3作用:v_a = aMb * v_b

空间加速度
  • 用于算法:a = (ω, ν̇)

  • 获取经典加速度:a' = a + (0, ω × ν)

  • pin.classicAcceleration(v, a, [aMb])

空间力
  • 力:f = pin.Force(l, n)

  • 线性力:f.linear

  • 扭矩:f.angular

  • SE3作用:f_a = aMb * f_b

空间惯性
  • 惯性:Y = pin.Inertia(mass, com, I)

  • 质量:Y.mass

  • 质心位置:Y.lever

  • 转动惯量:Y.inertia

几何

  • 四元数:quat = pin.Quaternion(R)

  • 角轴:aa = pin.AngleAxis(angle, axis)

有用的转换器

  • SE3 → (x, y, z, quat):pin.se3ToXYZQUAT(M)

  • (x, y, z, quat) → SE3:pin.XYZQUATToSE3(vec)

数据 Data

  • 与模型相关的数据:data = pin.Data(model) 或 data = model.createData()

  • 关节数据:data.joints

  • 关节/[框架]位置:data.oMi / [data.oMf]

  • 关节速度:data.v

  • 关节加速度:data.a

  • 关节力:data.f

  • 质量矩阵:data.M

  • 非线性效应:data.nle

  • 质心动量:data.hg

  • 质心矩阵:data.Ag

  • 质心惯性:data.Ig

aa0c75ec936a38fce41e9b64646fd04a.png

这张图片展示了一个关于运动学树模型的指南,包含了模型、解析器、参考框架和框架的相关信息。

模型 Model

运动学树模型    model = pin.Model()

  • 模型名称:model.name

  • 关节名称:model.names

  • 关节模型:model.joints

  • 关节位置:model.placements

  • 链接惯性:model.inertias

  • 框架:model.frames

  • 位置变量数量:model.nq

  • 速度变量数量:model.nv

方法

  • 使用 ? 获取文档和输入参数

  • 添加关节:model.addJoint

  • 添加身体到关节:model.appendBodyToJoint

  • 添加框架:model.addFrame

  • 将子模型添加到父模型:model.appendModel

  • 构建简化模型:model.buildReducedModel

解析器 Parsers

  • 加载URDF文件:pin.buildModelFromUrdf(filename,[root_joint])

  • 加载SDF文件:pin.buildModelFromSdf(filename,[root_joint], root_link_name,parent_guidance)

参考框架 Reference Frames

坐标系(CS)

  • 世界坐标系(WORLD):world CS

  • 局部坐标系(LOCAL):local CS of the joint

  • 局部坐标系对齐世界坐标系(LOCAL_WORLD_ALIGNED):local CS aligned with WORLD axis

框架 Frames

  • 更新所有操作框架的位置:pin.updateFramePlacements(model, data)

  • 当前框架相对于原点的位置:data.oMf

  • 框架速度:pin.getFrameVelocity(model, data, frame_id, ref_frame)

  • 框架加速度:pin.getFrameAcceleration(model, data, frame_id, ref_frame)

  • 经典框架加速度:pin.getFrameClassicalAcceleration(model, data, frame_id, ref_frame)

  • 框架位置:pin.framesForwardKinematics(model, data, q)

  • 框架雅可比矩阵:pin.computeFrameJacobian(model, data, q, frame_id, ref_frame)

  • 框架雅可比矩阵时间变化:pin.frameJacobianTimeVariation(model, data, q, v, frame_id, ref_frame)

  • 空间速度的偏导数:pin.getFrameVelocityDerivatives(model, data, frame_id, ref_frame)

  • 空间速度的偏导数:pin.getFrameVelocityDerivatives(model, data, joint_id, placement ref_frame)

  • 空间加速度的偏导数:pin.getFrameVelocityDerivatives(model, data, frame_id, ref_frame)

  • 空间加速度的偏导数:pin.getFrameAccelerationDerivatives(model, data, joint_id, placement ref_frame)

68d7dd0017a95696b39c5e5f9f8a298a.png

这张图片展示了一个关于机器人动力学和运动学的函数库的表格。表格分为四个部分:配置、碰撞、质心和能量。每个部分列出了相关的函数及其参数。

配置 Configuration

  • 随机配置:pin.randomConfiguration(model, [lower_bound, upper_bound])

  • 中性配置:pin.neutral(model)

  • 归一化配置:pin.normalize(model, q)

  • 配置差异:pin.difference(model, q1, q2)

  • 配置距离:pin.distance(model, q1, q2)

  • 配置平方距离:pin.squareDistance(model, q1, q2)

  • 插值配置:pin.interpolate(model, q1, q2, alpha)

  • 积分配置:pin.integrate(model, q, v)

  • 差异的偏导数:pin.dDifference(model, q1, q2, [arg_pos])

  • 积分的偏导数:pin.dIntegrate(model, q, v, [arg_pos])

碰撞 Collision

  • 碰撞物体的放置:pin.updateGeometryPlacements(model, data, geometry_model, geometry_data, [q])

  • 所有对的碰撞检测:pin.computeCollisions(model, data, geometry_model, geometry_data, q)

  • 单对的碰撞检测:pin.computeCollisions(geometry_model, geometry_data, pair_index)

  • 碰撞距离:pin.computeDistance(geometry_model, geometry_data, [pair_index])

  • 每对的碰撞距离:pin.computeDistances([model, data], geometry_model, geometry_data, [q])

  • 几何体积半径:pin.computeBodyRadius(model, geometry_model, geometry_data)

  • 宽相碰撞:pin.computeCollisions(broadphase_manager, callback)

  • 宽相碰撞(首次碰撞停止):pin.computeCollisions(broadphase_manager, stop_at_first_collision)

  • 宽相碰撞(带参数):pin.computeCollisions(model, data, broadphase_manager, q, stop_at_first_collision)

  • 正向运动学更新几何放置:pin.computeCollisions(model, data, broadphase_manager, q, stop_at_first_collision)

质心 Center of Mass

  • 模型总质量:pin.computeTotalMass(model, [data])

  • 每个子树的质量:pin.computeSubtreeMasses(model, data)

  • 质心(COM):pin.centerOfMass(model, data, q, [v, a], [compute_subtree_com])

  • 质心雅可比矩阵:pin.jacobianCenterOfMass(model, data, [q], [compute_subtree_com])

能量 Energy

  • FK和动能:pin.computeKineticEnergy(model, data, [q, v])

  • FK和势能:pin.computePotentialEnergy(model, data, [q, v])

  • FK和机械能:pin.computeMechanicalEnergy(model, data, [q, v])

c67988ae49fe149e5ee7d29a963e7d60.png

这张图片展示了一个关于运动学、雅可比矩阵、正向动力学、逆向动力学、质心、通用和运动学回归器的函数和方法的表格。每个部分都列出了相关的函数和方法,并提供了相应的调用语法。

运动学 (Kinematics)

  • 正向运动学 (FK): pin.forwardKinematics(model, data, q, [v, [a]])

  • FK 导数:

    • 世界 (WORLD): pin.computeForwardKinematicsDerivatives(model, data, q, v, a)

    • pin.getJointVelocityDerivatives(model, data, joint_id, pin.ReferenceFrame.WORLD)

    • 局部 (LOCAL): pin.getJointAccelerationDerivatives(model, data, joint_id, pin.ReferenceFrame.LOCAL)

雅可比矩阵 (Jacobian)

  • 全模型雅可比矩阵 → data.J: pin.computeJointJacobians(model, data, [q])

  • 关节雅可比矩阵: pin.getJointJacobian(model, data, joint_id, ref_frame)

  • 全模型 dJ/dt: pin.computeJointJacobiansTimeVariation(model, data, q, v)

  • 关节 dJ/dt: pin.getJointJacobianTimeVariation(model, data, joint_id, ref_frame)

正向动力学 (Forward Dynamics)

  • 铰接体算法 (Articulated-Body Algorithm) ̈q: pin.aba(model, data, q, v, tau, [f_ext])

  • 关节空间惯性矩阵逆 (Joint Space Inertia Matrix Inv): pin.computeMinverse(model, data, [q])

  • 复合刚体算法 (Composite Rigid-Body Algorithm): pin.crba(model, data, q)

逆向动力学 (Inverse Dynamics)

  • 递归牛顿-欧拉算法 (Recursive Newton-Euler Algorithm): pin.rnea(model, data, q, v, a, [f_ext])

  • 广义重力 (generalized gravity): pin.computeGeneralizedGravity(model, data, q)

  • dtau_dq, dtau_dv, dtau_da: pin.computeRNEADerivatives(model, data, q, v, a, [f_ext])

质心 (Centroidal)

  • 质心动量 (Centroidal momentum): pin.computeCentroidalMomentum(model, data, [q, v])

  • 质心动量 + 时间导数 (Centroidal momentum + time derivatives): pin.computeCentroidalMomentumTimeVariation(model, data, [q, v, a])

通用 (General)

  • 所有项 (all terms) (查看文档): pin.computeAllTerms(model, data, q, v)

运动学回归器 (Kinematic Regressor)

  • 运动学回归器: pin.computeJointKinematicRegressor(model, data, joint_id, ref_frame, [placement])

  • 运动学回归器: pin.computeFrameKinematicRegressor(model, data, frame_id, ref_frame)

这个表格提供了关于运动学、雅可比矩阵、正向和逆向动力学、质心、通用方法和运动学回归器的详细函数和方法信息。

fa53e90cb7a461e7b30f4f9449303908.png

这张图片展示了一个关于动力学和运动学计算的函数列表。每个函数都属于不同的类别,包括回归器、接触雅可比矩阵、接触动力学、约束动力学、冲击动力学和Cholesky分解。每个类别下列出了相关的函数名称和调用方法。

回归器 Regressor

  • 静态回归器:pin.computeStaticRegressor(model, data, q)

  • 身体回归器:pin.bodyRegressor(velocity, acceleration)

  • 附加到关节的身体回归器:pin.jointBodyRegressor(model, data, joint_id)

  • 附加到框架的身体回归器:pin.frameBodyRegressor(model, data, frame_id)

  • 关节扭矩回归器:pin.computeJointTorqueRegressor(model, data, q, v, a)

接触雅可比矩阵 Contact Jacobian

  • 约束模型的运动学雅可比矩阵:pin.getConstraintJacobian(model, data, contact_model, contact_data)

  • 一组约束模型的运动学雅可比矩阵:pin.getConstraintJacobian(model, data, contact_models, contact_datas)

接触动力学 Contact Dynamics

  • 带有接触的约束动力学:pin.forwardDynamics(model, data, [q, v,] tau, constraint_jacobian, constraint_drift, damping)

  • 带有接触的冲击动力学:pin.impulseDynamics(model, data, [q,] v_before, constraint_jacobian, restitution_coefficient, damping)

  • 约束矩阵的逆:pin.computeKKTContactDynamicMatrixInverse(model, data, q, constraint_jac, damping)

约束动力学 Constraint Dynamics

  • 分配内存:pin.initConstraintDynamics(model, data, contact_models)

  • 带有接触约束的约束动力学:pin.constraintDynamics(model, data, q, v, tau, contact_models, contact_datas, [prox_settings])

  • 带有运动学约束的约束动力学导数:pin.computeConstraintDynamicsDerivatives(model, data, contact_models, contact_datas, prox_settings)

冲击动力学 Impulse Dynamics

  • 带有接触约束的冲击动力学:pin.impulseDynamics(model, data, q, v, contact_models, contact_datas, r_coeff, mu)

  • 冲击动力学导数:pin.computeImpulseDynamicsDerivatives(model, data, contact_models, contact_datas, r_coeff, prox_settings)

Cholesky分解

  • 关节空间惯性矩阵的Cholesky分解:pin.cholesky.decompose(model, data)

  • x of Mx = y:pin.cholesky.solve(model, data, v)

  • 关节空间惯性矩阵的逆:pin.cholesky.computeMinv(model, data)

a31836eda1bf671dc1a6b92f2fa564af.png

这张图片展示了一个名为“Viewer”的工具的使用指南。

查看器 Viewer

开始使用

  • 创建查看器: mv = pin.visualize.MeshcatVisualizer

  • 加载模型: viz = mv(model, collision_model, visual_model)

  • 初始化: viz.initViewer(loadModel=True)

  • 显示: viz.display(q)

添加基本形状

  • 球体: viz.viewer[name].set_object(meshcat.geometry.Sphere(size), material)

  • 盒子: viz.viewer[name].set_object(meshcat.geometry.Box([sizex, sizey, sizez]), material)

显示

  • 更改几何体 [name] 的位置: 
    viz.viewer[name].set_transform(meshcat.transform(xyzquat_placement))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值