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