简单说,source就是"加载"或"激活"一个环境配置文件,让当前的终端会话能够使用ROS的各种命令和功能
bash展开代码source /opt/ros/noetic/setup.bash
如果不执行,终端会找不到roslaunch命令
bash展开代码source ~/catkin_ws/devel/setup.bash
如果不执行:
bash展开代码# 终端能找到roslaunch,但找不到您的包
roslaunch px4 indoor1.launch
# 报错:Cannot locate package [px4]
因为ROS的多层结构:
bash展开代码1. 系统ROS安装 ├── 核心功能 (roscpp, rospy) ├── 基础工具 (roslaunch, rostopic) └── 官方包 (gazebo_ros, tf2) 2. 您的工作空间 (~/catkin_ws) ├── 您的包 (px4, 您的算法包) ├── 修改过的第三方包 └── 自定义launch文件
一次性source 在~/.bashrc中添加,每次开终端都会自动配置好所有环境,自动执行:
bash展开代码# 在.bashrc末尾添加
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
检查是否已source
bash展开代码# 查看环境变量
echo $ROS_PACKAGE_PATH
# 如果有输出,说明已source
# 或者检查特定变量
env | grep ROS
即:source是为了找到安装包和指令
当执行source ~/catkin_ws/devel/setup.bash时,主要是让ROS知道您的自定义包在哪里。
bash展开代码export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware/Tools/sitl_gazebo
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware/Tools/sitl_gazebo
ROS_PACKAGE_PATH是ROS的"包搜索路径",相当于:

冒号隔离
bash展开代码#catkin_ws工作空间:
/root/catkin_ws/src/VINS-Fusion/camera_models
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_dev
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_msgs
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_ros
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_plugins
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_ros_control
:/root/catkin_ws/src/gazebo_ros_pkgs/gazebo_ros_pkgs
:/root/catkin_ws/src/VINS-Fusion/global_fusion
:/root/catkin_ws/src/VINS-Fusion/loop_fusion
:/root/catkin_ws/src/VINS-Fusion/vins_estimator
#系统ROS:
:/opt/ros/noetic/share
#PX4相关
:/root/PX4_Firmware
:/root/PX4_Firmware/Tools/sitl_gazebo
ROS_PACKAGE_PATH是ROS中最重要的环境变量之一。
当您运行ROS命令时,ROS会按照这个路径列表的顺序查找所需的包
当运行roslaunch px4 indoor1.launch时, ROS会:
在您的配置中:
添加新路径(在末尾添加):
bash展开代码export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/新路径
教程:https://www.yuque.com/xtdrone/manual_cn/basic_config_13
bash展开代码source ~/catkin_ws/devel/setup.bash
source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo
使用绝对路径:
bash展开代码source /opt/ros/noetic/setup.bash
source /root/PX4_Firmware/Tools/setup_gazebo.bash /root/PX4_Firmware /root/PX4_Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware/Tools/sitl_gazebo

bash展开代码# 查看~展开为什么
echo ~
# 如果当前用户是root,~是/root
# 如果当前用户是其他用户,~是/home/用户名
# 查看实际路径
ls -d ~/PX4_Firmware
ls -d /root/PX4_Firmware
运行这些检查:
bash展开代码# 检查1:您当前的用户
whoami
# 如果是root,~就是/root
# 检查2:PX4实际位置
ls -ld /root/PX4_Firmware
ls -ld ~/PX4_Firmware # 比较两者
# 检查3:查看您的.bashrc中是否有自动配置
cat ~/.bashrc | grep -A2 -B2 "PX4_Firmware\|ROS_PACKAGE_PATH\|GAZEBO"
本文作者:cc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!