使用凉亭和四旋翼机

Using gazebo with drake for quadrotor

本文关键字:旋翼机 凉亭      更新时间:2024-05-20

我的目标是使用有限时域线性二次调节器(FHLQR(来遵循数学程序生成的轨迹,并在Gazebo中进行模拟。由于FHLQR需要一个系统作为输入,我正在使用四旋翼发电厂,但我不确定这是否理想。当我试图将加泽博州与德雷克州联系起来时,我的问题就出现了。简而言之,将Gazebo的状态与FHLQR等控制器耦合的正确方式是什么?

我曾想过编辑QuadrotorPlant的上下文以反映Gazebo中的状态,但在这次更新之后,我很难从控制器获得控制输出。我还考虑过将模拟器耦合在控制器的输出和四轮发电厂的输入之间,但还没有弄清楚如何修改模拟器以反映Gazebo。

对于您的gazebo接口,假设您都在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

我认为我们应该能够提供帮助,但可能需要更多细节。

我对你的设置的心理模型是,你使用QuadrotorPlant来设计轨迹,并在drake中使用MakeFiniteHorizonLinearQuadraticRegulator方法。。。其结果是具有期望表示四旋翼机状态的双矢量的输入端口的drakeSystem,并且其输出表示四旋翼的推力命令的双矢量。

另外,您有一个带有四旋翼的Gazebo模拟器,它接受命令并模拟动力学。

您是否试图通过消息传递(而不是单个可执行文件(来连接它们?可能是ROS1消息?(如果是,那么我们在drake中有可以发送/接收ROS消息的小系统,我们可以向您指出(

FWIW,我绝对建议在尝试轨迹版本之前,先在drake中运行LQR控制器来尝试工作流。