【嵌入式】buildroot构建ros2环境

buildroot构建ros2 jazzy系统环境

文章目录

一、操作步骤

总览

其中在sdk的buildroot目录下make menuconfig用来修改buildroot的包,修改后记得save

更改后记得make savedefconfig

然后执行回到sdk根目录,执行./build.sh,大约两小时后生成update.img镜像,这个镜像就是烧写到开发板的镜像,烧写方式用瑞芯微工具即可,详细见文档3-1-Linux系统使用手册.pdf

交叉编译完成ros源码后,直接将编好的包install_jazzy,通过scp放到开发板的/opt/ros/jazzy目录即可(install_jazzy重命名为jazzy)。


0.下载ros2 jazzy源码
bash 复制代码
vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src

1.准备python虚拟环境

创建虚拟环境的目的有两个:

  1. 板子的buildroot host-python版本是3.8,但是target-python版本是3.10.5,为了确保编后由于环境问题引发报错,所以创建python虚拟环境,与target-python版本保持一致。

  2. host中的cmake属于轻量化cmake,不支持ssl,所以导致clone代码的时候不支持https导致失败,所以需要使用python虚拟环境中的cmake即可,注意cmake版本最好是3.22.

    以下是python虚拟环境的相关命令:

bash 复制代码
curl https://pyenv.run | bash
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
source ~/.bashrc

cd ~/ros2_jazzy_ws
pyenv install 3.10.5
pyenv local 3.10.5
python -m venv .venv				#创建虚拟环境的命令
source .venv/bin/activate			#进入虚拟环境的命令
pip install -U pip setuptools wheel
pip install -U vcstool colcon-common-extensions empy lark "numpy<2" "cmake==3.22.6"
deactivate 2>/dev/null || true		#解除虚拟环境的命令

2.构建开始

每次启动终端的步骤:

进入构建目录cd ~/ros2_jazzy_ws

(1)启动python虚拟环境,并设置环境变量,直接搞个脚本,省的一条条执行,source ./set_env.sh

脚本内容:

bash 复制代码
#!/bin/bash

# 设置工具链环境
source "/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/environment-setup"

# 激活虚拟环境
source .venv/bin/activate

# 避免交叉环境把 venv Python 的 sysconfig 搞崩 =====
unset _PYTHON_SYSCONFIGDATA_NAME
unset PYTHONHOME

# 解决环境变量冲突
export PKG_CONFIG_PATH=$STAGING_DIR/usr/lib/pkgconfig:$STAGING_DIR/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=$STAGING_DIR

# 解决PATH冲突
export PATH="$VIRTUAL_ENV/bin:/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/bin:${PATH}"

# 设置ROS 2变量
export BR_TC="/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/share/buildroot/toolchainfile.cmake"

# 设置SYSROOT
export SYSROOT="${SYSROOT:-$STAGING_DIR}"

# 解决console_bridge_vendor找不到的问题
export RPATH_LINK_FLAGS="-Wl,-rpath-link,$SYSROOT/lib -Wl,-rpath-link,$SYSROOT/usr/lib \
-Wl,-rpath-link,$PWD/install_jazzy/lib \
-Wl,-rpath-link,$PWD/install_jazzy/opt/console_bridge_vendor/lib"

echo "环境设置完成"

说明:

为什么要export这么多环境变量,原因在于最开始是解决找不到lttng-ust.

如果我source /home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/environment-setup,此时cmake就是这个/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/bin/cmake,但是很明显我需要python虚拟环境中的cmake,即source .venv/bin/activate,但是如果我source了python虚拟环境,又会找不到sysroot中的lttng-ust,出现以下问题:

bash 复制代码
(.venv) tronlong@tronlong-virtual-machine:~/ros2_jazzy_ws$ source .venv/bin/activate
(.venv) tronlong@tronlong-virtual-machine:~/ros2_jazzy_ws$ pkg-config --modversion lttng-ust Package lttng-ust was not found in the pkg-config search path. Perhaps you should add the directory containing lttng-ust.pc' to the PKG_CONFIG_PATH environment variable No package 'lttng-ust' found

所以只要在source后再单独重新设置被修改的环境变量即可:

执行以下:

bash 复制代码
source /home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/environment-setup
source .venv/bin/activate
export PKG_CONFIG_PATH=$STAGING_DIR/usr/lib/pkgconfig:$STAGING_DIR/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=$STAGING_DIR

另外脚本中的

bash 复制代码
export PATH="$VIRTUAL_ENV/bin:/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/bin:${PATH}"

是解决找不到交叉编译器,和cmake未使用虚拟python环境中的cmake问题。

(2)关于跳过编译的包的说明
  • pyQT相关组件 ,在 Python ≥ 3.10 的环境中,ROS2 Qt GUI 栈(qt_gui_cpp / python_qt_binding)由于依赖 SIP4,而 SIP4 官方已停止支持新 Python 版本,因此不再被视为可交叉编译到嵌入式 target 的受支持组件。
    ROS2、OpenEmbedded、Yocto、Buildroot 的一致工程实践是:GUI 工具运行在 Host(PC),Target 仅运行 ROS2 核心与节点。
  • Gazebo 相关组件,在 RK3562 这类嵌入式板卡上,通常不需要运行 Gazebo 仿真环境。
(3)先单独把 fastrtps 相关包编过并安装到 install_jazzy,原因是编译顺序的问题
bash 复制代码
colcon build \
  --merge-install \
  --install-base install_jazzy \
  --cmake-force-configure \
  --packages-up-to fastrtps \
  --cmake-args \
    -DCMAKE_TOOLCHAIN_FILE=$BR_TC \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_TESTING=OFF \
    -DPYTHON_MODULE_DEBUG_POSTFIX="$TARGET_PY_DEBUG_POSTFIX" \
    -DPYTHON_MODULE_EXTENSION=".so" \
    -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
    -DCMAKE_PREFIX_PATH=$PWD/install_jazzy
(4)全量编译
bash 复制代码
colcon build \
  --merge-install \
  --install-base install_jazzy \
  --cmake-force-configure \
  --cmake-args \
    -DCMAKE_TOOLCHAIN_FILE=$BR_TC \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_TESTING=OFF \
    -DCMAKE_PREFIX_PATH="$PWD/install_jazzy;$PWD/install_jazzy/opt/console_bridge_vendor" \
    -DCMAKE_FIND_ROOT_PATH="$SYSROOT;$PWD/install_jazzy" \
    -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
    -DCMAKE_PREFIX_PATH=$PWD/install_jazzy \
    -DPython3_NumPy_INCLUDE_DIR="/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/python3.10/site-packages/numpy/core/include" \
    -DCMAKE_EXE_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS" \
    -DCMAKE_SHARED_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS"  \
