自由浮动基础机器人的空间速度雅可比行列式的基础分量全为零
Base component of Spatial Velocity Jacobian for a Free-Floating Base Robot is all Zeros
我试图找到具有自由浮动底座的机器人的末端执行器空间速度雅可比行列式。由于自由浮动基数,雅可比应该包含一个基数组件和一个操纵符注释(参见 https://spart.readthedocs.io/en/latest/Tutorial_Kinematics.html#jacobians)
V_ee = 末端执行器空间速度
J_b = 基本雅可比分量
J_m = 操纵器雅可比分量
v = 广义速度
V_ee = [J_b, J_m] v
直到现在,我一直在使用 SPART 工具箱在 Matlab (https://github.com/NPS-SRL/SPART) 中执行此操作,现在我正在转向 Drake。我尝试在 MultiBodyPlant 中使用 CalcJacobianSpatialVelocity,与 SPART 相比,操纵器 Jacobian 是正确的。然而,雅可比行列式的基分量全为零。这与我的预期和 SPART 的自由浮动基地不同,基地速度有助于末端执行器空间速度。
可在此处找到此问题的示例再现:https://colab.research.google.com/github/vyas-shubham/DrakeTests/blob/main/freeFloating/computeJacobian.ipynb
我想我要么在使用 Drake 时犯了这些错误之一:
- 使用 CalcJacobianSpatialVelocity 错误。这不太可能,因为操纵器 jacobian 是正确的并且基本框架也是正确的(URDF 中只有 1 帧)。
- 计算自由浮动基数的雅可比矩阵时使用了错误的 URDF。也许我需要在 URDF 中以不同方式指定 Drake 的浮动基数以将其包含在雅可比计算中?
您的代码采用了追赶者相对于目标的雅可比行列式;它们之间没有浮动基数(因此浮动基数的 jacobian wrt 确实应该为零)。我想,也许你想 frame_A=world_frame
?
postCaptureTargetJacobian = postContactPlant.CalcJacobianSpatialVelocity(context=postCaptureContext,
with_respect_to=JacobianWrtVariable.kV,
frame_B=target_frame,
p_BP=np.zeros(3),
frame_A=world_frame,
frame_E=world_frame)
PS - 我将此单元格添加到您的笔记本中以快速检查您的运动学树
from IPython.display import display, SVG
import pydot
display(SVG(pydot.graph_from_dot_data(postContactPlant.GetTopologyGraphvizString())[0].create_svg()))
PPS - 感谢您整理笔记本中的示例。这样方便我看一下。
我试图找到具有自由浮动底座的机器人的末端执行器空间速度雅可比行列式。由于自由浮动基数,雅可比应该包含一个基数组件和一个操纵符注释(参见 https://spart.readthedocs.io/en/latest/Tutorial_Kinematics.html#jacobians)
V_ee = 末端执行器空间速度
J_b = 基本雅可比分量
J_m = 操纵器雅可比分量
v = 广义速度
V_ee = [J_b, J_m] v
直到现在,我一直在使用 SPART 工具箱在 Matlab (https://github.com/NPS-SRL/SPART) 中执行此操作,现在我正在转向 Drake。我尝试在 MultiBodyPlant 中使用 CalcJacobianSpatialVelocity,与 SPART 相比,操纵器 Jacobian 是正确的。然而,雅可比行列式的基分量全为零。这与我的预期和 SPART 的自由浮动基地不同,基地速度有助于末端执行器空间速度。
可在此处找到此问题的示例再现:https://colab.research.google.com/github/vyas-shubham/DrakeTests/blob/main/freeFloating/computeJacobian.ipynb
我想我要么在使用 Drake 时犯了这些错误之一:
- 使用 CalcJacobianSpatialVelocity 错误。这不太可能,因为操纵器 jacobian 是正确的并且基本框架也是正确的(URDF 中只有 1 帧)。
- 计算自由浮动基数的雅可比矩阵时使用了错误的 URDF。也许我需要在 URDF 中以不同方式指定 Drake 的浮动基数以将其包含在雅可比计算中?
您的代码采用了追赶者相对于目标的雅可比行列式;它们之间没有浮动基数(因此浮动基数的 jacobian wrt 确实应该为零)。我想,也许你想 frame_A=world_frame
?
postCaptureTargetJacobian = postContactPlant.CalcJacobianSpatialVelocity(context=postCaptureContext,
with_respect_to=JacobianWrtVariable.kV,
frame_B=target_frame,
p_BP=np.zeros(3),
frame_A=world_frame,
frame_E=world_frame)
PS - 我将此单元格添加到您的笔记本中以快速检查您的运动学树
from IPython.display import display, SVG
import pydot
display(SVG(pydot.graph_from_dot_data(postContactPlant.GetTopologyGraphvizString())[0].create_svg()))
PPS - 感谢您整理笔记本中的示例。这样方便我看一下。