[方法分享]是使用local_setup.bash 还是 setup.bash 呢?
-
编译完
ros2
程序后,我们会发现install
目录下有两个脚本local_setup.bash
和setup.bash
。执行程序前,通常需要source
一下install
目录下的脚本,以便环境变量准备就绪。这样ros2 run
和ros2 launch
就能找到对应的执行文件和依赖。下面的内容是从
setup.bash
中截取出来的一段。可以发现它会先source
一下/opt/ros/galactic
目录再source
一下/home/ubuntu/turtlebot3_ws/install
目录,最后再source
一下当前目录。这样就会把外部的多个工作空间囊括进来。如果多个工作空间中有相同名字的功能包可能就会互相冲突。# source chained prefixes # setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script COLCON_CURRENT_PREFIX="/opt/ros/galactic" _colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" # setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script COLCON_CURRENT_PREFIX="/home/ubuntu/turtlebot3_ws/install" _colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" # source this prefix # setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" _colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" unset COLCON_CURRENT_PREFIX unset _colcon_prefix_chain_bash_source_script
而
local_setup.bash
只会source
脚本所在目录。这样只会查找当前install
目录下的执行文件和依赖。所以如果系统里有多个
ROS
工作空间,谨慎一点的方法是:1、先
source
一下/opt/ros/galactic/local_setup.bash
2、在
source
一下某个用户的工作空间。如果系统里就一个自己建的用户工作空间。那就直接
source
用户工作空间中install
目录下的setup.bash
。一切都搞定了。它会帮你先
source
一下/opt/ros/galactic/local_setup.bash
,这样就有系统的安装的ros
执行程序和依赖了。然后再帮你source
本用户空间的install/local_setup.bash
。参考:
https://colcon.readthedocs.io/en/released/developer/environment.html#workspace-level