【ROS2】ROS1 与 ROS2 并存时开发技巧

如果同时安装了 ROS1 和 ROS2,不管是二进制安装还是源码安装,都会遇到环境变量问题。在不使用 docker 的情况下,不能在 bashrc 中预先 source 一种版本的 setup.bash,会导致切换到另外版本时,无法直接 source。

可以为常用的 source 命令起一个“别名”,修改完成后 source ~/.bashrc 就会生效。

注意,alias在 Bash 中不能对source这种 shell built-in 起作用(会在子 shell 执行,环境不会改变当前 shell)。

snoetic() {
    source /opt/ros/noetic/setup.bash
}

shumble() {
    source ~/Dev/ros2_humble/install/setup.bash
}

sws() {
    if [ -f "./devel/setup.bash" ]; then
        source ./devel/setup.bash
        echo "[sws] Sourced ROS 1: $(realpath ./devel/setup.bash)"
    elif [ -f "./install/setup.bash" ]; then
        source ./install/setup.bash
        echo "[sws] Sourced ROS 2: $(realpath ./install/setup.bash)"
    else
        echo "[sws] Error: Neither ./devel/setup.bash (ROS 1) nor ./install/setup.bash (ROS 2) found"
    fi
}

这样每次使用 ros1 命令,例如 roscore,rosnode,rostopic,rosbag,catkin_make,rosrun,roslaunch,… 之前,可以先执行 snoetic(TAB补齐即可)。

ros2 开头命令就先 shumble。

如果当前终端路径在某个自定义工作空间下,想要运行 ros 功能包中节点,则先 sws,就会自动根据版本 source。

上一篇