Как заставить пакет ardrone_autonomy работать на Jetson Nano?
Я работаю над платой Jetson Nano и мне нужно соединить ее с parrot ar drone 2.0, поэтому для этого я хотел бы использовать пакет ardrone_autonomy, но я не могу этого сделать, потому что у jetson есть Ubuntu 18, который поддерживает только ROS Melodic, который не имеет этого пакета.
Вот что я попробовал:
- Я собрал пакет из этого репозитория: 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 ответа
Я наконец решил проблему, вот полные шаги, если есть кто-то еще, кто борется с теми же проблемами:
Я загрузил образ докера, используя:
sudo docker pull ros:kinetic-robot-xenial
А затем выполните следующие действия для запуска образа: http://wiki.ros.org/docker/Tutorials/DockerЯ клонировал пакет 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
- После ошибки с
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);
- После того, как вы сделаете это, если вы попытаетесь дать ему
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 .. .
Отлично работает...