【Pinocchio】Pinocchio 库的速查表(Python函数)
这是一份关于 Pinocchio 库的速查表,Pinocchio 是一个用于机器人运动学和动力学计算的 库。速查表涵盖了 Pinocchio 库的各个方面,提供了常用功能的代码示例,方便用户快速查阅。以下是对文档内容的详细总结:1. 安装与导入安装:使用conda install -c conda - forge pinocchio进行安装。导入:import pinocchio as pin..
这是一份关于 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))
更多推荐
所有评论(0)