如何为连续机器人添加非自由度且与主动关节线性关联的被动关节?
连续机器人1自由度运动规划与被动关节配置方案
问题背景
你所处理的连续机器人运动链结构为:
base_link --> actuation_joint --> link1 --> passive_joint1 --> link2 --> passive_joint2 --> ....
该机器人仅具备1个自由度,被动关节passive_joint1、passive_joint2的角度/位移分别为scalar*actuation_joint、2*scalar*actuation_joint。需求为:仅将actuation_joint纳入运动学计算(如RationalForwardKinematics函数),同时让所有被动连杆参与碰撞检测,但当前通过URDF/SDF导入模型时,所有关节会被视为独立自由度,无法满足需求。
可行解决方案
方法1:利用URDF的<mimic>标签配置关节耦合
URDF原生支持通过<mimic>标签定义关节间的跟随关系,可直接实现被动关节与主动关节的比例约束:
- 定义主动关节
actuation_joint:
<joint name="actuation_joint" type="revolute"> <parent link="base_link"/> <child link="link1"/> <axis xyz="0 0 1"/> <limit lower="-3.14" upper="3.14" effort="100" velocity="10"/> </joint>
- 定义被动关节
passive_joint1,绑定到主动关节并设置比例系数:
<joint name="passive_joint1" type="revolute"> <parent link="link1"/> <child link="link2"/> <axis xyz="0 0 1"/> <mimic joint="actuation_joint" multiplier="scalar"/> <!-- 将scalar替换为实际比例值 --> <limit lower="-6.28" upper="6.28" effort="0" velocity="0"/> <!-- 被动关节无需驱动力 --> </joint>
- 同理定义
passive_joint2,比例设为2*scalar:
<joint name="passive_joint2" type="revolute"> <parent link="link2"/> <child link="link3"/> <axis xyz="0 0 1"/> <mimic joint="actuation_joint" multiplier="2*scalar"/> <limit lower="-9.42" upper="9.42" effort="0" velocity="0"/> </joint>
导入此URDF后,机器人模型会自动处理关节耦合关系:运动学计算仅保留actuation_joint这1个自由度,所有被动连杆会正常参与碰撞检测,完全匹配你的需求。
方法2:手动修改机器人模型的自由度约束(适配不支持<mimic>的库)
若所用机器人库对<mimic>标签支持有限,可在导入模型后手动调整配置空间:
- 导入URDF/SDF模型,获取完整机器人结构;
- 移除被动关节的独立自由度,将其状态绑定为主动关节的函数:
# 伪代码示例 robot = load_robot_from_urdf("your_robot.urdf") # 获取目标关节 act_joint = robot.get_joint("actuation_joint") passive_joint1 = robot.get_joint("passive_joint1") passive_joint2 = robot.get_joint("passive_joint2") # 设置被动关节约束 passive_joint1.set_constraint(lambda q: scalar * q[act_joint.index]) passive_joint2.set_constraint(lambda q: 2*scalar * q[act_joint.index]) # 重新定义配置空间,仅保留主动关节 robot.set_configuration_space([act_joint])
- 将修改后的机器人模型传入IRIS系列函数(
IrisInConfigurationSpace或IrisInRationalConfigurationSpace),此时碰撞检测会覆盖所有连杆,运动学计算仅基于主动关节。
注意事项
- 验证IRIS兼容性:多数基于现代机器人库(如Drake、MoveIt)的IRIS实现均支持
<mimic>标签定义的耦合关节,无需额外修改; - 碰撞检测确认:导入模型时需确保所有连杆都被加入碰撞检测组,避免遗漏被动连杆;
- 约束验证:导入后可通过
RationalForwardKinematics计算不同主动关节角度下的被动关节状态,确认耦合关系是否正确。
内容的提问来源于stack exchange,提问作者Zhiwei
相关产品推荐
相关产品推荐

