这是一份关于 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. 查看器
创建查看器、加载模型、初始化、显示模型,添加基本形状(球体、盒子),并改变几何形状的位置。

这张图片展示了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.translationSE3逆:
bMa = aMb.inverse()SE3作用:
aMc = aMb * bMc作用矩阵:
aXb = aMb.action齐次矩阵:
aHb = aMb.homogeneouslog操作SE3 → 6D:
pin.log(M)exp操作:
pin.exp(M)
空间速度
运动:
m = pin.Motion(v, w)线性加速度:
m.linear角加速度:
m.angularSE3作用:
v_a = aMb * v_b
空间加速度
用于算法:
a = (ω, ν̇)获取经典加速度:
a' = a + (0, ω × ν)pin.classicAcceleration(v, a, [aMb])
空间力
力:
f = pin.Force(l, n)线性力:
f.linear扭矩:
f.angularSE3作用:
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

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

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

这张图片展示了一个关于运动学、雅可比矩阵、正向动力学、逆向动力学、质心、通用和运动学回归器的函数和方法的表格。每个部分都列出了相关的函数和方法,并提供了相应的调用语法。
运动学 (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)
这个表格提供了关于运动学、雅可比矩阵、正向和逆向动力学、质心、通用方法和运动学回归器的详细函数和方法信息。

这张图片展示了一个关于动力学和运动学计算的函数列表。每个函数都属于不同的类别,包括回归器、接触雅可比矩阵、接触动力学、约束动力学、冲击动力学和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)

这张图片展示了一个名为“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))
5063

被折叠的 条评论
为什么被折叠?