--packages-ignore \
    image_tools \
    intra_process_demo \
    interactive_markers \
    mimick_vendor \
    gz_cmake_vendor \
    gz_math_vendor \
    gz_utils_vendor \
    rviz_default_plugins \
    rviz_visual_testing_framework \
    rviz_assimp_vendor \
    rviz_ogre_vendor \
    rviz_yaml_cpp_vendor \
    rviz_rendering \
    rviz_common \
    rviz2 \
    qt_gui_cpp \
    python_qt_binding \
    rqt_gui \
    rqt_gui_cpp \
    rqt_gui_py

3.打包下载

生成镜像后,将update.img烧写到开发板,然后手动将编译好的ros2 jazzy软件包拷贝到开发板的/opt/ros2/jazzy目录,发现几个问题,记录下解决方法:

(1)找不到python3程序
bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy# source /opt/ros/jazzy/setup.bash
root@RK3562-Tronlong:/opt/ros/jazzy# ros2 run demo_nodes_cpp talker
-bash: /opt/ros/jazzy/bin/ros2: /home/tronlong/ros2_jazzy_ws/.venv/bin/python: bad interpreter: No such file or directory

这是因为在虚拟机编译过程中,colcon 自动将虚拟机里的 Python 路径 写进了 ros2 这个可执行脚本的第一行。现在在板子上运行,板子根本找不到你虚拟机的那个路径。

解决办法:

bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy# cd /opt/ros/jazzy/bin
root@RK3562-Tronlong:/opt/ros/jazzy/bin# which python3
/usr/bin/python3
root@RK3562-Tronlong:/opt/ros/jazzy/bin# sed -i '1s|/home/tronlong/ros2_jazzy_ws/.venv/bin/python|/usr/bin/python3|' *
root@RK3562-Tronlong:/opt/ros/jazzy/bin# head -n 1 /opt/ros/jazzy/bin/ros2
#!/usr/bin/python3
(2)找不到库文件_rclpy_pybind11.cpython-310-aarch64-linux-gnu.so
bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy/bin# find /opt/ros/jazzy -name "_rclpy_pybind11*.so"
/opt/ros/jazzy/lib/python3.10/site-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so

发现交叉编译的产物竟然是-x86_64后缀,由于开发板没有file命令,所以在宿主机中检查这个文件发现:

bash 复制代码
tronlong@tronlong-virtual-machine:~/ros2_jazzy_ws$ file install_jazzy/lib/python3.10/site-packages/rclpy/_rclpy_pybind11*.so
install_jazzy/lib/python3.10/site-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped

虽然文件名是-x86_64但是实际的架构是正确的aarch64,所以我在开发板上手动将这个库名改了:

bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy/lib/python3.10/site-packages/rclpy# mv _rclpy_pybind11.cpython-310-x86_64-linux-gnu.so _rclpy_pybind11.cpython-310-aarch64-linux-gnu.so

那是否其他包也有相似的问题呢?

bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy/lib/python3.10/site-packages/rclpy# find /opt/ros/jazzy -name "*x86_64-linux-gnu.so"
/opt/ros/jazzy/lib/python3.10/site-packages/lttngpy/_lttngpy_pybind11.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/point_cloud_transport_py/_codec.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/point_cloud_transport_py/_point_cloud_transport.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_transport.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_reader.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_info.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_reindexer.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_compression_options.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_writer.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_storage.cpython-310-x86_64-linux-gnu.so
/opt/ros/jazzy/lib/python3.10/site-packages/rosbag2_py/_message_definitions.cpython-310-x86_64-linux-gnu.so

果然,然后我在虚拟机中用file查看实际的库架构发现都是正确的,只不过是名字的问题:

bash 复制代码
tronlong@tronlong-virtual-machine:~/ros2_jazzy_ws$ find install_jazzy/ -name "*x86_64-linux-gnu.so" -exec file {} \;
install_jazzy/lib/python3.10/site-packages/point_cloud_transport_py/_codec.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/point_cloud_transport_py/_point_cloud_transport.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_info.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_transport.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_reindexer.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_reader.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_compression_options.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_writer.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_storage.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rosbag2_py/_message_definitions.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/lttngpy/_lttngpy_pybind11.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
install_jazzy/lib/python3.10/site-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped

发现是个共性问题,但是很难解决,既然架构没有问题,只是名字的问题,改一下就好了:

bash 复制代码
root@RK3562-Tronlong:~# find /opt/ros/jazzy -name "*cpython-310-x86_64-linux-gnu.so" | while read -r file; do
>     new_file="${file//x86_64/aarch64}"
>     mv "$file" "$new_file"
>     echo "已重命名: $(basename "$file") -> $(basename "$new_file")"
> done
(3)找不到包psutillark
bash 复制代码
Failed to load entry point 'doctor': No module named 'psutil'
Failed to load entry point 'wtf': No module named 'psutil'
Failed to load entry point 'test': No module named 'lark'
Failed to load entry point 'launch': No module named 'lark'

这个我在交叉编译的过程中,是用python虚拟环境解决的,因为buildroot的host中没有lark这个包或者是当 时勾上了也没用,没关系直接用pip3安装一下就好了:

bash 复制代码
root@RK3562-Tronlong:/opt/ros/jazzy/lib/python3.10/site-packages/rclpy# pip3 install psutil lark
4.功能检查

首先source,注册ros2环境:

bash 复制代码
root@RK3562-Tronlong:~# source /opt/ros/jazzy/setup.bash
(1)验证ros是否能正常启动
bash 复制代码
root@RK3562-Tronlong:~# ros2 --help
usage: ros2 [-h] [--use-python-default-buffering] Call `ros2 <command> -h` for more detailed usage. ...

ros2 is an extensible command-line tool for ROS 2.

options:
  -h, --help            show this help message and exit
  --use-python-default-buffering
                        Do not force line buffering in stdout and instead use the python default buffering, which might be affected by PYTHONUNBUFFERED/-u and depends on whatever stdout is interactive or
                        not

