Использование беседки с селезнем для квадрокоптера - PullRequest
0 голосов
/ 07 мая 2020

Моя цель - использовать линейный квадрат с конечным горизонтом c регулятор (FHLQR), чтобы следовать траектории, созданной математической программой, и моделировать ее в Gazebo. Поскольку FHLQR нуждается в системе в качестве входных данных, я использую QuadrotorPlant , но я не уверен, что это идеально. У меня проблемы возникают при попытке подключить состояние из Gazebo в Drake. Короче говоря, как правильно связать состояние Gazebo с таким контроллером, как FHLQR?

Я думал о редактировании контекста QuadrotorPlant для отражения состояния в Gazebo, но после этого обновления у меня возникли проблемы с получением управляющего вывода от контроллера. Я также думал о том, чтобы связать Simulator между выходом контроллера и входом QuadrotorPlant, но не понял, как изменить Simulator, чтобы он отражал Gazebo.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

А что касается интерфейса вашей беседки, и если вы все написали на 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
0 голосов
/ 07 мая 2020

Я думаю, что мы сможем помочь, но, вероятно, потребуется еще несколько деталей.

Моя ментальная модель вашей установки такова, что вы используете QuadrotorPlant для проектирования траектории и методы MakeFiniteHorizonLinearQuadraticRegulator в Дрейк ... результатом этого является селезень System, у которого есть входной порт, ожидающий вектора двойных чисел, представляющих состояние квадрокоптера, и он выводит вектор двойников, которые представляют команды тяги для квадрокоптера.

Отдельно у вас есть симулятор Gazebo с квадрокоптером, который принимает команды и моделирует динамику.

Вы пытаетесь связать их через передачу сообщений (в отличие от одного исполняемого файла)? Предположительно с сообщениями ROS1? (Если да, то у нас есть небольшие системы в Drake, которые могут отправлять / получать сообщения ROS, на которые мы можем указать вам)

FWIW, я определенно рекомендую попробовать рабочий процесс с простым запуском контроллера LQR в Drake раньше пробуем вариант с траекторией.

...