функция AddrelativeForce gazebo работает неправильно

#ros #gazebo-simu

#ros #gazebo-simu

Вопрос:

Здравствуйте, у меня возникли некоторые проблемы с использованием функции Gazebo AddRelativeForce().

Я делаю какой-то самолет и имеет 12 ссылок.

Итак. Я устанавливаю принудительную силу для каждой ссылки с помощью команды ROS.

Посмотрите на этот рисунок.

введите описание изображения здесь

вы можете увидеть 12 ссылок

В этом случае я прикладываю усилие только к 1 звену в положении двигателя на 1 час

Я думаю, что самолет остается вращающимся и движется носом вверх.

но движение похоже на это видео. введите описание ссылки здесь

Мой код плагина

 public: void SetForce_C2(const double amp;_forceC2)
{
    this->link2->AddRelativeForce({0,0,_forceC2});
}

public: void SetForce_C3(const double amp;_forceC3)
{
    this->link3->AddRelativeForce({0,0,_forceC3});
}

public: void SetForce_C4(const double amp;_forceC4)
{
    this->link4->AddRelativeForce({0,0,_forceC4});
}
    this->link2 = model->GetLinks()[2];
    this->link3 = model->GetLinks()[3];
    this->link4 = model->GetLinks()[4];

private:
    physics::LinkPtr link2;

private:
    physics::LinkPtr link3;

private:
    physics::LinkPtr link4;
 

Я думаю, что код правильный.

Я хочу, чтобы движение было правильным, чтобы приложить усилие только к 1 звену в положении двигателя на 1 час

и чем движение самолета катится и нос вверх

Я думаю, что gazebo не вычисляет момент инерции и не применяется к самолету.

если верно, должен ли я рассчитать момент силы инерции и применить себя?

Ps. Инерция и масса тела самолета равна

 <mass>5315.4</mass>
    <inertia>
      <ixx>34198</ixx>
      <ixy>-0.08385</ixy>
      <ixz>-1.56572</ixz>
      <iyy>49580</iyy>
      <iyz>3959.2</iyz>
      <izz>77842</izz>
    </inertia>
 

введите описание изображения здесь

Ps2. ось соединения Z поднята
введите описание изображения здесь