硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(下)

本文介绍Ubuntu部署ROS常见编译报错的解决方法。对编译步骤感兴趣可以查看上篇文章

硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(上)

文章适用于瑞芯微旗下RK3562、RK3566、RK3568、RK3576、RK3588等Arm64位芯片平台,各型号触觉智能均有配套核心板及开发板,实现了百分百全国产。

常见编译报错解决方法

  • 编译主机内存不足

除了增加编译主机内存配置外,建议将可以开启交换空间,例如zram:​​​​​​

sudo -i su# modprobe zram# echo 12G > /sys/block/zram0/disksize# echo 6G > /sys/block/zram0/mem_limit# mkswap /dev/zram0# swapon /dev/zram0# free -htotal used free shared buff/cache availableMem: 14Gi 3.9Gi 5.5Gi 27Mi 5.4Gi 10GiSwap: 11Gi 2.7Gi 9.3Gi

  • 执行时报`GLIBCXX_3.4.30' not found 错误

在主板端执行以上报错,是因为RK Linux SDK版本较多, 工具链版本一直在更新,因此需要使用Linux SDK编译Rootfs的交叉工具来编译ROS2。​​​​​​​

root@rk3562-buildroot:/opt/ros-foxy# ros2 run demo_nodes_cpp talker/opt/ros-foxy/lib/demo_nodes_cpp/talker: /lib/libstdc++.so.6: version`GLIBCXX_3.4.30' not found (required by /opt/ros-foxy/lib/librclcpp.so)/opt/ros-foxy/lib/demo_nodes_cpp/talker: /lib/libstdc++.so.6: version`GLIBCXX_3.4.30' not found (required by /opt/ros-foxy/lib/libspdlog.so.1)

  • 编译结果中出现x86_64动态库

ls /opt/ros/lib/python3.10/site-packages/rclpy/_rclpy_pybind11.cpython-310- x86_64-linux-gnu.so

pybind11在交叉编译的环境中, 确实是会有一些已知的问题。找到的python是HOST端的可执行文件,因此一系列参数也是根据HOST端生成,如:

PYTHON_MODULE_EXTENSION:INTERNAL=.cpython-310-x86_64-linux-gnu.so

在pybind11/tools/FindPythonLibsNew.cmake较新的代码中,建议若是Cross Compling,可在外部手动添加python的参数:

1. 修改src/ros2/pybind11_vendor中pybind11升级到v2.10.2。

2. 并在pybind11_verdor/CMakeLists.txt中设置以下2个参数,

指定具体的 PYTHON_MODULE_EXTENSION:​​​​​​​

list(APPEND extra_cmake_args "-DPYBIND11_PYTHONLIBS_OVERWRITE=OFF")list(APPEND extra_cmake_args "-DPYTHON_MODULE_EXTENSION=.cpython-310-aarch64-linux-gnu.so")

3. 在cross-compile.mixin中,也声明:​​​​​​​

- "-DPYBIND11_PYTHONLIBS_OVERWRITE=OFF"- "-DPYTHON_MODULE_EXTENSION=.cpython-310-aarch64-linux-gnu.so"

上述修改后, 仍然发现rclpy在编译时,其CMakeCache.txt文件中得到的

PYTHON_MODULE_EXTENSION仍指向"x86_64",但第二次再编译时,会被修改成预期的aarch64。有以下原因:

1. 在pybind11/tools/pybind11NewTools.cmake中, 若未设置过

PYBIND11_PYTHON_EXECUTABLE_LAST、或它值被修改了,会直接清空PYTHON_MODULE_EXTENSION。​​​​​​​

76 if(NOT ${_Python}_EXECUTABLE STREQUAL PYBIND11_PYTHON_EXECUTABLE_LAST)77 # Detect changes to the Python version/binary in subsequent CMake runs,and refresh config if needed78 unset(PYTHON_IS_DEBUG CACHE)79 unset(PYTHON_MODULE_EXTENSION CACHE)80 set(PYBIND11_PYTHON_EXECUTABLE_LAST81 "${${_Python}_EXECUTABLE}"82 CACHE INTERNAL "Python executable during the last CMake run")83 endif()

2. 在pybind11 issue #236 也有类似的现象。

3. 修改pybind11解决: 若是

PYBIND11_PYTHONLIBS_OVERWRITE="OFF",则不重设上述参数:​​​​​​​

commit f7f1f2a927dd785d109833e411325de4c248719f (HEAD -> v2.10.2-fix)Author: cross-build for rk-l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Industio_触觉智能

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

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

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

打赏作者

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

抵扣说明:

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

余额充值