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

相关推荐
某林2124 天前
ros从底层硬件到 Web 端部署
python·机器人·硬件架构·ros2
zh路西法4 天前
【Navigation2进阶】(十二):自主探索性能优化与 RIG 算法推导与 Nav2 插件实现
c++·dijkstra·ros2·rrt·navigation2·前沿探索
视图猿人5 天前
Astra Pro相机+gazebo构建 ROS2 虚实联动数字孪生系统
ros2
zh路西法6 天前
【10天速通ROS2-PX4无人机】(四) 关掉GPS和气压计,纯激光定位还能飞吗
c++·无人机·px4·ros2·卡尔曼滤波·fastlio2
视图猿人7 天前
ROS2 AGV SLAM导航仿真系统技术详解与踩坑实录
机器人·ros2
zh路西法8 天前
【10天速通ROS2-PX4无人机】(一) 从零搭建仿真环境,妈妈再也不用担心我炸机了!
无人机·仿真·px4·ros2·gazebo
某林21210 天前
ROS2 + WebRTC + MQTT 异构系统架构
架构·系统架构·机器人·硬件架构·webrtc·ros2
Zeku12 天前
10.ROS2-URDF机器人建模-从概念到开发与调试全记录
机器人·ros2·linux驱动开发·linux应用开发
某林21213 天前
履带小车底盘stm32F103RCT6开发
人工智能·stm32·单片机·嵌入式硬件·架构·人机交互·ros2
qq_4192032317 天前
[ROS2 学习指南4] --- 手写一个 TF2 监听器(python版)
ros2·监听器