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

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

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

工作空间有 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=开始,依次向后查找,找到了就用其中的节点,没找到就往后找。如果好多个工作空间都有同名功能包,则一旦找到就不往后找了

工作空间是存放工程开发相关文件的文件夹,相当于使用VS时创建的工程,含四个文件夹,分别是用于放置功能的src代码空间、编译过程中产生编译文件的build编译空间、放置编译生成可执行文件的devel开发空间和install安装空间[^4]。 创建功能时,需要注意同一工作空间下,不允许存在同名功能;不同工作空间下,允许存在同名功能,且ROS不允许在某个功能中嵌套其他功能,多个功能必须平行放置在代码空间中[^1][^3]。 以下为创建功能和编译功能的示例: ```bash # 进入工作空间的src空间 cd ~/catkin_ws/src # 语法是:catkin_create_pkg <package_name> [depend1] [depend2] [depend3] catkin_create_pkg test_pkg std_msgs rospy roscpp # test_pkg是功能的名字,std_msgs,rospy,roscpp是这个功能所需的依赖 # 进入到工作空间 cd ~/catkin_ws # 编译这个工作空间 catkin_make # 设置系统环境变量,让系统找到当前的工作空间 source ~/catkin_ws/devel/setup.bash ``` 在ros2与windows环境下,创建工作空间功能的示例如下: ```bash # 加载环境 pushd C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\ call vcvars64.bat call C:\opt\ros\foxy\x64\local_setup.bat set "SDF_PATH=c:\opt\ros\foxy\x64\share\sdformat\1.6" # 创建工作空间 pushd c:\ mkdir test_ws\src # 创建C++类型的功能,learning_pkg_c为功能 pushd c:\test_ws\src ros2 pkg create --build-type ament_cmake learning_pkg_c # 在CMakeLists文件添加以下 install( DIRECTORY include launch rviz DESTINATION share/${PROJECT_NAME} ) # 编译功能 pushd c:\test_ws colcon build # 使用call命令设置环境 call C:\test_ws\install\local_setup.bat ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值