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

在完成上述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)

​ 通过上述命令,即可进行构建,而相关参数的作用,参考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'))"

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Kinetic ROS 是一种基于机器人操作系统(ROS)的版本,主要用于开发和控制机器人交叉编译是在一个计算机系统上为另一个不同架构的目标系统生成可执行代码的过程。 在进行 Kinetic ROS 交叉编译之前,需要确保目标系统和开发系统具有相同的 ROS 版本和软件库。此外,还需了解目标系统的架构和操作系统。 首先,在开发系统上安装必要的交叉编译工具链和相关软件包。这些工具链包括交叉编译器、连接器和库文件等。可以通过命令行或者包管理器来安装这些工具。 接下来,需要为目标系统交叉编译 ROS 的源代码。首先,从源代码库中获取 ROS 的源代码,并解压到开发系统的工作空间中。然后,通过运行特定的交叉编译命令,将源代码编译成目标系统可以执行的可执行文件。 在编译过程中,可能会遇到一些依赖项缺失的问题。这时,需要在开发系统上安装这些缺失的依赖项,并且确保它们也符合目标系统的要求。 完成编译后,将生成的可执行文件和相关的库文件复制到目标系统中。然后,将所有必要的配置文件和启动脚本等也复制到目标系统上。 最后,将目标系统与开发系统连接起来,并确保两者之间的通信正常。这可能需要对网络设置或者串口通信进行相应的配置。 通过以上步骤,可以成功地将 Kinetic ROS 交叉编译到目标系统中,从而实现在目标系统上进行机器人控制和开发的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chengwei_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值