Как заставить пакет ardrone_autonomy работать на Jetson Nano?

Я работаю над платой Jetson Nano и мне нужно соединить ее с parrot ar drone 2.0, поэтому для этого я хотел бы использовать пакет ardrone_autonomy, но я не могу этого сделать, потому что у jetson есть Ubuntu 18, который поддерживает только ROS Melodic, который не имеет этого пакета.

Вот что я попробовал:

  1. Я собрал пакет из этого репозитория: https://github.com/dsapandora/ardrone_autonomy

Но я получил эту ошибку:

/tmp/ccIoQjBo.s: Assembler messages:
/tmp/ccIoQjBo.s:128: Error: unknown mnemonic `bswap' -- `bswap x3'
generic.makefile:231: recipe for target '../../Soft/Build/targets_versions/vlib_PROD_MODE_Linux_4.9.140-tegra_GNU_Linux_usrbingcc_5.4.0/video_mem32.o' failed
make[8]: *** [../../Soft/Build/targets_versions/vlib_PROD_MODE_Linux_4.9.140-tegra_GNU_Linux_usrbingcc_5.4.0/video_mem32.o] Error 1
vlib.makefile:104: recipe for target 'all' failed
make[7]: *** [all] Error 2
Makefile:167: recipe for target 'build_vlib' failed
make[6]: *** [build_vlib] Error 2
Makefile:170: recipe for target 'all' failed
make[5]: *** [all] Error 2
Makefile:84: recipe for target 'build_libs' failed
make[4]: *** [build_libs] Error 2
Makefile:20: recipe for target 'all' failed
make[3]: *** [all] Error 2
ardrone_autonomy/CMakeFiles/ardronelib.dir/build.make:110: recipe for target '/catkin_ws/devel/src/ardronelib-stamp/ardronelib-build' failed
make[2]: *** [/catkin_ws/devel/src/ardronelib-stamp/ardronelib-build] Error 2
CMakeFiles/Makefile2:578: recipe for target 'ardrone_autonomy/CMakeFiles/ardronelib.dir/all' failed
make[1]: *** [ardrone_autonomy/CMakeFiles/ardronelib.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

После того, как я решил это, используя почти любое решение отсюда: https://github.com/AutonomyLab/ardrone_autonomy/issues/71

Я могу скомпилировать пакет без проблем, но когда я пытаюсь запустить узел, он говорит, что ardrone_driver умер, без какой-либо другой информации.

2. Затем я попытался собрать пакет в докере под ROS Kinetic, но после получения той же ошибки bswap, что и выше, после применения вышеуказанного решения я получаю следующее:

/tmp/ccFs5LFZ.s: Assembler messages:
/tmp/ccFs5LFZ.s:130: Error: unexpected characters following instruction at operand 2 -- `mov x4,x4,ror#8'
generic.makefile:231: recipe for target '../../Soft/Build/targets_versions/vlib_PROD_MODE_Linux_4.9.140-   tegra_GNU_Linux_usrbingcc_5.4.0/video_mem32.o' failed
make[8]: *** [../../Soft/Build/targets_versions   /vlib_PROD_MODE_Linux_4.9.140-tegra_GNU_Linux_usrbingcc_5.4.0   /video_mem32.o] Error 1
vlib.makefile:110: recipe for target 'all' failed
make[7]: *** [all] Error 2
Makefile:167: recipe for target 'build_vlib' failed
make[6]: *** [build_vlib] Error 2
Makefile:170: recipe for target 'all' failed
make[5]: *** [all] Error 2
Makefile:84: recipe for target 'build_libs' failed
make[4]: *** [build_libs] Error 2
Makefile:24: recipe for target 'all' failed
make[3]: *** [all] Error 2
ardrone_autonomy/CMakeFiles/ardronelib.dir/build.make:110: recipe for target '/ardrone_ws/devel/src/ardronelib-stamp/ardronelib-build' failed
make[2]: *** [/ardrone_ws/devel/src/ardronelib-stamp/ardronelib-build]     Error 2
CMakeFiles/Makefile2:578: recipe for target 'ardrone_autonomy/CMakeFiles/ardronelib.dir/all' failed
make[1]: *** [ardrone_autonomy/CMakeFiles/ardronelib.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[  2%] Built target    _ardrone_autonomy_generate_messages_check_deps_matrix33
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j2" failed

И вот где я застрял, потому что, насколько я знаю, это проблема архитектуры процессора (Jetson использует armv8), и все вышеупомянутые решения предназначены для armv7, но я не знаю, как решить эту проблему. Пожалуйста, дайте мне знать, если кто-то еще нашел решение этой проблемы. Любая помощь будет высоко ценится!

2 ответа

Решение

Я наконец решил проблему, вот полные шаги, если есть кто-то еще, кто борется с теми же проблемами:

  1. Я загрузил образ докера, используя: sudo docker pull ros:kinetic-robot-xenialА затем выполните следующие действия для запуска образа: http://wiki.ros.org/docker/Tutorials/Docker

  2. Я клонировал пакет ardrone_autonomy в рабочую среду по ссылке выше:

mkdir -p catkin_ws/src cd catkin_ws/src git clone https://github.com/dsapandora/ardrone_autonomy.git apt-get update cd ../ rosdep install --from-paths src --ignore-src -r -y catkin_make

  1. После ошибки с bswap появится, отредактируйте этот файл: devel/src/ardronelib/ARDroneLib/VP_SDK/VP_Os/linux/intrin.h и заменить:

static INLINE uint32_t _byteswap_ulong(uint32_t value){ __asm("bswap %0":"=r" (value):"0" (value));

return value; }

с этим:

static INLINE uint32_t _byteswap_ulong(uint32_t value) { int32_t tmp;

__asm __volatile( "eor %1, %2, %2, ror #16\n" "bic %1, %1, #0x00ff0000\n" "mov %0, %2, ror #8\n" "eor %0, %0, %1, lsr #8" : "=r" (value), "=r" (tmp) : "r" (value) );

return value; }

и прокомментируйте эту строку: _BitScanReverse(&index, code);

  1. После того, как вы сделаете это, если вы попытаетесь дать ему catkin_make должна появиться последняя ошибка, которую можно устранить "просто" (после того, как вы поймете, что там происходит:)), просто заменив эту строку (из того же файла, что и выше):

"mov %0, %2, ror #8\n"

с участием:

"mov %0, %2\n"

и теперь должно работать просто отлично.

PS: не забудьте найти свое рабочее место.

AR Drone 2.0 по-прежнему совместим.

Просто понизьте версию прошивки до 2.4.1 (я использую эту) с

https://www.espaciodrone.com/todos-los-firmware-del-ar-drone-1-y-2/

Включите ваш AR.Drone
Подключите ваш компьютер к сети AR.Drone
Откройте сеанс telnet для 192.168.1.1,
введите следующее: echo "1.1.1"> /firmware/version.txt
нажмите Enter,
введите следующее: echo "2.4. 1 "> /update/version.txt
Подключите FTP-клиент к порту 192.168.1.1: 5551 (я использую nautilius ctrl + l, затем ftp://192.168.1.1:551)
Загрузите загруженный файл plf на FTP-сервер (AR.Drone)
Отключите ваш компьютер от AR.Drone
Отсоедините аккумулятор от AR.Drone Повторно
подключите аккумулятор
Подождите около 5 минут, пока обновление завершится, оставьте ваш дрон включенным

И использовать этот GIT клон https://github.com/dsapandora/ardrone .. .

Отлично работает...

Другие вопросы по тегам