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

相关推荐
某林2126 天前
从 Isaac Lab API 踩坑到硬件 MVP 的全链路实战破局
python·机器人·人机交互·ros2
竹叶青lvye7 天前
ROS2自定义接口消息、参数服务案例
人工智能·ros2·具身智能·接口消息·参数服务
knighthood20018 天前
解决RTPS_TRANSPORT_SHM Error
ros2
kyle~9 天前
DDS分布式实时系统---自省机制
开发语言·分布式·机器人·c#·接口·ros2
济6179 天前
BMS系统专栏:认知电池管理系统BMS的知识与功能
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
kyle~9 天前
机器人日志系统
c++·单片机·嵌入式硬件·机器人·ros2
某林2129 天前
从底层硬件死锁到 QoS 通信底层的全链路复盘
python·ros2·qos
BestOrNothing_20159 天前
ROS2 C++ 小车控制完整实战(二):自定义 msg 消息发布与订阅保姆级教程
c++·ros2·subscriber·publisher·msg·topic通信·自定义接口
BestOrNothing_201510 天前
ROS2 C++ 小车控制完整实战(三):自定义 srv 服务通信保姆级教程
c++·service通信·ros2·client·server·srv
kyle~10 天前
工业机械臂---TCP标定验收
机器人·ros2·标定