buildroot构建ros2 jazzy系统环境
文章目录
-
-
- 一、操作步骤
-
- [0.下载ros2 jazzy源码](#0.下载ros2 jazzy源码)
- 1.准备python虚拟环境
- 2.构建开始
-
- [(1)启动python虚拟环境,并设置环境变量,直接搞个脚本,省的一条条执行,`source ./set_env.sh`](#(1)启动python虚拟环境,并设置环境变量,直接搞个脚本,省的一条条执行,
source ./set_env.sh) - (2)关于跳过编译的包的说明
- [(3)先单独把 fastrtps 相关包编过并安装到 install_jazzy,原因是编译顺序的问题](#(3)先单独把 fastrtps 相关包编过并安装到 install_jazzy,原因是编译顺序的问题)
- (4)全量编译
- [(1)启动python虚拟环境,并设置环境变量,直接搞个脚本,省的一条条执行,`source ./set_env.sh`](#(1)启动python虚拟环境,并设置环境变量,直接搞个脚本,省的一条条执行,
- 3.打包下载
- 4.功能检查
-
- (1)验证ros是否能正常启动
- [(2)验证 Python 核心库](#(2)验证 Python 核心库)
- (3)测试通讯机制
- (4)其他问题
- (5)检查系统状态
- 5.终端优化
- 二、问题记录
-
一、操作步骤
总览
其中在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虚拟环境
创建虚拟环境的目的有两个:
-
板子的buildroot host-python版本是3.8,但是target-python版本是3.10.5,为了确保编后由于环境问题引发报错,所以创建python虚拟环境,与target-python版本保持一致。
-
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)找不到包psutil、lark
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):
bashroot@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程序)
即:
bashroot@RK3562-Tronlong:~# head -n 1 /opt/ros/jazzy/lib/demo_nodes_py/listener #!/home/tronlong/ros2_jazzy_ws/.venv/bin/python应该修改为
#!/usr/bin/python3为了防止其他也有类似问题,直接批量修改:
bashroot@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解决:
bashroot@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找勾上即可,比较难解决的应该在文档中都能找到对应办法。
-
aarch64-buildroot-linux-gnu-g++.br_real: fatal error: Killed signal terminated program cc1plus内存溢出,调大内存到4G->8G->12G. -
缺失库,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 -
通过虚拟环境解决:lark(buildroot不自带host lark)、cmake(buildroot提供的cmake是轻量级cmake,不支持ssl,所以在通过https拉取代码时报错,所以需要虚拟环境中的cmake,只需要版本保证一致即可3.22)
-
解决不了,但是可以跳过的包:mimick_vendor(主要是用于 ROS 2 的单元测试和 Mock 测试)、gz-cmake3(仿真)、PyQt5(GUI)intra_process_demo(opencv演示demo,使用了opencv中的highgui模块,因为pyqt被忽略了,没有启用 GUI 支持)、image_tools(ROS 2 的一个示例包(用于演示如何发布和订阅图像流)同上使用了opencv中的highgui模块)。
具体列表:
bashimage_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 -
通过环境变量与指定参数解决:
libconsole_bridge.so.1.0:通过
bashexport 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" \解决。
bashimage_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 -
通过环境变量与指定参数解决:
libconsole_bridge.so.1.0:通过
bashexport 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" \解决。
-
移植后的运行问题(见3.打包下载)