首页 > 解决方案 > 使用带德雷克的凉亭进行四旋翼飞行器

问题描述

我的目标是使用有限水平线性二次调节器(FHLQR) 来跟踪由数学程序生成的轨迹并在 Gazebo 中对其进行模拟。由于 FHLQR 需要一个系统作为输入,我正在使用QuadrotorPlant,但我不确定这是否理想。当我尝试将状态从 Gazebo 连接到 Drake 时,我的问题出现了。简而言之,将 Gazebo 的状态与 FHLQR 等控制器耦合的正确方法是什么?

我曾考虑编辑 QuadrotorPlant 的上下文以反映 Gazebo 中的状态,但在此更新之后,我无法从控制器获取控制输出。我还考虑过在控制器的输出和 QuadrotorPlant 的输入之间耦合模拟器,但还没有弄清楚如何修改模拟器以镜像 Gazebo。

标签: c++drakegazebo-simu

解决方案


对于您的凉亭界面,假设您都使用 c++,那么我想它看起来像这样:

// setup
auto regulator = MakeFiniteHorizonLinearQuadraticRegulator(...);
auto context = regulator.CreateDefaultContext();

// during execution
context->SetTime(time_from_gazebo);
context->FixInputPort(0, Eigen::VectorXd([state obtained from gazebo]));
Eigen::VectorXd u = regulator->get_output_port(0)->Eval(context);
// then apply u to your gazebo interface

推荐阅读