ROS1とROS2の環境変数管理


ROS環境の設定

Ubuntu上でROS1とROS2の双方を使って開発をすることが多くなり、環境をターミナルで行き来することが多くなったので、各ターミナルでこの環境が読み込まれてるかをわかりやすくしたときの設定のメモ。

最終的にはこんなことができるようになります。

環境

本記事では以下で検証しています。

  • Ubuntu 20.04
  • ROS noetic
  • ROS2 foxy

Ubuntu18.04, melodic, eloquentの環境でも可能なはずです。

環境を読み込むためのaliasの設定

  • bashの場合
    • ~/.bashrc~/.bash_aliasesなどに以下を記載
    • それぞれ環境の設定ファイルの読み込みや、workspaceへのpath、ROS通信に関わる変数の設定を行っている
    • それぞれの最後の行にあるPS1をすることでターミナル上でどちらの環境が読み込まれてるかわかるようになっている。
    • workspaceへのpathは適宜自分の環境に合わせてください
## ROS ##
LOCAL_IP=`hostname -I | cut -d' ' -f1`
alias noetic='
    source /opt/ros/noetic/setup.bash;
    export ROS_WORKSPACE=${HOME}/catkin_ws;
    export ROS_PACKAGE_PATH=${ROS_WORKSPACE}/:$ROS_PACKAGE_PATH;
    export ROS_IP=${LOCAL_IP};
    export ROS_MASTER_URI=http://localhost:11311;
    source ${ROS_WORKSPACE}/devel/setup.bash;
    export PS1="\e[1;32m\]\u@\h\e[1;31m\]<noetic>\e[m\]:\e[1;34m\]\w\e[m\]$ "
    '
alias foxy='
    source /opt/ros/foxy/setup.bash;
    export ROS_WORKSPACE=${HOME}/ros2_ws;
    source ${ROS_WORKSPACE}/install/local_setup.bash;
    export ROS_LOCALHOST_ONLY=1;
    export PS1="\e[1;32m\]\u@\h\e[1;33m\]<foxy>\e[m\]:\e[1;34m\]\w\e[m\]$ "
    '
  • zshの場合
    • bashの場合とほぼ同じです。~/.zshrcなどに記載してください。
    • 設定ファイルの読み込みファイルの拡張子が変わるだけです。
## ROS ##
LOCAL_IP=`hostname -I | cut -d' ' -f1`
alias melodic='
    source /opt/ros/noetic/setup.zsh;
    export ROS_WORKSPACE=${HOME}/catkin_ws;
    export ROS_PACKAGE_PATH=${ROS_WORKSPACE}/:$ROS_PACKAGE_PATH;
    export ROS_IP=${LOCAL_IP};
    export ROS_MASTER_URI=http://localhost:11311;
    source ${ROS_WORKSPACE}/devel/setup.zsh;
    export PS1="%F{red}<melodic> %f"$_LIBERTY" "
    '

alias foxy='
    source /opt/ros/foxy/setup.zsh;
    export ROS_WORKSPACE=${HOME}/ros2_ws;
    source ${ROS_WORKSPACE}/install/local_setup.zsh;
    export ROS_LOCALHOST_ONLY=1;
    export PS1="%F{blue}<eloquent> %f"$_LIBERTY" "
    '
  • 上記を記載後、source ~/.bashrcsource ~/.zshrcをし変更を読み込みます。(別ターミナル起動でも良いです。)
  • ROS1を使いたい場合はnoeticをROS2を使いたい場合はfoxyを実行することで環境が読み込まれます。

それぞれのworkspaceのmake

  • 以下を追加することでros_makeとすると現在読み込まれている環境のワークスペースをビルドしてくれます
  • buildのoptionは適宜変更してください。
function ros_make() {
    dir=$PWD;
    cd $ROS_WORKSPACE;
    if [[ $ROS_DISTRO == "noetic" ]]; then
        catkin_make --cmake-args -DCMAKE_BUILD_TYPE=Release;
        . devel/setup.zsh;
    elif [[ $ROS_DISTRO == "foxy" ]]; then
        if [ $# -gt 0 ]; then
            colcon build --packages-select $1 --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release;
        else
            colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release;
        fi;
        . install/local_setup.zsh;
    else
        echo "set ros distribution";
    fi
    cd $dir;
}

参考・関連サイトなど