はじめに
今回の記事では、WSL(Windows Subsystem for Linux)を使用して、Windows端末に ROS 2 の開発環境をインストール方法について記載します。
シミュレータを使用する場合、CPU負荷が高くなり利用は難しかったのですが、WSL2でもCUDAを使用できるようになったことで、仮想環境で ROS 2 を動かしやすくなりました。
仮想環境であれば、開発・動作確認はもちろん、比較的簡単に初期状態からの環境構築確認も行うことができ便利です。
Ubuntuネイティブ環境で開発を行う場合は、「ROS 2 のインストール」記事を参照してください。
対象読者
- ROS 2 の開発を始めようとしているエンジニア
前提条件
- 本記事を書くにあたり、使用したハードウェアになります。
環境 | |
---|---|
メモリー | 32GB |
CPU | Intel(R) Core(TM) i7-10870H CPU @ 2.20GHz |
GPU(内蔵ディスプレイ用) | Intel(R) UHD Graphics |
GPU | NVIDIA GeForce RTX 3070 Laptop GPU |
GPU専用メモリー | 8GB |
- 本記事を書くにあたり、使用したソフトウェアになります。
バージョン | |
---|---|
ホストOS | Windows10 22H2 (OSビルド 19045.3570) |
NVIDIAドライバ | Game Ready 546.17 |
CUDA on WSL | 12.3 |
WSLディストリビューションベース | Ubuntu 22.04 |
ROS 2 | ROS 2 humble |
シミュレータ | Gazebo Classic 11 |
開発ツール | Visual Studio Code(vscode) |
- 本記事での ROS 2 用WSLディストリビューション環境
内容 | |
---|---|
ディストリビューション名 | ros2 |
ディストリビューション作成ディレクトリ | D:\develop\wsl\ros2 |
ユーザー名 | kccs |
ROS 2 開発用ディレクトリ | /home/kccs/ros2_ws |
- コマンドの記述
プレフィックス | 環境 |
---|---|
PS > | PowerShell 又は コマンドプロンプト |
root # kccs $ |
WSLディストリビューションのターミナル |
NVIDIAドライバインストール
NVIDIAドライバインストール
NVIDIAドライバが未インストールの場合は、NVIDIAのサイトなどを参考に、NVIDIAドライバのインストールを行います。
vscodeインストール
IDEとして、vscodeを使用します。
vscodeインストール
Microsoftのサイトなどを参考に、vscodeのインストールを行います。
日本語化
日本語化する場合は、拡張機能の「Japanese Language Pack for Visual Studio Code」をインストールします。
PS > code --install-extension ms-ceintl.vscode-language-pack-ja
リモート環境利用設定
WSLリモート環境が使用できるように、拡張機能の「Remote Development」をインストールします。
PS > code --install-extension ms-vscode-remote.vscode-remote-extensionpack
WSL2インストール
WSL2インストール
Microsoftのサイトなどを参考に、WSL2のインストールを行います。
ここでは、「WSL コマンドのインストール」部分のWSL2本体のみをインストールします。
ディストリビューションのインストールなどは、この後実施します。
WSL環境設定
「%userprofile%.wslconfig」ファイルを作成します。
ROSシミュレーション環境は、使用するメモリが多くなりがちなため、WSLに割り当てる最大メモリとスワップサイズを設定します。
今回使用したマシンは32GBのメモリがあるので、物理メモリの1/4を割り当てて、スワップには割り当てたメモリの4倍を設定しています。
[WSL2]
memory=8GB
swap=32GB
ディストリビューション準備
ロボット毎に環境を分けたり、やり直しを容易にするために、初期インストールされたディストリビューションから、ROS 2 用のディストリビューションを作成します。
インストール済みディストリビューションの確認
PS > wsl -l -v
リストに「Ubuntu-22.04」が表示された場合は、ディストリビューション初期化を実行し、表示されていない場合は、ディストリビューション追加を実行してください。
ディストリビューション初期化
この操作は、ディストリビューションの内容(データ)が消えます。
残したい場合は、事前にexport importで別のディストリビューションとして移行するか、この作業を飛ばして、ディストリビューション追加に進んでください。
理想的には、初期状態のUbuntu22.04ディストリビューションからの作成をお薦めします。
PS > wsl --unregister Ubuntu-22.04
ディストリビューション追加
Ubuntu22.04のディストリビューションをインストールします。
PS > wsl --install -d Ubuntu-22.04
別ディストリビューションとして使いたいので、ユーザー名の入力に対して、Ctrl + Cキーを押して、ユーザー登録せずに終了します。
ROS 2 用ディストリビューション作成
Ubuntu22.04のディストリビューションをエクスポートして、新しいディストリビューションとしてインポートします。
PS > D:
PS > cd D:\develop\wsl
PS > wsl --export Ubuntu-22.04 Ubuntu-22.04.tar
PS > wsl --import ros2 ros2 Ubuntu-22.04.tar
ディストリビューション実行(ターミナル起動)
PS > wsl -d ros2
ログインユーザー作成
作成したディストリビューションに接続して、作業用ユーザーを作成します。
(本記事では、「kccs」とします。)
root # adduser kccs
New password: ←パスワードを入力(sudoするときに入力するパスワードになります)
Retype new password: ←上で入力したパスワードと同じものを再入力
Changing the user information for kccs
Enter the new value, or press ENTER for the default
Full Name []: ←そのままエンターでOK(入力したければユーザー名を入力)
Room Number []: ←そのままエンターでOK
Work Phone []: ←そのままエンターでOK
Home Phone []: ←そのままエンターでOK
Other []: ←そのままエンターでOK
Is the information correct? [Y/n] ←エンター
sudoersに登録
作成したユーザーがroot権限の処理ができるようにsudersに登録します。
root # gpasswd -a kccs sudo
ディストリビューション起動時の初期設定
WSLでsystemdを有効にし、起動時の既定ユーザーを作成したログインユーザーにします。/etc/wsl.conf ファイルを新規に作成します。
root # vi /etc/wsl.conf
開いたエディタに以下の内容をコピー&ペーストします。
[boot]
systemd=true
[user]
default=kccs
「ESC」キー「:wq」エンターでファイルを保存します。
ターミナル終了
一度、ディストリビューションのターミナルを終了します。
root # exit
ディストリビューション終了
起動時設定を有効にするために、ディストリビューションを終了します。
PS > wsl -t ros2
起動確認
再度ディストリビューションを実行し、初期設定が有効になっていることを確認します。
PS > wsl -d ros2
起動時のユーザーが「kccs」になっていればOKです。
CUDAインストール
NVIDIAのサイトなどを参考に、WSLディストリビューションにCUDAをインストールします。
通常のCUDAではなく、CUDA Support for WSL2をインストールする必要があります。
古いGPGキー削除
kccs $ cd
kccs $ sudo apt-key del 7fa2af80
CUDA Toolkit インストール
CUDAダウンロードページにて、Distributionに「WSL-Ubuntu」を選択します。
サイズが大きいのでネットワークが不安定な場合は、Install Typeに「deb(local)」を選択した方が失敗が少ないと思います。
表示されたコマンドをもとに、CUDA Toolkitをインストールします。
kccs $ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
kccs $ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
kccs $ wget https://developer.download.nvidia.com/compute/cuda/12.3.1/local_installers/cuda-repo-wsl-ubuntu-12-3-local_12.3.1-1_amd64.deb
kccs $ sudo dpkg -i cuda-repo-wsl-ubuntu-12-3-local_12.3.1-1_amd64.deb
kccs $ sudo cp /var/cuda-repo-wsl-ubuntu-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
kccs $ sudo apt-get update
kccs $ sudo apt-get -y install cuda-toolkit-12-3
インストール確認
NVIDIAドライバ及びCUDA Toolkitがインストールされ、WSL2のWSLgでNVIDIA GPUが使用されていることを確認します。
kccs $ nvidia-smi
右上の「CUDA Version」は、インストールされているNVIDIAドライバで対応可能な最大CUDAバージョンになります。
今回、12.3をインストールしますので、ここが12.3未満の場合は、より新しいNVIDIAドライバをインストールしてください。
ProcessesにXwaylandが表示されればOKです。
ROS 2 Humbleインストール
ROS 2 Humbleのサイトなどを参考に、ROS 2 をインストールします。
ロケール設定
日本語ロケールのja_JP.UTF-8に設定します。
kccs $ sudo apt install -y language-pack-ja
kccs $ sudo localectl set-locale LANG=ja_JP.UTF-8
kccs $ export LANG=ja_JP.UTF-8
Ubuntu Universe Repository有効化
kccs $ sudo apt install -y software-properties-common
kccs $ sudo add-apt-repository universe
GPGキー追加
kccs $ sudo apt update && sudo apt install -y curl
kccs $ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
ソースリストにリポジトリを追加
kccs $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
リポジトリキャッシュ最新化&アップグレード
kccs $ sudo apt update
kccs $ sudo apt upgrade -y
ROS 2インストール
RVizなどを含むデスクトップ版をインストールします。
kccs $ sudo apt install -y ros-humble-desktop
ROS 2 開発用ツールインストール
開発に必要な、cmake,git,python3,python3-setuptools,python3-bloom,python3-colcon-common-extensions,python3-rosdep,python3-vcstool,wgetをインストールします。
kccs $ sudo apt install -y ros-dev-tools
Gazeboインストール
Gazebo Classicのサイトなどを参考に、Gazeboをインストールします。
Gazebo Classic 11インストール
kccs $ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
kccs $ wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
kccs $ sudo apt update
kccs $ sudo apt install -y gazebo
kccs $ sudo apt install -y libgazebo-dev
Gazebo ROSインストール
kccs $ sudo apt install -y ros-humble-gazebo-* ros-humble-joint-state-publisher
OpenGL環境確認ツールインストール
Gazeboそのものには不要ですが、OpenGLの環境を確認するためにツールをインストールします。
kccs $ sudo apt install -y mesa-utils
レンダリングデバイス確認
kccs $ glxinfo -B
表示された情報の中で、赤枠で囲った部分が、INTELになっている場合は、OpenGLで使用するデバイスをNVIDIAにするために、MESA_D3D12_DEFAULT_ADAPTER_NAME環境変数を設定します。
- 環境変数
export MESA_D3D12_DEFAULT_ADAPTER_NAME="NVIDIA"
- 再起動後も有効になるように、.bashrcに追記します。
kccs $ echo 'export MESA_D3D12_DEFAULT_ADAPTER_NAME="NVIDIA"' >> ~/.bashr
Gazebo起動確認
kccs $ gazebo
GPU使用確認
kccs $ nvidia-smi
Processに「gzserver」「gzclient」が表示されれば、GPUレンダリングが使用されています。
その他パッケージインストール
分析ツールパッケージ
kccs $ sudo apt install ros-humble-rqt-*
開発用ソースディレクトリ作成
開発に使用するワークスペースを準備します。
ディレクトリ作成
kccs $ cd
kccs $ mkdir -p ros2_ws/src
kccs $ cd ros2_ws
依存関係ツール初期化
kccs $ sudo rosdep init
kccs $ rosdep update
ビルド環境初期構築
kccs $ source /opt/ros/humble/setup.bash
kccs $ colcon build
環境変数設定
~/.bashrcに環境変数を追記し、ターミナル起動でHumbleが使用できるようにします。
CUDA関係追加
kccs $ echo 'export CUDA_PATH=/usr/local/cuda' >> ~/.bashrc
kccs $ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}' >> ~/.bashrc
kccs $ echo 'export PATH=/usr/local/cuda/bin:${PATH}' >> ~/.bashrc
ROS 2 関係追加
今回は、ローカル環境のみでの開発を想定して、ローカルのみの設定にします。ローカル以外では、ROS_DOMAIN_IDが同一の場合、同一実行環境として扱われるため、同一ネットワークの端末間で干渉させたくない場合は、端末毎に値を変えます。
kccs $ echo "export ROS_DOMAIN_ID=0" >> ~/.bashrc
kccs $ echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc
kccs $ echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
再起動
環境変数などの設定を有効にするために、ディストリビューションを再起動します。
ターミナル終了
kccs $ exit
ターミナル開始
PS > wsl -d ros2
vscode設定
vscodeでROS開発を行うための準備を行います。
vscode起動
kccs $ cd ~/ros2_ws
kccs $ code .
初回はディストリビューション内へのインストールが実行されます。
信頼確認
vscodeが起動すると、作成者の信頼確認画面が表示されます。
「はい、作成者を信頼します」を選択します。
vscode終了
起動したvscodeを一旦終了します。
ROS操作、Python、C++の開発&ビルドに必要な拡張機能インストール
kccs $ code --install-extension ms-vscode.cpptools-extension-pack
kccs $ code --install-extension ms-python.python
kccs $ code --install-extension ms-python.flake8
kccs $ code --install-extension ms-python.autopep8
kccs $ code --install-extension njpwerner.autodocstring
kccs $ code --install-extension ms-iot.vscode-ros
kccs $ code --install-extension mhutchie.git-graph
ワークスペース開発設定
ワークスペースでvscodeを使用してC++,Pythonの開発を行うための設定をします。
vscode起動
Windowsメニューから「Visual Studio Code」を選択し起動します。
起動場所確認
前回起動したワークスペースが開くので、WSL:ros2で開かれていることを確認します。
もし、異なる場所で起動している場合は、ワークスペースを開きなおします。「メニュー」「ファイル」「最近使用した項目を開く」の順に選択します。
[WSL:ros2]を選択してフォルダーを開きます。
linter / formatterなどの設定
エクスプローラーパネルの空いているところで右クリックし、「新しいフォルダー…」を選択します。
「.vscode」と入力し、フォルダーを作成します。
「.vscode」の上で右クリックし、「新しいファイル…」を選択し、以下の2ファイルを作成します。
{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"${workspaceFolder}/src/**",
"/opt/ros/humble/include/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}
{
"python.analysis.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages"
],
"python.autoComplete.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages"
],
"C_Cpp.clang_format_style": "Google",
"editor.formatOnSave": true,
"editor.formatOnType": true,
"[cpp]": {
"editor.tabSize": 2,
},
"files.associations": {
"*.ipp": "cpp",
"array": "cpp",
"atomic": "cpp",
"complex": "cpp",
"any": "cpp",
"chrono": "cpp",
"ratio": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"type_traits": "cpp",
"fstream": "cpp",
"functional": "cpp",
"istream": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"streambuf": "cpp",
"valarray": "cpp",
"iosfwd": "cpp"
},
"[python]": {
"editor.defaultFormatter": "ms-python.autopep8",
"editor.formatOnSave": true
},
"autopep8.args": [
"--max-line-length=120"
],
"flake8.args": [
"--max-line-length=120",
"--max-complexity=10"
],
"C_Cpp.intelliSenseEngineFallback": "disabled",
"C_Cpp.default.compilerPath": "/usr/bin/gcc",
"ros.distro": "humble"
}
ディストリビューション退避
環境が壊れた場合のリセットや、別の開発環境をすぐに構築するために、各種設定が終わった現時点のディストリビューションをエクスポートして保存しておきます。
エクスポート
PS > D:
PS > cd D:\develop\wsl
PS > wsl --export ros2 ros2.tar
出力したtarファイルをインポートすることで、別環境の構築に利用することができます。
参考文献
- NVIDIAドライバダウンロードサイト
- Visual Studio Code
- WSL を使用して Windows に Linux をインストールする方法
- CUDA on WSL User Guide
- CUDA Toolkit 12.3 Update 1 Downloads
- ROS 2 Documentation: Humble
- Install Gazebo using Ubuntu packages
おわりに
以上が ROS 2 humble を使用しWSL上で開発を行うための基本的な環境作成になります。
次回以降では、ノード作成など実際の開発に関する記事を投稿していく予定ですので、お楽しみに!