如何在Drake中为含drake:mimic标签的SDF模型添加控制器?
解决Drake中SDF mimic关节与连续PID控制器兼容问题
- 问题根源:Drake的
drake:mimic关节仅在全离散时间步长对齐的仿真闭环中生效,混合连续/离散系统会直接忽略mimic逻辑。 - 具体解决步骤:
- 离散化连续PID控制器:用Drake自带的
DiscreteTimeController把连续PID包起来,设置和仿真一致的离散周期。示例代码:from drake.systems.controllers import PidController, DiscreteTimeController from drake.systems.framework import DiagramBuilder builder = DiagramBuilder() # 初始化连续PID参数 pid = builder.AddSystem(PidController(kp=20.0, ki=0.5, kd=1.0)) # 按仿真步长离散化控制器,这里假设仿真步长是0.001秒 discrete_pid = builder.AddSystem(DiscreteTimeController( continuous_controller=pid, time_step=0.001)) - 统一仿真步长:搭建仿真环境时,明确设置机器人模型和整个仿真器的离散更新周期,确保所有组件的步长完全一致,不能存在连续系统的异步更新。
- 校验mimic关节配置:检查SDF里的
drake:mimic标签,确认关联的主关节正确,multiplier和offset参数符合需求,且关节类型允许mimic(仅限转动、滑动关节)。
- 离散化连续PID控制器:用Drake自带的
- 关键提醒:哪怕机器人模型设为离散,只要控制器是连续的,系统时间步长不匹配就会导致mimic关节失效,必须保证整个闭环的时间步进完全统一。
内容的提问来源于stack exchange,提问作者HanMeng
相关产品推荐
相关产品推荐

