source环境是什么意思
2025-12-19
XTDrone
00
请注意,本文编写于 45 天前,最后修改于 45 天前,其中某些信息可能已经过时。

目录

什么是"source ROS环境"
激活工作环境
setup.bash文件实际上修改了:
为什么需要分开source?
实际工作中的便捷方法
什么是ROSPACKAGEPATH
如何修改ROSPACKAGEPATH
验证您应该用哪组命令

什么是"source ROS环境"

简单说,source就是"加载"或"激活"一个环境配置文件,让当前的终端会话能够使用ROS的各种命令和功能

bash
展开代码
source /opt/ros/noetic/setup.bash
  • 作用:激活系统级别的ROS环境
  • 做了什么:
    • 将ROS核心命令(如roslaunch、roscore、rostopic等)添加到当前终端的PATH中
    • 设置ROS环境变量(如ROS_ROOT、ROS_PACKAGE_PATH)
    • 设置ROS版本(noetic)

如果不执行,终端会找不到roslaunch命令

激活工作环境

bash
展开代码
source ~/catkin_ws/devel/setup.bash
  • 作用:激活您自己工作空间的ROS环境
  • 做了什么:
    • 将您自己编译的包(如px4、mavros等)添加到ROS包搜索路径
    • 让roslaunch能找到您自己写的launch文件
    • 让ROS能找到您自己编写的节点

如果不执行:

bash
展开代码
# 终端能找到roslaunch,但找不到您的包 roslaunch px4 indoor1.launch # 报错:Cannot locate package [px4]

setup.bash文件实际上修改了:

  • PATH环境变量:添加ROS命令的路径
  • ROS_PACKAGE_PATH:添加ROS包的搜索路径
  • 其他环境变量:

为什么需要分开source?

因为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知道您的自定义包在哪里。

什么是ROS_PACKAGE_PATH

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

    • 这一行将PX4固件目录添加到ROS包搜索路径,让roslaunch、roscd等ROS命令能找到PX4包里的launch文件和其他资源
  • export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/root/PX4_Firmware/Tools/sitl_gazebo

    • 这一行将PX4的Gazebo仿真包也添加到ROS包搜索路径,sitl_gazebo包含关键的仿真launch文件和模型,这是运行roslaunch px4 indoor1.launch所必需的

ROS_PACKAGE_PATH是ROS的"包搜索路径",相当于:

  • Linux的PATH(用于找命令)
  • Python的PYTHONPATH(用于找模块)
  • ROS的ROS_PACKAGE_PATH(用于找ROS包)

image.png

冒号隔离

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会:

  • 按顺序搜索ROS_PACKAGE_PATH中的每个目录
  • 在每个目录下查找名为px4的文件夹
  • 找到第一个匹配后就停止

在您的配置中:

  • 先搜索/root/catkin_ws/src/...(没找到px4)
  • 然后搜索/opt/ros/noetic/share(没找到px4)
  • 最后在/root/PX4_Firmware找到px4包

如何修改ROS_PACKAGE_PATH

添加新路径(在末尾添加):

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

image.png

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 许可协议。转载请注明出处!