拜读维拉科技关于机器人相关信息的综合整理,涵盖企业排名、产品类型及资本市场动态:一、中国十大机器人公司(综合类)优必选UBTECH)聚焦人工智能与人形机器人研发,产品覆盖教育、娱乐及服务领域,技术处于行业前沿。硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(下)机器人中科院旗下企业,工业机器人全品类覆盖,是国产智能工厂解决方案的核心供应商。埃斯顿自动化国产工业机器人龙头,实现控制器、伺服系统、本体一体化自研,加速替代外资品牌。遨博机器人(AUBO)协作机器人领域领先者,主打轻量化设计,适用于3C装配、教育等柔性场景。埃夫特智能国产工业机器人上市第一股,与意大利COMAU深度合作,产品稳定性突出。二、细分领域机器人产品智能陪伴机器人Gowild公子小白:情感社交机器人,主打家庭陪伴功能。CANBOT爱乐优:专注0-12岁儿童心智发育型亲子机器人。仿真人机器人目前市场以服务型机器人为主,如家庭保姆机器人(售价10万-16万区间),但高仿真人形机器人仍处研发阶段。水下机器人工业级产品多用于深海探测、管道巡检,消费级产品尚未普及。硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(下)资本市场动态机器人概念股龙头双林股份:特斯拉Optimus关节模组核心供应商,订单排至2026年。中大力德:国产减速器龙头,谐波减速器市占率30%。金力永磁:稀土永磁材料供应商,受益于机器人电机需求增长。行业趋势2025年人形机器人赛道融资活跃,但面临商业化落地争议,头部企业加速并购整合。四、其他相关机器人视频资源:可通过专业科技平台或企业官网(如优必选、新松)获取技术演示与应用案例。价格区间:服务型机器人(如保姆机器人)普遍在10万-16万元,男性机器人13万售价属高端定制产品。
本文介绍Ubuntu部署常见编译报错的解决方法。对编译步骤感兴趣可以查看上篇文章https://www.elecfans.com/d/6788562.html
文章适用于旗下RK3562、RK3566、RK3568、RK3576、RK3588等64位芯片平台,各型号触觉均有配套核心板及开发板,实现了百分百全国产。

常见编译报错解决方法

