ROS学习-5 同名功能包是怎么运行的(工作空间的覆盖)

本文探讨在拥有多个工作空间且各包含hello功能包的情况下,如何确定实际使用的包。重点在于理解ROS_PACKAGE_PATH环境变量的工作原理,以及如何避免因同名包引起的依赖混乱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你有很多工作空间和功能包了之后,同名节点可能会相互影响

工作空间有 a,b,c

每个工作空间下有个 hello功能包,那么,究竟是哪个工作空间下的功能包呢?

xrh@xrh:~$ env | grep ros
LD_LIBRARY_PATH=/home/xrh/ROStest/devel/lib:/home/xrh/testmoveit/devel/lib:/opt/ros/melodic/lib
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
CMAKE_PREFIX_PATH=/home/xrh/ROStest/devel:/home/xrh/testmoveit/devel:/opt/ros/melodic
ROS_ROOT=/opt/ros/melodic/share/ros
PYTHONPATH=/opt/ros/melodic/lib/python2.7/dist-packages
ROS_PACKAGE_PATH=/home/xrh/ROStest/src:/home/xrh/testmoveit/src/beginner_tutorials:/home/xrh/testmoveit/src/moveit_tutorials:/home/xrh/testmoveit/src/panda_moveit_config:/opt/ros/melodic/share
PATH=/opt/ros/melodic/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PKG_CONFIG_PATH=/home/xrh/ROStest/devel/lib/pkgconfig:/home/xrh/testmoveit/devel/lib/pkgconfig:/opt/ros/melodic/lib/pkgconfig
xrh@xrh:~$ 

env可以看到整个系统的环境变量

使用grep可以只看和ROS相关的。

最需要关注 ROS_PACKAGE_PATH=

运行一个功能包之后,系统会从ROS_PACKAGE_PATH=开始,依次向后查找,找到了就用其中的节点,没找到就往后找。如果好多个工作空间都有同名功能包,则一旦找到就不往后找了

### 如何在 ROS2 中创建和构建工作空间ROS2 中,工作空间是一个用于组织和管理项目的目录结构。通过创建工作空间,用户可以编写、编译和运行自定义的 ROS2 节点。以下是关于如何创建和构建 ROS2 工作空间的详细说明。 #### 创建 ROS2 工作空间 要创建一个 ROS2 工作空间,首先需要在系统中创建一个目录,并在其内部添加 `src` 子目录。此子目录将含所有功能的源代码。例如,可以通过以下命令创建名为 `ros2_ws` 的工作空间[^4]: ```bash mkdir -p ~/ros2_ws/src ``` 此命令会在用户的主目录下创建一个名为 `ros2_ws` 的文件夹,并在其中生成一个 `src` 子目录。这个 `src` 目录是存放所有 ROS2 功能的地方。 #### 构建 ROS2 工作空间 创建好工作空间后,需要使用 `colcon` 工具来编译工作空间中的功能。`colcon` 是 ROS2 推荐的构建工具,支持增量构建和并行构建等功能。以下是构建工作空间的命令[^3]: ```bash cd ~/ros2_ws colcon build ``` 执行上述命令后,`colcon` 会自动检测 `src` 目录下的所有功能,并根据其依赖关系进行编译。编译结果会被存储在工作空间的 `build` 和 `install` 子目录中。 #### 设置环境变量 为了使新构建的功能能够在终端中正常运行,需要设置相关的环境变量。ROS2 提供了 `source` 命令来加载这些变量。具体操作如下[^1]: ```bash source ~/ros2_ws/install/setup.bash ``` 此命令会将 `ros2_ws` 工作空间中的功能路径添加到 ROS2 的搜索路径中,确保可以正确调用这些中的节点和其他资源。 #### 理解覆盖层(Overlay)和底层(Underlay) 在某些情况下,用户可能希望在一个已有的 ROS2 安装环境上叠加一个新的工作空间。这种工作空间被称为“覆盖层”(overlay),而原有的工作空间则称为“底层”(underlay)。覆盖层允许用户添加或修改功能,而不会影响底层的工作空间[^3]。 当设置覆盖层时,需要确保底层工作空间已经正确初始化,并且覆盖层中的功能依赖项可以在底层中找到。如果覆盖层中的某个功能与底层中的同名冲突,则覆盖层中的版本会优先被加载[^5]。 #### 示例:创建一个简单的发布者和订阅者 以下是一个简单的示例,展示如何在新创建的工作空间中实现一个发布者和订阅者: 1. 创建功能: ```bash cd ~/ros2_ws/src ros2 pkg create --build-type ament_python py_pubsub ``` 2. 编辑功能中的 Python 文件以实现发布者和订阅者逻辑。 3. 编译工作空间: ```bash colcon build ``` 4. 加载环境变量并运行节点: ```bash source ~/ros2_ws/install/setup.bash ros2 run py_pubsub talker ros2 run py_pubsub listener ``` ### 注意事项 - 在构建工作空间之前,请确保已正确安装 ROS2 并配置相关环境变量。 - 如果需要调试功能,可以使用 `--event-handlers console_cerr+` 参数启用更详细的日志输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值