Commands:
  action     Various action related sub-commands
  bag        Various rosbag related sub-commands
  component  Various component related sub-commands
  daemon     Various daemon related sub-commands
  doctor     Check ROS setup and other potential issues
  interface  Show information about ROS interfaces
  launch     Run a launch file
  lifecycle  Various lifecycle related sub-commands
  multicast  Various multicast related sub-commands
  node       Various node related sub-commands
  param      Various param related sub-commands
  pkg        Various package related sub-commands
  plugin     Various plugin related sub-commands
  run        Run a package specific executable
  security   Various security related sub-commands
  service    Various service related sub-commands
  test       Run a ROS2 launch test
  topic      Various topic related sub-commands
  trace      Trace ROS 2 nodes to get information on their execution. The main 'trace' command requires user interaction; to trace non-interactively, use the 'start'/'stop'/'pause'/'resume' sub-commands
  wtf        Use `wtf` as alias to `doctor`

  Call `ros2 <command> -h` for more detailed usage.
(2)验证 Python 核心库

我们之前手动改名了一些库名,现在测试手动改名的那些 .so 文件是否有效。

bash 复制代码
root@RK3562-Tronlong:~# python3 -c "import rclpy; rclpy.init(); node = rclpy.create_node('test_node'); print('OK: rclpy 正常工作'); node.destroy_node(); rclpy.shutdown()"
OK: rclpy 正常工作

(3)测试通讯机制

(注:一个用 C++,一个用 Python,可以同时验证两种语言的运行环境和 DDS 通讯是否正常。)

启动两个终端,或者在一个终端后台运行:

  • C++发送端 (Talker):

    bash 复制代码
    root@RK3562-Tronlong:~# ros2 run demo_nodes_cpp talker
    [1] 19977
    root@RK3562-Tronlong:~# [INFO] [1766996067.753736823] [talker]: Publishing: 'Hello World: 1'
    [INFO] [1766996068.753749753] [talker]: Publishing: 'Hello World: 2'
    [INFO] [1766996069.753817515] [talker]: Publishing: 'Hello World: 3'
  • python接收端 (Listener):

    新启终端并运行:

    复制代码
    root@RK3562-Tronlong:~# source /opt/ros/jazzy/setup.bash
    root@RK3562-Tronlong:~# ros2 run demo_nodes_py listener
    Traceback (most recent call last):
      File "/opt/ros/jazzy/bin/ros2", line 33, in <module>
        sys.exit(load_entry_point('ros2cli==0.32.6', 'console_scripts', 'ros2')())
      File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2cli/cli.py", line 91, in main
        rc = extension.main(parser=parser, args=args)
      File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2run/command/run.py", line 70, in main
        return run_executable(path=path, argv=args.argv, prefix=prefix)
      File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2run/api/__init__.py", line 64, in run_executable
        process = subprocess.Popen(cmd)
      File "/usr/lib/python3.10/subprocess.py", line 969, in __init__
      File "/usr/lib/python3.10/subprocess.py", line 1845, in _execute_child
    FileNotFoundError: [Errno 2] No such file or directory: '/opt/ros/jazzy/lib/demo_nodes_py/listener'

    尝试使用以下发现正常:

    复制代码
    root@RK3562-Tronlong:~# python3 -m demo_nodes_py.topics.listener
    [INFO] [1766996217.931616699] [listener]: I heard: [Hello World: 151]
    [INFO] [1766996218.758584153] [listener]: I heard: [Hello World: 152]

    那么就是第一行解释器路径错误,这个问题与找不到python3程序是共性问题,都是交叉编译常见的**"Shebang" (第一行解释器路径) 错误**(具体解释见找不到python3程序)

    即:

    bash 复制代码
    root@RK3562-Tronlong:~# head -n 1 /opt/ros/jazzy/lib/demo_nodes_py/listener
    #!/home/tronlong/ros2_jazzy_ws/.venv/bin/python

    应该修改为#!/usr/bin/python3

    为了防止其他也有类似问题,直接批量修改

    bash 复制代码
    root@RK3562-Tronlong:~# head -n 1 /opt/ros/jazzy/lib/demo_nodes_py/listener
    #!/home/tronlong/ros2_jazzy_ws/.venv/bin/python
    root@RK3562-Tronlong:~# cd /opt/ros/jazzy
    root@RK3562-Tronlong:/opt/ros/jazzy# find bin lib -type f -exec sed -i '1s|^#!.*python.*|#!/usr/bin/python3|' {} +
    root@RK3562-Tronlong:/opt/ros/jazzy# head -n 1 /opt/ros/jazzy/lib/demo_nodes_py/listener
    #!/usr/bin/python3

    解决:

    bash 复制代码
    root@RK3562-Tronlong:/opt/ros/jazzy# ros2 run demo_nodes_py listener
    [INFO] [1766997330.941947636] [listener]: I heard: [Hello World: 1264]
    [INFO] [1766997331.758533065] [listener]: I heard: [Hello World: 1265]

(4)其他问题

原则上开发板上存在运行环境即可,不要求开发环境,所以这个部分的内容可以忽略,如果你要在板子中编译开发项目的话才需要,但不建议,因为会占用板子空间、并且板子编译性能低,最好是采用交叉编译的方式。

