如何让ROS2编译完后自动source环境变量

你有没有过这种苦恼,每次运行 colcon build 之后,总是忘记 source install/setup.bash,导致运行节点的时候提示 package not found,从而又要重新输入一遍 source 命令。

解决办法很简单,将以下内容复制粘贴到 ~/.bashrc 文件中:

复制代码
# ROS2 workspace build + auto source
cb() {
    if [ ! -d "src" ]; then
        echo "Error: Not in a ROS2 workspace root (src/ directory not found)"
        return 1
    fi
    
    if colcon build "$@"; then
        echo "✅ colcon build succeed"
        if source install/setup.bash; then
            echo "✅ successfully loaded install/setup.bash"
        else
            echo "⚠️ failed to load install/setup.bash"
        fi
    else
        echo "❌ colcon build failed"
        return 1
    fi
}

如此一来,我们只需要在ROS2工作空间中用 cb 命令代替 colcon build,就可以自动在编译后source环境变量了:

复制代码
cb                          # 编译整个工作空间并自动source

ros2 run ...                # 然后直接运行ROS2程序即可,无需再source

且由于我们在配置语句中使用了 colcon build "$@",所以cb命令附带的参数也会传递给 colcon build

复制代码
cb --packages-select my_pkg # 编译指定包并自动source
cb --symlink-install        # 带参数编译并自动source

下面是实际对比,左边是colcon build(编译完后不能马上运行程序),右边是cb(编译完后马上可以运行程序,无需source):

其实还可以再在 `~/.bashrc` 中加入一段:

复制代码
# quickly source install/setup.bash
sos() {
    # check if src directory exists
    if [ ! -d "src" ]; then
        echo "Error: No src/ directory found. Are you in a ROS2 workspace?"
        return 1
    fi
    
    # source
    if source install/setup.bash; then
        echo "✅ successfully loaded install/setup.bash"
    else
        echo "⚠️ failed to load install/setup.bash"
    fi
}

这样的话,在不需要重新编译项目的时候,也可以使用`sos`命令快捷source环境变量。

相关推荐
kyle~3 天前
工业以太网协议---EtherCAT
开发语言·c++·网络协议·机器人·ros2
kyle~3 天前
机器人广域网通信---MQTT技术
大数据·c++·机器人·ros2
kyle~4 天前
导航---LIO(激光雷达-惯性里程计)算法
c++·算法·机器人·ros2·导航
Will_Ye6 天前
ROS2安装Localization模块
ros2·localization·ndt
kyle~7 天前
FANUC 机械臂 --- 配置字
网络·c++·机器人·ros2
MIXLLRED7 天前
Ubuntu22.04 + ROS2 Humble + ORB-SLAM3 保存地图格式为.pcd文件
pcl·ros2·pcd·humble·orb_slam3
MIXLLRED10 天前
Ubuntu22.04 + ROS2 Humble + ORB-SLAM3 下从环境配置到深度相机d435实时SLAM
ros2·humble·orb_slam3·ubuntu22.04·d435
YQ_0113 天前
Ubuntu 22.04 下让 Gazebo / RViz 使用 NVIDIA GPU 渲染
ros2
小手智联老徐14 天前
ROS2:与 Gazebo 版本对应关系解析
机器人·ros2·gazebo