首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用具有碰撞几何的LQR控制器

如何使用具有碰撞几何的LQR控制器
EN

Stack Overflow用户
提问于 2021-07-21 13:20:15
回答 1查看 222关注 0票数 0

我正在使用examples/atlas/atlas_run_dynamics.cc,我想添加一个LQR控制器使机器人站立。我添加了我的代码

代码语言:javascript
运行
复制
  int num_act,num_states;
  num_act = plant.num_actuators();
  num_states = plant.num_multibody_states();

  std::cout<<"num_actuators: "<<num_act<<std::endl;
  std::cout<<"num_multibody_states: "<<num_states<<std::endl;

  Eigen::MatrixXd Q = 10*Eigen::MatrixXd::Identity(num_states, num_states);
  Eigen::MatrixXd R = Eigen::MatrixXd::Identity(num_act, num_act);

  const InputPort<double>& actuation_port = plant.get_actuation_input_port();

  auto controller = systems::controllers::LinearQuadraticRegulator(
      plant, plant_context, Q, R,
      Eigen::Matrix<double, 0, 0>::Zero() /* No cross state/control costs */,
      actuation_port.get_index());

我得到了:

what(): System::FixInputPortTypeCheck(): expected value of type drake::geometry::QueryObject<drake::AutoDiffXd> for input port 'geometry_query' (index 0) but the actual type was drake::geometry::QueryObject<double>. (System ::plant)

先前的问题如下:

https://stackoverflow.com/questions/65471497/how-are-you-supposed-to-use-a-controller-with-a-urdf/65471632#65471632

https://stackoverflow.com/questions/61626553/when-doing-direct-collocation-inputporteval-required-inputport0-geometr#comment109060518_61633651

但仍然不明白如何“将包含MultibodyPlantSceneGraph的关系图传递到LQR调用”,并在本例中设置assume_non_continuous_states_are_fixed=true

有人能提供一些具体的指导吗?谢谢!

最新情况:

对于it's slightly unnatural to call LQR for a system with contact,更常见的方法是用轨迹优化的方法得到一个轨迹,包括关节力矩、接触力等,然后用一个控制器,比如lqr,来控制系统,对吗?

但德雷克对我来说很复杂。我不知道如何在带浮点和接触点的模型上使用直接配置,如何在直接配置中加入质心动量约束,如何将关节轨迹和接触力应用到模型中。我运行了acrobot/run_lqr, acrobot/run_swing_up_traj_optimization,但是他们没有浮动基,并且不涉及接触,另外,增加一个引脚连接也改变了浮动基特性,对吗?

对于更传统的软件,如Vrep,我的理解是使用一些轨迹优化方法来获取轨迹数据,使用IK/ID获取联合输入,然后使用控制器来控制多体模型。Drake似乎比我使用的其他软件更强大,但我有点迷失在文档和教程中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-23 13:06:25

实际上,我已经打开了一个PR,以便更好地记录您所看到的错误:https://github.com/RobotLocomotion/drake/pull/15437

的确,LinearQuadraticRegulator还没有assume_non_continuous_states_are_fixed。这很容易加进去。真正需要发生的是,我对各种控制设计算法进行了全面的研究,并标准化了它们的选项。(到目前为止,我一直在逐个改进他们的要求)。我在这里打开了一个问题:https://github.com/RobotLocomotion/drake/issues/15464

但是,我们还没有这个特别的选择的原因是,调用LQR是有点不自然的,一个有联系的系统。默认情况下,在某种状态下将系统线性化将包括任何活动接触力的动态,但只会忽略任何潜在的接触(要明确的是,这是数学属性,而不是代码的限制)。这些接触动力学将是刚性的,几乎可以肯定地说,在原始坐标下是无法控制的。代码可能也有限制..。并不是所有的接触几何学都会给出分析梯度。但我认为地图集模型只使用半平面上的点接触点,因此应该得到充分的支持。

当我展示了阿特拉斯平衡与LQR在我欠驱动的讲座,该模型已经取代了接触动力学与针关节在脚趾(我希望我是清楚的!)这是一个非常合理的方法;这也是为什么我们使用简化的模型来设计轮式车辆/球机器人的控制器,而不是通过接触动力学线性化。使用这些最小模型是混合动力学方法的核心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68470276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档