bash 复制代码
[11:27:03] root@RK3562-Tronlong:~/workplace# ros2 pkg create example_ros2_interfaces --build-type ament_cmake --dependencies rosidl_default_generators geometry_msgs
Failed to load entry point 'create': No module named 'em'
Traceback (most recent call last):
  File "/opt/ros/jazzy/bin/ros2", line 33, in <module>
    sys.exit(load_entry_point('ros2cli==0.32.6', 'console_scripts', 'ros2')())
  File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2cli/cli.py", line 52, in main
    add_subparsers_on_demand(
  File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2cli/command/__init__.py", line 250, in add_subparsers_on_demand
    extension.add_arguments(
  File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2pkg/command/pkg.py", line 25, in add_arguments
    add_subparsers_on_demand(
  File "/opt/ros/jazzy/lib/python3.10/site-packages/ros2cli/command/__init__.py", line 237, in add_subparsers_on_demand
    extension = command_extensions[name]
KeyError: 'create'

使用pip3安装即可:

bash 复制代码
pip3 install empy==3.3.4

复制代码
[11:34:11] root@RK3562-Tronlong:~/workplace/example_ros2_interfaces# colcon build --packages-select example_ros2_interfaces
-bash: colcon: command not found

使用pip3安装即可:

bash 复制代码
pip3 install colcon-common-extensions colcon-ros
(5)检查系统状态

使用 ROS 2 自带的诊断工具:

bash 复制代码
root@RK3562-Tronlong:~# ros2 doctor
/opt/ros/jazzy/lib/python3.10/site-packages/ros2doctor/api/__init__.py: 107: UserWarning: Check entry point PackageCheck fails to load: No module named 'catkin_pkg'
/opt/ros/jazzy/lib/python3.10/site-packages/ros2doctor/api/__init__.py: 107: UserWarning: Check entry point PlatformCheck fails to load: No module named 'rosdistro'
/opt/ros/jazzy/lib/python3.10/site-packages/ros2doctor/api/topic.py: 42: UserWarning: Publisher without subscriber detected on /chatter.

All 3 checks passed

解决:

bash 复制代码
root@RK3562-Tronlong:~# pip3 install catkin_pkg rosdistro
复制代码
root@RK3562-Tronlong:~# ros2 doctor --report

   NETWORK CONFIGURATION
inet         : 127.0.0.1
inet4        : ['127.0.0.1']
inet6        : ['::1']
netmask      : 255.0.0.0
device       : lo
flags        : 73<LOOPBACK,UP,RUNNING>
mtu          : 65536
inet         : 192.168.2.93
inet4        : ['192.168.2.93']
ether        : 5e:33:c1:57:a7:13
inet6        : ['fe80::8dba:39ad:13da:e805%eth0']
netmask      : 255.255.255.0
device       : eth0
flags        : 4163<MULTICAST,UP,BROADCAST,RUNNING>
mtu          : 1500
broadcast    : 192.168.2.255
inet         : 172.17.0.1
inet4        : ['172.17.0.1']
ether        : 02:42:ea:80:97:aa
netmask      : 255.255.0.0
device       : docker0
flags        : 4099<UP,BROADCAST,MULTICAST>
mtu          : 1500
broadcast    : 172.17.255.255
ether        : 62:33:c1:57:a7:13
device       : eth1
flags        : 4099<UP,BROADCAST,MULTICAST>
mtu          : 1500

   PACKAGE VERSIONS
osrf_pycommon                             : latest=2.1.7, local=2.1.7
examples_rclcpp_minimal_publisher         : latest=0.19.7, local=0.19.7
qt_gui_core                               : latest=2.7.5, local=2.7.5
ament_cmake_export_dependencies           : latest=2.5.4, local=2.5.4
rosidl_typesupport_fastrtps_cpp           : latest=3.6.3, local=3.6.3
test_cli_remapping                        : latest=N/A, local=0.20.3
rosidl_generator_tests                    : latest=N/A, local=4.6.7
examples_rclpy_pointcloud_publisher       : latest=0.19.7, local=0.19.7
test_tf2                                  : latest=N/A, local=0.36.18
ament_cmake_include_directories           : latest=2.5.4, local=2.5.4
ament_cmake_cppcheck                      : latest=0.17.3, local=0.17.3
ament_lint_common                         : latest=0.17.3, local=0.17.3
examples_rclpy_minimal_service            : latest=0.19.7, local=0.19.7
qt_gui                                    : latest=2.7.5, local=2.7.5
fastrtps_cmake_module                     : latest=3.6.3, local=3.6.3
statistics_msgs                           : latest=2.0.3, local=2.0.3
ament_clang_tidy                          : latest=0.17.3, local=0.17.3
urdf                                      : latest=2.10.0, local=2.10.0
rosbag2_compression                       : latest=0.26.9, local=0.26.9
tracetools_test                           : latest=8.2.4, local=8.2.4
ament_cmake_gen_version_h                 : latest=2.5.4, local=2.5.4
action_tutorials_interfaces               : latest=0.33.8, local=0.33.8
rosidl_typesupport_introspection_c        : latest=4.6.7, local=4.6.7
action_tutorials_py                       : latest=0.33.8, local=0.33.8
rosidl_typesupport_cpp                    : latest=3.2.2, local=3.2.2
rqt_publisher                             : latest=1.7.2, local=1.7.2
launch_xml                                : latest=3.4.9, local=3.4.9
rosidl_runtime_py                         : latest=0.13.1, local=0.13.1
ament_cmake_pycodestyle                   : latest=0.17.3, local=0.17.3
rosbag2_tests                             : latest=0.26.9, local=0.26.9
ros2topic                                 : latest=0.32.6, local=0.32.6
ros2cli_test_interfaces                   : latest=0.32.6, local=0.32.6
action_msgs                               : latest=2.0.3, local=2.0.3
rosbag2_compression_zstd                  : latest=0.26.9, local=0.26.9
ament_cmake_export_targets                : latest=2.5.4, local=2.5.4
rcpputils                                 : latest=2.11.2, local=2.11.3
libyaml_vendor                            : latest=1.6.3, local=1.6.3
rmw_cyclonedds_cpp                        : latest=2.2.3, local=2.2.3
rosidl_generator_cpp                      : latest=4.6.7, local=4.6.7
ament_pycodestyle                         : latest=0.17.3, local=0.17.3
demo_nodes_py                             : latest=0.33.8, local=0.33.8
rqt_topic                                 : latest=1.7.4, local=1.7.4
ros2interface                             : latest=0.32.6, local=0.32.6
test_ros2trace                            : latest=N/A, local=8.2.4
rcl                                       : latest=9.2.8, local=9.2.8
ament_cmake_export_interfaces             : latest=2.5.4, local=2.5.4
rmw_fastrtps_shared_cpp                   : latest=8.4.3, local=8.4.3
examples_rclcpp_minimal_service           : latest=0.19.7, local=0.19.7
rosidl_default_generators                 : latest=1.6.0, local=1.6.0
ros_testing                               : latest=0.6.0, local=0.6.0
ament_pyflakes                            : latest=0.17.3, local=0.17.3
examples_rclpy_minimal_action_server      : latest=0.19.7, local=0.19.7
examples_rclcpp_wait_set                  : latest=0.19.7, local=0.19.7
rosidl_generator_py                       : latest=0.22.2, local=0.22.2
geometry2                                 : latest=0.36.17, local=0.36.18
message_filters                           : latest=4.11.9, local=4.11.9
launch                                    : latest=3.4.9, local=3.4.9
ament_cmake_cpplint                       : latest=0.17.3, local=0.17.3
camera_info_manager_py                    : latest=5.1.7, local=5.1.7
ros2service                               : latest=0.32.6, local=0.32.6
rclcpp_components                         : latest=28.1.15, local=28.1.15
ament_uncrustify                          : latest=0.17.3, local=0.17.3
examples_rclcpp_multithreaded_executor    : latest=0.19.7, local=0.19.7
rosidl_dynamic_typesupport                : latest=0.1.2, local=0.1.2
qt_gui_py_common                          : latest=2.7.5, local=2.7.5
ros2component                             : latest=0.32.6, local=0.32.6
dummy_map_server                          : latest=0.33.8, local=0.33.8
qt_gui_app                                : latest=2.7.5, local=2.7.5
ament_lint_auto                           : latest=0.17.3, local=0.17.3
rosbag2_storage_mcap                      : latest=0.26.9, local=0.26.9
ros2run                                   : latest=0.32.6, local=0.32.6
rqt_py_console                            : latest=1.2.3, local=1.2.3
trajectory_msgs                           : latest=5.3.6, local=5.3.6
lttngpy                                   : latest=8.2.4, local=8.2.4
test_rmw_implementation                   : latest=N/A, local=2.15.6
topic_monitor                             : latest=0.33.8, local=0.33.8
rosidl_runtime_cpp                        : latest=4.6.7, local=4.6.7
rosgraph_msgs                             : latest=2.0.3, local=2.0.3
lifecycle_py                              : latest=0.33.8, local=0.33.8
dummy_sensors                             : latest=0.33.8, local=0.33.8
ros2plugin                                : latest=5.4.4, local=5.4.4
tracetools                                : latest=8.2.4, local=8.2.4
keyboard_handler                          : latest=0.3.1, local=0.3.1
ament_cmake_xmllint                       : latest=0.17.3, local=0.17.3
rosidl_generator_type_description         : latest=4.6.7, local=4.6.7
ros_environment                           : latest=4.2.1, local=4.2.1
tracetools_read                           : latest=8.2.4, local=8.2.4
rcl_interfaces                            : latest=2.0.3, local=2.0.3
point_cloud_transport_py                  : latest=4.0.6, local=4.0.6
tracetools_trace                          : latest=8.2.4, local=8.2.4
tlsf_cpp                                  : latest=0.17.1, local=0.17.1
stereo_msgs                               : latest=5.3.6, local=5.3.6
rosidl_generator_c                        : latest=4.6.7, local=4.6.7
rqt                                       : latest=1.6.2, local=1.6.2
ros2doctor                                : latest=0.32.6, local=0.32.6
examples_rclcpp_minimal_subscriber        : latest=0.19.7, local=0.19.7
rosbag2_examples_cpp                      : latest=0.26.9, local=0.26.9
console_bridge_vendor                     : latest=1.7.1, local=1.7.1
rosidl_dynamic_typesupport_fastrtps       : latest=0.1.0, local=0.1.0
ament_cmake_pytest                        : latest=2.5.4, local=2.5.4
ament_cmake_ros                           : latest=0.12.0, local=0.12.0
rosbag2                                   : latest=0.26.9, local=0.26.9
rosidl_typesupport_c                      : latest=3.2.2, local=3.2.2
image_common                              : latest=5.1.7, local=5.1.7
examples_rclcpp_minimal_client            : latest=0.19.7, local=0.19.7
rqt_plot                                  : latest=1.4.4, local=1.4.4
ros2lifecycle_test_fixtures               : latest=0.32.6, local=0.32.6
rmw_dds_common                            : latest=3.1.0, local=3.1.0
launch_pytest                             : latest=3.4.9, local=3.4.9
demo_nodes_cpp_native                     : latest=0.33.8, local=0.33.8
ament_cmake_export_link_flags             : latest=2.5.4, local=2.5.4
image_transport                           : latest=5.1.7, local=5.1.7
ros2launch                                : latest=0.26.10, local=0.26.10
quality_of_service_demo_cpp               : latest=0.33.8, local=0.33.8
ament_cmake_gtest                         : latest=2.5.4, local=2.5.4
kdl_parser                                : latest=2.11.0, local=2.11.0
ros2lifecycle                             : latest=0.32.6, local=0.32.6
examples_rclcpp_async_client              : latest=0.19.7, local=0.19.7
logging_demo                              : latest=0.33.8, local=0.33.8
rmw_connextddsmicro                       : latest=N/A, local=0.22.2
rosbag2_py                                : latest=0.26.9, local=0.26.9
rclcpp_action                             : latest=28.1.15, local=28.1.15
rosbag2_interfaces                        : latest=0.26.9, local=0.26.9
uncrustify_vendor                         : latest=3.0.1, local=3.0.1
orocos_kdl_vendor                         : latest=0.5.1, local=0.5.1
rcl_logging_noop                          : latest=3.1.1, local=3.1.1
ros2param                                 : latest=0.32.6, local=0.32.6
ament_index_python                        : latest=1.8.1, local=1.8.1
sqlite3_vendor                            : latest=0.26.9, local=0.26.9
camera_info_manager                       : latest=5.1.7, local=5.1.7
examples_tf2_py                           : latest=0.36.17, local=0.36.18
launch_testing                            : latest=3.4.9, local=3.4.9
ament_cmake_test                          : latest=2.5.4, local=2.5.4
ament_cmake_copyright                     : latest=0.17.3, local=0.17.3
composition                               : latest=0.33.8, local=0.33.8
ament_cmake_core                          : latest=2.5.4, local=2.5.4
rosbag2_test_msgdefs                      : latest=0.26.9, local=0.26.9
rqt_shell                                 : latest=1.2.2, local=1.2.2
libstatistics_collector                   : latest=1.7.4, local=1.7.4
pendulum_control                          : latest=0.33.8, local=0.33.8
rosidl_pycommon                           : latest=4.6.7, local=4.6.7
test_msgs                                 : latest=2.0.3, local=2.0.3
tf2_eigen_kdl                             : latest=0.36.17, local=0.36.18
sensor_msgs                               : latest=5.3.6, local=5.3.6
test_interface_files                      : latest=0.11.0, local=0.11.0
rcl_lifecycle                             : latest=9.2.8, local=9.2.8
rosidl_generator_dds_idl                  : latest=0.11.1, local=0.11.1
examples_rclcpp_minimal_action_client     : latest=0.19.7, local=0.19.7
examples_rclpy_guard_conditions           : latest=0.19.7, local=0.19.7
launch_yaml                               : latest=3.4.9, local=3.4.9
rcl_action                                : latest=9.2.8, local=9.2.8
builtin_interfaces                        : latest=2.0.3, local=2.0.3
rosbag2_transport                         : latest=0.26.9, local=0.26.9
rmw_fastrtps_dynamic_cpp                  : latest=8.4.3, local=8.4.3
rosidl_core_runtime                       : latest=0.2.0, local=0.2.0
rviz_rendering_tests                      : latest=14.1.19, local=14.1.19
pybind11_vendor                           : latest=3.1.3, local=3.1.3
rcl_logging_interface                     : latest=3.1.1, local=3.1.1
ament_cmake_vendor_package                : latest=2.5.4, local=2.5.4
ament_cmake_auto                          : latest=2.5.4, local=2.5.4
launch_ros                                : latest=0.26.10, local=0.26.10
examples_rclpy_minimal_publisher          : latest=0.19.7, local=0.19.7
rosbag2_storage_default_plugins           : latest=0.26.9, local=0.26.9
libcurl_vendor                            : latest=3.4.4, local=3.4.4
tango_icons_vendor                        : latest=0.3.0, local=0.3.0
rclpy                                     : latest=7.1.7, local=7.1.7
rosidl_core_generators                    : latest=0.2.0, local=0.2.0
rosidl_typesupport_fastrtps_c             : latest=3.6.3, local=3.6.3
ament_package                             : latest=0.16.4, local=0.16.4
pluginlib                                 : latest=5.4.4, local=5.4.4
launch_testing_ament_cmake                : latest=3.4.9, local=3.4.9
ros2cli                                   : latest=0.32.6, local=0.32.6
rmw_implementation                        : latest=2.15.6, local=2.15.6
diagnostic_msgs                           : latest=5.3.6, local=5.3.6
actionlib_msgs                            : latest=5.3.6, local=5.3.6
ament_cmake_google_benchmark              : latest=2.5.4, local=2.5.4
ament_xmllint                             : latest=0.17.3, local=0.17.3
rosidl_typesupport_introspection_tests    : latest=N/A, local=4.6.7
test_tracetools_launch                    : latest=N/A, local=8.2.4
ament_cmake_pep257                        : latest=0.17.3, local=0.17.3
ament_cmake_pclint                        : latest=0.17.3, local=0.17.3
ros2test                                  : latest=0.6.0, local=0.6.0
ament_index_cpp                           : latest=1.8.1, local=1.8.1
rosidl_default_runtime                    : latest=1.6.0, local=1.6.0
rclcpp_lifecycle                          : latest=28.1.15, local=28.1.15
rosidl_typesupport_interface              : latest=4.6.7, local=4.6.7
example_interfaces                        : latest=0.12.0, local=0.12.0
tf2_bullet                                : latest=0.36.17, local=0.36.18
common_interfaces                         : latest=5.3.6, local=5.3.6
rqt_reconfigure                           : latest=1.6.2, local=1.6.2
tf2                                       : latest=0.36.17, local=0.36.18
rosidl_parser                             : latest=4.6.7, local=4.6.7
resource_retriever                        : latest=3.4.4, local=3.4.4
tracetools_launch                         : latest=8.2.4, local=8.2.4
tf2_kdl                                   : latest=0.36.17, local=0.36.18
service_msgs                              : latest=2.0.3, local=2.0.3
std_msgs                                  : latest=5.3.6, local=5.3.6
ament_cmake_version                       : latest=2.5.4, local=2.5.4
rqt_bag                                   : latest=1.5.5, local=1.5.5
eigen3_cmake_module                       : latest=0.3.0, local=0.3.0
ros2bag                                   : latest=0.26.9, local=0.26.9
ament_cmake_export_definitions            : latest=2.5.4, local=2.5.4
rosidl_runtime_c                          : latest=4.6.7, local=4.6.7
qt_dotgraph                               : latest=2.7.5, local=2.7.5
rqt_console                               : latest=2.2.2, local=2.2.2
test_communication                        : latest=N/A, local=0.20.3
mcap_vendor                               : latest=0.26.9, local=0.26.9
quality_of_service_demo_py                : latest=0.33.8, local=0.33.8
ament_cmake_clang_format                  : latest=0.17.3, local=0.17.3
ament_lint                                : latest=0.17.3, local=0.17.3
point_cloud_transport                     : latest=4.0.6, local=4.0.6
ament_cmake_target_dependencies           : latest=2.5.4, local=2.5.4
tf2_ros_py                                : latest=0.36.17, local=0.36.18
std_srvs                                  : latest=5.3.6, local=5.3.6
rmw_fastrtps_cpp                          : latest=8.4.3, local=8.4.3
rcl_logging_spdlog                        : latest=3.1.1, local=3.1.1
sros2_cmake                               : latest=0.13.4, local=0.13.4
laser_geometry                            : latest=2.7.2, local=2.7.2
rqt_graph                                 : latest=1.5.5, local=1.5.5
ament_lint_cmake                          : latest=0.17.3, local=0.17.3
urdf_parser_plugin                        : latest=2.10.0, local=2.10.0
ros2cli_common_extensions                 : latest=0.3.1, local=0.3.1
class_loader                              : latest=2.7.0, local=2.7.0
rqt_service_caller                        : latest=1.2.1, local=1.2.1
rosbag2_performance_benchmarking_msgs     : latest=0.26.9, local=0.26.9
rosidl_cmake                              : latest=4.6.7, local=4.6.7
python_orocos_kdl_vendor                  : latest=0.5.1, local=0.5.1
ament_cmake_flake8                        : latest=0.17.3, local=0.17.3
examples_rclpy_executors                  : latest=0.19.7, local=0.19.7
type_description_interfaces               : latest=2.0.3, local=2.0.3
examples_rclpy_minimal_subscriber         : latest=0.19.7, local=0.19.7
topic_statistics_demo                     : latest=0.33.8, local=0.33.8
examples_rclpy_minimal_action_client      : latest=0.19.7, local=0.19.7
dummy_robot_bringup                       : latest=0.33.8, local=0.33.8
rosidl_typesupport_tests                  : latest=N/A, local=3.2.2
rosidl_typesupport_introspection_cpp      : latest=4.6.7, local=4.6.7
map_msgs                                  : latest=2.4.1, local=2.4.1
tf2_ros                                   : latest=0.36.17, local=0.36.18
geometry_msgs                             : latest=5.3.6, local=5.3.6
shared_queues_vendor                      : latest=0.26.9, local=0.26.9
examples_rclcpp_minimal_composition       : latest=0.19.7, local=0.19.7
examples_rclcpp_minimal_timer             : latest=0.19.7, local=0.19.7
camera_calibration_parsers                : latest=5.1.7, local=5.1.7
rosbag2_examples_py                       : latest=0.26.9, local=0.26.9
ament_copyright                           : latest=0.17.3, local=0.17.3
rcutils                                   : latest=6.7.5, local=6.7.5
rmw                                       : latest=7.3.2, local=7.3.2
tinyxml2_vendor                           : latest=0.9.2, local=0.9.2
domain_coordinator                        : latest=0.12.0, local=0.12.0
ros2node                                  : latest=0.32.6, local=0.32.6
test_security                             : latest=N/A, local=0.20.3
ros2multicast                             : latest=0.32.6, local=0.32.6
rosbag2_cpp                               : latest=0.26.9, local=0.26.9
examples_rclcpp_minimal_action_server     : latest=0.19.7, local=0.19.7
ament_cmake_clang_tidy                    : latest=0.17.3, local=0.17.3
ament_cmake_uncrustify                    : latest=0.17.3, local=0.17.3
ament_flake8                              : latest=0.17.3, local=0.17.3
sros2                                     : latest=0.13.4, local=0.13.4
rqt_bag_plugins                           : latest=1.5.5, local=1.5.5
tf2_geometry_msgs                         : latest=0.36.17, local=0.36.18
rclcpp                                    : latest=28.1.15, local=28.1.15
yaml_cpp_vendor                           : latest=9.0.1, local=9.0.1
shape_msgs                                : latest=5.3.6, local=5.3.6
rosidl_adapter                            : latest=4.6.7, local=4.6.7
test_cli                                  : latest=N/A, local=0.20.3
unique_identifier_msgs                    : latest=2.5.0, local=2.5.0
ament_cmake_mypy                          : latest=0.17.3, local=0.17.3
tf2_eigen                                 : latest=0.36.17, local=0.36.18
rqt_action                                : latest=2.2.0, local=2.2.0
ament_cmake_pyflakes                      : latest=0.17.3, local=0.17.3
pendulum_msgs                             : latest=0.33.8, local=0.33.8
rmw_implementation_cmake                  : latest=7.3.2, local=7.3.2
ament_cmake_gmock                         : latest=2.5.4, local=2.5.4
examples_rclcpp_cbg_executor              : latest=0.19.7, local=0.19.7
zstd_vendor                               : latest=0.26.9, local=0.26.9
lifecycle_msgs                            : latest=2.0.3, local=2.0.3
tf2_py                                    : latest=0.36.17, local=0.36.18
launch_testing_ros                        : latest=0.26.10, local=0.26.10
liblz4_vendor                             : latest=0.26.9, local=0.26.9
ros2trace                                 : latest=8.2.4, local=8.2.4
rttest                                    : latest=0.17.1, local=0.17.1
ament_cppcheck                            : latest=0.17.3, local=0.17.3
test_quality_of_service                   : latest=N/A, local=0.20.3
turtlesim                                 : latest=1.8.3, local=1.8.3
ament_cmake_export_libraries              : latest=2.5.4, local=2.5.4
rqt_msg                                   : latest=1.5.1, local=1.5.1
rpyutils                                  : latest=0.4.2, local=0.4.2
ament_clang_format                        : latest=0.17.3, local=0.17.3
test_launch_testing                       : latest=N/A, local=3.4.9
ament_pclint                              : latest=0.17.3, local=0.17.3
ament_mypy                                : latest=0.17.3, local=0.17.3
visualization_msgs                        : latest=5.3.6, local=5.3.6
ament_cmake_lint_cmake                    : latest=0.17.3, local=0.17.3
python_cmake_module                       : latest=0.11.1, local=0.11.1
test_rclcpp                               : latest=N/A, local=0.20.3
rti_connext_dds_cmake_module              : latest=0.22.2, local=0.22.2
ament_cpplint                             : latest=0.17.3, local=0.17.3
test_tracetools                           : latest=N/A, local=8.2.4
performance_test_fixture                  : latest=0.2.1, local=0.2.1
tf2_sensor_msgs                           : latest=0.36.17, local=0.36.18
rmw_connextdds                            : latest=0.22.2, local=0.22.2
ament_cmake                               : latest=2.5.4, local=2.5.4
rosbag2_test_common                       : latest=0.26.9, local=0.26.9
demo_nodes_cpp                            : latest=0.33.8, local=0.33.8
rqt_srv                                   : latest=1.2.2, local=1.2.2
ament_pep257                              : latest=0.17.3, local=0.17.3
rosbag2_storage                           : latest=0.26.9, local=0.26.9
rcl_yaml_param_parser                     : latest=9.2.8, local=9.2.8
ament_cmake_python                        : latest=2.5.4, local=2.5.4
tf2_tools                                 : latest=0.36.17, local=0.36.18
tf2_msgs                                  : latest=0.36.17, local=0.36.18
rosbag2_storage_sqlite3                   : latest=0.26.9, local=0.26.9
ros2pkg                                   : latest=0.32.6, local=0.32.6
launch_testing_examples                   : latest=0.19.7, local=0.19.7
action_tutorials_cpp                      : latest=0.33.8, local=0.33.8
sensor_msgs_py                            : latest=5.3.6, local=5.3.6
tlsf                                      : latest=0.9.0, local=0.9.0
robot_state_publisher                     : latest=3.3.3, local=3.3.3
lifecycle                                 : latest=0.33.8, local=0.33.8
ros2action                                : latest=0.32.6, local=0.32.6
rosbag2_performance_benchmarking          : latest=0.26.9, local=0.26.9
nav_msgs                                  : latest=5.3.6, local=5.3.6
test_launch_ros                           : latest=N/A, local=0.26.10
spdlog_vendor                             : latest=1.6.1, local=1.6.1
rosidl_cli                                : latest=4.6.7, local=4.6.7
composition_interfaces                    : latest=2.0.3, local=2.0.3
ament_cmake_export_include_directories    : latest=2.5.4, local=2.5.4
rmw_connextdds_common                     : latest=0.22.2, local=0.22.2
ament_cmake_libraries                     : latest=2.5.4, local=2.5.4
rqt_py_common                             : latest=1.6.2, local=1.6.2
examples_rclpy_minimal_client             : latest=0.19.7, local=0.19.7

   PLATFORM INFORMATION
system           : Linux
platform info    : Linux-5.10.209-rt89-aarch64-with-glibc2.38
release          : 5.10.209-rt89
processor        :

   QOS COMPATIBILITY LIST
compatibility status    : No publisher/subscriber pairs found

   RMW MIDDLEWARE
middleware name    : rmw_fastrtps_cpp

   ROS 2 INFORMATION
distribution name      : jazzy
distribution type      : ros2
distribution status    : active
release platforms      : {'debian': ['bookworm'], 'rhel': ['9'], 'ubuntu': ['noble']}

   TOPIC LIST
topic               : none
publisher count     : 0
subscriber count    : 0

其中确定ros版本为:distribution name : jazzy

5.终端优化

默认bash没有颜色,并且ros命令也不支持补全,所以在~/.bashrc中加入一些内容,让bash使用更方便:

bash 复制代码
# --- 基础设置 ---
export TERM=xterm-256color
export PS1='\[\033[01;31m\][\t] \u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# '
export TZ='CST-8'
alias ll='ls -alF --color=auto'
alias sb='source ~/.bashrc'

# --- 自动补全路径修正 ---
# 将 pip3 安装的可执行文件目录加入 PATH
export PATH=$PATH:/usr/local/bin:$HOME/.local/bin

# --- ROS 2 Jazzy 配置 ---
if [ -f "/opt/ros/jazzy/setup.bash" ]; then
    source "/opt/ros/jazzy/setup.bash"

    # 尝试加载 ROS 2 补全
    if command -v register-python-argcomplete > /dev/null; then
        eval "$(register-python-argcomplete --shell bash ros2)"
    fi
fi

其中可能出现register-python-argcomplete: command not found,利用pip3安装一下:pip3 install argcomplete即可。

二、问题记录

以下为已记录的编译过程中遇到的错误,可能不全,因为可能是buildroot勾选上就好了,或者前期没有开始记录,这是后面补充的文档,只要按照步骤,缺失包就make menuconfig找勾上即可,比较难解决的应该在文档中都能找到对应办法。

  1. aarch64-buildroot-linux-gnu-g++.br_real: fatal error: Killed signal terminated program cc1plus内存溢出,调大内存到4G->8G->12G.

  2. 缺失库,buildroot勾选即可:acl、zstd、tinyxml2、zstd、lz4、libasio、lttng(另需要解决环境变量污染问题,set_env.sh脚本已解决)、numpy(另需要指定参数-DPython3_NumPy_INCLUDE_DIR="/home/tronlong/RK3562/rk3562_linux_sdk_release/buildroot/output/rockchip_rk3562/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/python3.10/site-packages/numpy/core/include")、eigen、bullet

  3. 通过虚拟环境解决:lark(buildroot不自带host lark)、cmake(buildroot提供的cmake是轻量级cmake,不支持ssl,所以在通过https拉取代码时报错,所以需要虚拟环境中的cmake,只需要版本保证一致即可3.22)

  4. 解决不了,但是可以跳过的包:mimick_vendor(主要是用于 ROS 2 的单元测试和 Mock 测试)、gz-cmake3(仿真)、PyQt5(GUI)intra_process_demo(opencv演示demo,使用了opencv中的highgui模块,因为pyqt被忽略了,没有启用 GUI 支持)、image_tools(ROS 2 的一个示例包(用于演示如何发布和订阅图像流)同上使用了opencv中的highgui模块)。

    具体列表:

    bash 复制代码
    image_tools \
    intra_process_demo \
    interactive_markers \
    mimick_vendor \
    gz_cmake_vendor \
    gz_math_vendor \
    gz_utils_vendor \
    rviz_default_plugins \
    rviz_visual_testing_framework \
    rviz_assimp_vendor \
    rviz_ogre_vendor \
    rviz_yaml_cpp_vendor \
    rviz_rendering \
    rviz_common \
    rviz2 \
    qt_gui_cpp \
    python_qt_binding \
    rqt_gui \
    rqt_gui_cpp \
    rqt_gui_py
  5. 通过环境变量与指定参数解决:

    libconsole_bridge.so.1.0:通过

    bash 复制代码
    export RPATH_LINK_FLAGS="-Wl,-rpath-link,$SYSROOT/lib -Wl,-rpath-link,$SYSROOT/usr/lib \
    -Wl,-rpath-link,$PWD/install_jazzy/lib \
    -Wl,-rpath-link,$PWD/install_jazzy/opt/console_bridge_vendor/lib"

    和colcon参数:

    bash 复制代码
    -DCMAKE_EXE_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS" \
    -DCMAKE_SHARED_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS"  \

    解决。

    bash 复制代码
    image_tools \
    intra_process_demo \
    interactive_markers \
    mimick_vendor \
    gz_cmake_vendor \
    gz_math_vendor \
    gz_utils_vendor \
    rviz_default_plugins \
    rviz_visual_testing_framework \
    rviz_assimp_vendor \
    rviz_ogre_vendor \
    rviz_yaml_cpp_vendor \
    rviz_rendering \
    rviz_common \
    rviz2 \
    qt_gui_cpp \
    python_qt_binding \
    rqt_gui \
    rqt_gui_cpp \
    rqt_gui_py
  6. 通过环境变量与指定参数解决:

    libconsole_bridge.so.1.0:通过

    bash 复制代码
    export RPATH_LINK_FLAGS="-Wl,-rpath-link,$SYSROOT/lib -Wl,-rpath-link,$SYSROOT/usr/lib \
    -Wl,-rpath-link,$PWD/install_jazzy/lib \
    -Wl,-rpath-link,$PWD/install_jazzy/opt/console_bridge_vendor/lib"

    和colcon参数:

    bash 复制代码
    -DCMAKE_EXE_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS" \
    -DCMAKE_SHARED_LINKER_FLAGS="--sysroot=$SYSROOT $RPATH_LINK_FLAGS"  \

    解决。

  7. 移植后的运行问题(见3.打包下载)

相关推荐
爱编码的傅同学2 小时前
【程序地址空间】页表的映射方式
c语言·数据结构·c++·算法
序属秋秋秋2 小时前
《Linux系统编程之进程控制》【进程替换】
linux·c语言·c++·操作系统·进程·系统编程·进程替换
hslinux2 小时前
NDK 通过configure 编译C++源码通用脚本
android·c++·ndk·configure
盖世灬英雄z2 小时前
数据结构与算法学习(二)
c++·学习
qq_310658512 小时前
webrtc源码走读(三)核心引擎层——音频引擎
服务器·c++·音视频·webrtc
嵌入式@秋刀鱼2 小时前
ROS开发学习记录【一】
linux·c++·笔记·学习
冻伤小鱼干2 小时前
《自动驾驶与机器人中的slam技术:从理论到实践》笔记——ch7(3)
笔记·机器人·自动驾驶
藦卡机器人2 小时前
安徽装配机器人生产企业有哪些?
机器人
RockHopper20253 小时前
从人类智能的“多世界x多层次”世界模型到下一代机器人的认知门槛
机器人·具身智能·认知机器人·具身认知·下一代机器人