Проведя некоторые исследования, я обнаружил, что не существует ни одного проверенного способа кросс-компиляции ROS для RaspberryPi.Лучшее, что я мог придумать, - это загрузить /usr
, /lib
и /opt
с целевого устройства на мою машину разработки (установленную на $HOME/Projects/TargetResources
), создать файл CMake Toolchain и вызвать catkin_make_isolated -DCMAKE_TOOLCHAIN_FILE=...
.Несмотря на то, что процесс сборки начинается, у меня возникает немедленная ошибка:
$ catkin_make_isolated -DCMAKE_TOOLCHAIN_FILE=${HOME}/Projects/${MY_PROJ}/RPI3+_Melodic_Toolchain.cmake
CMake Error at ${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/assert.cmake:17 (message):
Assertion failed: check for file existence, but filename
(RT_LIBRARY-NOTFOUND) unset. Message: RT Library
Call Stack (most recent call first):
${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/tools/rt.cmake:42 (assert_file_exists)
${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/all.cmake:159 (include)
${HOME}/Projects/TargetResources/opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:20 (include)
CMakeLists.txt:10 (find_package)
После некоторого копания целевое устройство (то есть RaspberryPi 3+) не имеет librt.so
.Интересно, что если я просто запустил catkin_make
для проекта на устройстве, все будет успешно построено.Поэтому я не думаю, что попытка установить его действительно необходима (или правильное решение).
Кроме того, я должен отметить, что на цели установлена ROS Melodic Base, в то время как на моей машине для разработки установлен ROS Melodic Desktop.Я не уверен, что это вызовет проблему, с которой я столкнулся, но я не хочу преждевременно исключать ее.
Итак, мой вопрос: как мне поступить?Я что-то упустил, когда настраивал набор инструментов, или я предполагаю что-то о ROS / Catkin, которое ложно?
Заранее благодарю за всю вашу помощь и внимание.
Редактировать/ Addendum
В соответствии с запросом, вот файл набора инструментов:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/Projects/RpiDevTools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/arm-linux-gnueabihf/sysroot/)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
В sysroot
я скопировал каталог RaspberryPi /opt
, так как именно там установлены библиотеки ROS Melodic,Я обнаружил, что эти библиотеки могут иметь зависимости (например, log4cxx/level.h
), которых нет в каталоге RaspberryPi / Tools sysroot/usr/include
.Аналогично, разрешение зависимостей общего объекта одинаково громоздко.