如何让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环境变量。

相关推荐
轻口味1 天前
启元无真机二开实战1:54 个接口能做什么、不能做什么——启元 Q1/T1 SDK 能力全景与版本矩阵
线性代数·矩阵·ros2·具身智能·启元机器人
热金鼠4 天前
2.ROS2 核心机制与命令行实操
ros2
大雨歌9 天前
笛卡尔坐标 → 自然坐标(Frenet) 逐步推导全解 -2
ros2
米糕闯编程13 天前
鱼香ros2(十七)C++小海龟巡逻
开发语言·c++·机器人·ros2·服务·小海龟
风合星语14 天前
2026 机器人工程实例(七):Nav2 到站了,任务却没完成——AMR 载货导航中的托盘滑移与验收闭环
人工智能·机器人·ros2·机器人仿真·nav2·mujoco·amr
米糕闯编程20 天前
鱼香ros2(十二)C++话题订阅与发布
开发语言·c++·ros2·话题
朝朝辞暮i22 天前
C++ 第 36 课:Action——机械臂/VLA 非常重要
开发语言·c++·算法·ros2
朝朝辞暮i23 天前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
朝朝辞暮i23 天前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
朝朝辞暮i23 天前
C++ 第 38 课:线程、SingleThreadedExecutor、MultiThreadedExecutor、Callback Group
开发语言·c++·算法·ros2