编译主机内存不足
除了增加编译主机内存配置外,建议将可以开启交换空间,例如z:
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 -h total used free shared buff/cache avlable Mem: 1i 3.9Gi 5.i 27Mi 5.4Gi 10Gi Swap: 11Gi 2.7Gi 9.3Gi
执行时报`GLIBCXX_3.4.30 not found 错误
在主板端执行以上报错,是因为RK K版本较多, 工具链版本一直在更新,因此需要使用Linux SDK编译Rootfs的交叉工具来编译。
root@rk3562-buildroot:/opt/ros-foxy# ros2 run demo_nodes_cpp talker /opt/ros-foxy/lib/demo_nodes_cpp/talker: /lib/libst++.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/.10/site-packages/rclpy/_rclpy_pybind11.cpython-310- x86_64-linux-gnu.so
pybind11在交叉编译的环境中, 确实是会有一些已知的问题。找到的是HOST端的可执行文件,因此一系列参数也是根据HOST端生成,如:
PYTHON_MODULE_EXNSION: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-comle.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 sequent CMake runs, and refresh config if needed 78 unset(PYTHON_IS_DEBUG CACHE) 79 unset(PYTHON_MODULE_EXTENSION CACHE) 80 set(PYBIND11_PYTHON_EXECUTABLE_LAST 81 "${${_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 (HE -> v2.10.2-fix) Author: cross-build for rk-linux-sdk Date: Fri Sep 22 08:24:58 2023 +0000 Do not override the PYTHON_MODULE_EXTENSION if cross building As suggested in tools/FindPythonLibsNew.cmake, PYBIND11_PYTHONLIBS_OVERWRITE is a flag to indicate that we set python variables manually when cross building. In this case, do not override variables if PYBIND11_PYTHON_EXECUTABLE_LAST changed or is empty. diff --git a/tools/pybind11NewTools.cmake b/tools/pybind11NewTools.cmake index 7d7424a7..91980dad 100644 --- a/tools/pybind11NewTools.cmake +++ b/tools/pybind11NewTools.cmake @@ -73,7 +73,7 @@ if(NOT DEFINED ${_Python}_EXECUTABLE) endif() -if(NOT ${_Python}_EXECUTABLE STREQUAL PYBIND11_PYTHON_EXECUTABLE_LAST) 7.4 google_benchmark工程缺少limits头文件 编译foxy时会报如下错误, 原因是缺少头文件: 该修改在ROS2较新版本中已经修复; 补丁包也有包含 7.5 Linux SDK工具链中定义_FORFY_SOURCE +if(NOT ${_Python}_EXECUTABLE STREQUAL PYBIND11_PYTHON_EXECUTABLE_LAST AND NOT PYBIND11_PYTHONLIBS_OVERWRITE STREQUAL "OFF") # Detect changes to the Python version/binary in subsequent CMake runs, and refresh config if needed unset(PYTHON_IS_DEBUG CACHE) unset(PYTH
google_benchmark工程缺少limits头文件
编译foxy时会报如下错误:
In file included from /buildroot/build/ros/google_benchmark_vendor/benchmark- 1.5.2-prefix/src/benchmark-1.5.2/src/benchmark_register.cc:15: /buildroot/build/ros/google_benchmark_vendor/benchmark-1.5.2- prefix/src/benchmark-1.5.2/src/benchmark_register.h: In function ‘typename std::vector::iterator benchmark::internal::AddPowe(std::vector*, T, T, int)’: /buildroot/build/ros/google_benchmark_vendor/benchmark-1.5.2- prefix/src/benchmark-1.5.2/src/benchmark_register.h:22:30: error: ‘numeric_limits’ is not a member of ‘std’ 22 | static const T kmax = std::numeric_limits::max(); | ^~~~~~~~~~~~~~
原因是缺少头文件:
/buildroot/build/ros/google_benchmark_vendor/benchmark-1.5.2- prefix/src/benchmark-1.5.2/src/benchmark_register.h #include
Linux SDK工具链中定义_FORTIFY_SOURCE
--- stderr: mimick_vendor Cloning into mimick-f171450b5ebaa3d2538c762a059dfc6ab7a01039... fatal: unable to cess https://github.com/ros2/Mimick.git/: gnutls_handshake() fai: Error in the pull function. Cloning into mimick-f171450b5ebaa3d2538c762a059dfc6ab7a01039... HEAD is now at f171450 Add armv7l as a 32-bit ARM architecture. (#16) In file included from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64- buildroot-linux-gnu/sysroot/usr/include/errno.h:25, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/include/mimick/mock.h:27, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/include/mimick/mimick.h:401, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/sample/strdup/test.c:1: 报错仅在指定了-DCMAKE_TOOLCHAIN_FILE="/opt/aarch64-buildroot-linux-gnu_sdkbuildroot/share/buildroot/toolchainfile.cmake"交叉工具链,且该cmake定义了_FORTIFY_SOURCE 可不指定CMAKE_TOOLCHAIN_FILE,或删除_FORTIFY_SOURCE 7.6 CMake找不到exlibConfig.cmake 编译ament_cmake_vendor_package报找不到exlib,但实际该exlib库都被正确指定了。 /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linuxgnu/sysroot/usr/include/features.h:412:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Werror=cpp] 412 | # warning _FORTIFY_SOURCE requires compiling with optimization (-O) | ^~~~~~~ cc1: all warnings being treated as errors make[5]: *** [sample/strdup/CMakeFiles/strdup_test.dir/build.make:63: sample/strdup/CMakeFiles/strdup_test.dir/test.c.o] Error 1 make[4]: *** [CMakeFiles/Makefile2:302: sample/strdup/CMakeFiles/strdup_test.dir/all] Error 2 make[4]: *** Waiting for unfinished jobs.... In file included from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64- buildroot-linux-gnu/sysroot/usr/include/errno.h:25, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/include/mimick/mock.h:27, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/include/mimick/mimick.h:401, from /buildroot/build/ros/mimick_vendor/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039-prefix/src/mimickf171450b5ebaa3d2538c762a059dfc6ab7a01039/test/test.c:1: /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linuxgnu/sysroot/usr/include/features.h:412:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Werror=cpp] 412 | # warning _FORTIFY_SOURCE requires compiling with optimization (-O) | ^~~~~~~ cc1: all warnings being treated as errors
报错仅指定了
-DCMAKE_TOOLCHAIN_FILE="/opt/aarch64-buildroot-linux-gnu_sdkbuildroot/share/buildroot/toolchainfile.cmake"交叉工具链,且该cmake定义了_FORTIFY_SOURCE。
可不指定CMAKE_TOOLCHAIN_FILE,或删除_FORTIFY_SOURCE。
CMake找不到exlibConfig.cmake
编译ament_cmake_vendor_package报找不到exlib,但实际该exlib库都被正确指定了。
root@db4be0cd3eca:/buildroot/build/ros/ament_cmake_vendor_package/test# make [ 33%] Built target exlib_bad [ 66%] Built target exlib_good [ 71%] Peorming configure step for depender long initial cache file /buildroot/build/ros/ament_cmake_vendor_package/test/depender-config.cmake CMake Error at CMakeLists.txt:4 (find_package): By not providing "Findexlib.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "exlib", but CMake did not find one. Could not find a package configuration file provided by "exlib" with any of the following names: exlibConfig.cmake exlib-config.cmake Add the installation prefix of "exlib" to CMAKE_PREFIX_PATH or set "exlib_DIR" to a directory containing one of the above files. If "exlib" provides a separate development package or SDK, be sure it has been installed. # strace make 可以看到: [pid 458018] newfstatat(AT_FDCWD, "/opt/aarch64-buildroot-linux-gnu_sdkbuildroot/aarch64-buildroot-linuxgnu/sysroot/buildroot/build/ros/ament_cmake_vendor_package/test/exlib_badprefix/install", 0x7a495cf50, 0) = -1 ENOENT (No such file or directory) # : # grep CMAKE_PREFIX_PATH depender-config.cmake set(CMAKE_PREFIX_PATH [= [/buildroot/build/ros/ament_cmake_vendor_package/test/exlib_badprefix/install;/buildroot/build/ros/ament_cmake_vendor_package/test/exlib_goodprefix/install;/buildroot/build/ros/ament_cmake_vendor_package/test/dependerprefix/install]=] CACHE INTERNAL "") 它去找了Toolchain目录下的sysroot/$CMAKE_PREFIX_PATH,所以找不到。
CMAKE_PREFIX_PATH设置是正确的,有包含exlib库的路径。
通过strace make 可以看到工具链实际去找的路径不正确,多加了
/opt/aarch64-buildroot-linuxgnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/
原因: colcon命令中指定了参数
--cmake-args -DCMAKE_TOOLCHAIN_FILE="/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/share/buildroot/toolchainfile.cmake" ,该设置与export环境变量mimix中设置的编译工具链不同导致。
pkg-config找不到
Starting >>> tracetools --- stderr: tracetools CMake Error at /usr/share/cmake- 3.22/Modules/FindPackageHandleStandardArgs.cmake:230(message): Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) Reason given by package: The command "/usr/bin/pkg-config" --version failed with output: stderr: /usr/bin/pkg-config: symbol lookup error: /usr/bin/pkg-config: undefined symbol: pkgconf_cross_personality_deinit result: 127 Call Stack (most recent call first): /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-3.22/Modules/FindPkgConfig.cmake:99 (find_package_handle_standard_args) CMakeLists.txt:35 (find_package)
首先docker中应该有安装pkgconf(不是pkg-config),cmake中pkg_check_modules()会使用到。
Linux SDK中如果也编译了pkgconf,也会编译host-pkgconf,因为与docker的pkgconf版本不同, 在pkgconf.so动态库搜索时, 找到的是buildroot 编译的host pkgconf.so,所以失败。
需要设置PKG_CONFIG_PATH
在编译src/ros2/ros2_tracing/tracetools/时, 其CMakeLists.txt中指定:
pkg_check_modules(LTTNG REQUIRED lttng-ust)
编译报错:
Starting >>> tracetools --- stderr: tracetools CMake Error at /usr/share/cmake-3.22/Modules/FindPkgConfig.cmake:611 (message): A required package was not found Call Stack (most recent call first): /usr/share/cmake-3.22/Modules/FindPkgConfig.cmake:833 (_pkg_check_modules_internal) CMakeLists.txt:36 (pkg_check_modules)
通过strace -f 去抓取log, 发现并未在Linux SDK的sysroot中去查找,因此报错。
需要设置以下环境变量:
export PKG_CONFIG_PATH=/buildroot/host/aarch64-buildroot-linuxgnu/sysroot/usr/lib/pkgconfig
另一种情况是pkg-config找到了docker中的lttng,而不是target目标的,并报错如下:
Starting >>> tracetools --- stderr: tracetools /usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: not find -llttng-ust-common: No such file or directory collect2: error: ld returned 1 exit status gmake[2]: *** [CMakeFiles/tracetools.dir/build.make:129: libtracetools.so] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:161: CMakeFiles/tracetools.dir/all] Error 2 gmake[1]: *** Waiting for unfinished jobs.... gmake: *** [Makefile:146: all] Error 2 --- Failed <<< tracetools [4.72s, exited with code 2]
因为找到的是docker的lttng,它的版本与buildroot不同, 前者lttng-ust.pc声明需要链接lttng-ustcommon,但buildroot中缺少lttng-ust-common这个库。
同样需要设置环境变量:
export PKG_CONFIG_PATH=/buildroot/host/aarch64-buildroot-linuxgnu/sysroot/usr/lib/pkgconfig
该参数已经在编译脚本中指定
Docker中可以不安装lttng包
需要设置CMAKE_INCLUDE_PATH
Starting >>> orocos_kdl_vendor --- stderr: orocos_kdl_vendor Cloning into orocos_kdl-507de66... done. HEAD is now at 507de66 Fix CMake warning on Windows (#392) Submodule python_orocos_kdl/pybind11 (https://github.com/pybind/pybind11.git) registered for path python_orocos_kdl/pybind11 Cloning into /buildroot/build/ros/orocos_kdl_vendor/orocos_kdl-507de66- prefix/src/orocos_kdl-507de66/python_orocos_kdl/pybind11... CMake Error: The following variables are used in this project, but they are set to NOOUND. Please set them or make sure they are set and tested correctly in the CMake files: EIGEN3_INCLUDE_DIR (ADVANCED)
因为Linux SDK编译过程中生成的include文件路径需要单独指定, 否则cmake无法搜索得到,如下:
export CMAKE_INCLUDE_PATH=/buildroot/host/aarch64-buildroot-linuxgnu/sysroot/usr/include/
该参数已经在编译脚本中指定
unsafe header/library used in cross-compilation --- stderr: action_msgs aarch64-buildroot-linux-gnu-gcc: WARNING: unsafe header/library path used in cross-compilation: -isystem /usr/local/lib/python3.10/distpackages/numpy/core/include 在交叉编译过程中, python使用的是host端的/usr/bin/python,当numpy/numpyconfig.h查找不到时, 下列 的获取include dir无法正确得到目标板子的路径: # Check if numpy is in the include path find_file(_numpy_h numpy/numpyconfig.h PATHS ${PythonExtra_INCLUDE_DIRS} ) if(APPLE OR WIN32 OR NOT _numpy_h) # add include directory for numpy headers set(_python_code "import numpy" "print(numpy.get_include())" )
明确是由PythonExtra_INCLUDE_DIRS定义查找路径后, 在pybind11中查找该参数的定义是来自PYTHON_INCLUDE_DIR,因为我们是交叉编译,可在cross_compile.mimix中预设好该值。该参数已经在编译脚本中指定,可以指定多个目录。
END
全部评论
留言在赶来的路上...
发表评论