Mavros: Публикация трансформирует оба направления неверно

Созданный на 20 июл. 2019  ·  5Комментарии  ·  Источник: mavlink/mavros

Комментарий о том, что вам нужно опубликовать преобразование другим способом, неверен.

https://github.com/mavlink/mavros/blob/bdc5c7386f9451ac244b5a85c087ad620fd3a989/mavros/src/lib/uas_data.cpp#L57

Следует использовать только один из них:

https://github.com/mavlink/mavros/blob/366a9a74847b2e231035b47fa06651527a4556b9/mavros/src/lib/uas_data.cpp#L56 -L58

Они будут бороться друг с другом и вызывать постоянное воспроизводство, так что в любой момент времени побеждает последний полученный. Вероятно, первая протестированная версия вызвала отключение дерева из-за непреднамеренного повторного родительства, и добавление второго вызова замаскировало его.

И пока смотрю на этот код. Чище и эффективнее публиковать вектор статических преобразований, чтобы воспользоваться преимуществами фиксации, а не публиковать последовательность отдельных преобразований.

Все 5 Комментарий

Мы уже поднимали это здесь раньше: https://github.com/mavlink/mavros/pull/1252#issuecomment -503084522

@ TSC21 FYI

@jkflying @baumanta Можете ли вы попробовать проверить, существует ли проблема с отметкой времени при удалении дублирующего издателя?

@tfoote, вы были правы в своем комментарии к выпуску №388 . Кажется, что цикл tf в mavros всегда отвечает за получение tf в ros :: Time :: now ().

Я поместил прослушиватель tf в код избегания, который извлекал преобразования по метке времени последнего облака точек и в ros :: Time :: now () и распечатал оба преобразования. По мере того, как дрон двигался, я ожидал, что трансформации будут немного другими. Использование Mavros 0.29.2. оба преобразования всегда были идентичны, даже несмотря на то, что отметки времени не были. При использовании Mavros PR # 1252 преобразования были другими.

Хорошо, я подозреваю, что код плагина odom не работал из-за неясного ограничения заблокированных тем - вы не можете публиковать разные сообщения в заблокированной теме из одного и того же процесса.

См. Https://github.com/ros/ros_comm/issues/146 и https://answers.ros.org/question/261815/how-can-i-access-all-static-tf2-transforms/.

Обходной путь для этого - создать вектор всех преобразований и опубликовать их за один раз (перейдите к специализированной функции TF2 http://docs.ros.org/melodic/api/tf2_ros/html/c++/classtf2__ros_1_1StaticTransformBroadcaster.html#a83d0664cb0cc85689d )

Была ли эта страница полезной?
0 / 5 - 0 рейтинги