当前位置:   article > 正文

ROS2交叉编译操作_ros2 交叉编译

ros2 交叉编译

ROS2移植过程

在移植ROS2之前,先确认需要移植的版本以及其对应的依赖,这些信息可以在 ROS 2 Releases and Target Platforms 中有介绍,可依据自身需要使用的平台,参考该链接进行选择,下面以ROS2 Humble为例进行介绍ROS2移植操作。

ROS Humble依赖如下:

在这里插入图片描述

而ROS2的构建依赖Colcon工具,下面先从该工具进行介绍。

构建工具Colcon

colcon是ROS构建工具catkin_make、catkin_make_isolated、catkin_tools和ament_tools的迭代。在PC端通过sudo apt install python3-colcon-common-extensions可实现安装,而在交叉编译的时候,可安装https://github.com/colconhttps://pypi.org/project/colcon-common-extensions/等仓库下的多个包,以支持colcon的构建,如果colcon的拓展包功能不齐全,构建过程可能存在错误。当前移植过程使用到的colcon包如下:

colcon-argcomplete  
colcon-common-extensions  
colcon-defaults  
colcon-library-path  
colcon-notification  
colcon-package-information  
colcon-parallel-executor  
colcon-python-setup-py  
colcon-ros
colcon-cmake        
colcon-core               
colcon-devtools  
colcon-metadata      
colcon-output        
colcon-package-selection    
colcon-pkg-config         
colcon-recursive-crawl  
colcon-test-result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在完成上述colcon包的编译后,将可通过colcon build --cmake-force-configure --cmake-args CMAKE_ARGS进行编译ROS2包。

ROS2核心包

在准备好构建工具之后,下一步检查ROS2移植所需要的包,可以通过https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.repos获取ROS2依赖的包,下载后逐个将其进行交叉编译即可。

构建命令

colcon build \
                --cmake-force-configure --cmake-args \
                -DCMAKE_SYSTEM_NAME=Linux \
                -DCMAKE_SYSTEM_VERSION=1 \
                -DCMAKE_SYSTEM_PROCESSOR=$(ARCH) \
                -DCMAKE_BUILD_TYPE=Release \
                -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \
                -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \
                -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
                -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \
                -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \
                -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \
                -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
                -DCMAKE_ASM_COMPILER="$(CMAKE_C_COMPILER)" \
                -DCMAKE_EXE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \
                -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \
                -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \
                -DCMAKE_AR="$(CMAKE_AR)" \
                -DCMAKE_NM="$(CMAKE_NM)" \
                -DCMAKE_RANLIB="$(CMAKE_RANLIB)" \
                -DCMAKE_FIND_ROOT_PATH="$(CMAKE_FIND_ROOT_PATH)" \
                -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
                -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
                -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
                -DCMAKE_STRIP=$(call cmake_tool,$(TARGET_CROSS)strip) \
                -DCMAKE_INSTALL_PREFIX=/usr \
                -DDL_LIBRARY=$(STAGING_DIR) \
                -DCMAKE_PREFIX_PATH=$(STAGING_DIR) \
                -DCMAKE_SKIP_RPATH=TRUE  \
                -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \
                -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \
                -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \
                -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \
                -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \
                -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \
                -DPython3_EXECUTABLE=$(HOST_PYTHON3_BIN) \
                -DPYTHON_EXECUTABLE=$(HOST_PYTHON3_BIN) \
                -DPYTHON_SOABI=cpython-$(PYTHON3_VERSION_MAJOR)$(PYTHON3_VERSION_MINOR) \
                -DBUILD_TESTING=OFF \
                -DSECURITY=ON \
				$(CMAKE_OPTIONS)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

​ 通过上述命令,即可进行构建,而相关参数的作用,参考ROS2交叉编译可参考官方链接Cross-compilation)介绍。

ROS2安装注意事项

ROS2安装包的时候,将会在shard目录下存在相关的local_setup.sh和package.sh文件,其中的AMENT_CURRENT_PREFIX和_colcon_package_sh_COLCON_CURRENT_PREFIX变量需要修改为目标平台的根文件系统路径,否则执行ROS2时无法查找到相关的包。

ROS2运行

ROS节点间通信依赖本地回环网络,执行应用前需要确保系统本身网络回环是正常的。

FAQ

编译出现说找不到相关包,怎么办?

ROS2的包很多,如果出现编译报错需要依赖的包没有找到,可以先到ROS2 Documentation:Humble界面搜索,确认找不到的包属于哪个ROS2包,然后将其下载编译即可,并增加相关的DEPENDS。

找不到链接库

编译时找不到编译的库,可在Makefile中,通过TARGET_LDFLAGS增加链接库即可。如果本身没有该库,则先编译,再增加链接和依赖。

执行ROS2 python出现找不到包

如果执行cpp的应用程序可正常执行,而执行python的应用程序则出现找不到包的情况,则是因为在编译的时候,传递的PYTHON_SOABI配置不正确导致的。PYTHON_SOABI包含了Python解释器使用的操作系统、编译器和Python版本的信息等细节,因此其具体内容会随着Python版本、操作系统和编译器不同而有所区别。由于PYTHON_SOABI包含了底层系统和编译器的信息,因此在不同平台和不同版本的Python中,它的值可能会有所不同。这意味着在构建C扩展模块时必须要注意确保与Python解释器使用相同的共享库文件,否则可能会导致未定义的行为或错误。

如何获取当前python的PYTHON_SOABI信息呢?

$ python3 -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))"
  • 1

在获取PYTHON_SOABI信息后,将其传递到编译参数即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/727302
推荐阅读
相关标签
  

闽ICP备14008679号