ROS2の開発用にWindows Terminalを使ってbash/Powershellのタブ生成時に特定のbatを実行させる話(bashrc的な)
まとめ
- ROS2 みたいにターミナルを起動後に特定のコマンドを実行しておきたい場合の書き方のメモ
- ショートカットやWindows Terminalの起動時オプションに特定の記述を書くことで起動時に特定のプロセスを走らせられる
- 下記のような記法が使える
コマンドプロンプトの場合
# hogefuga.batを実行してそのまま開きっぱなしにする cmd.exe /k "hogefuga.bat"
Powershellの場合
# cmd1とcmd2を実行してそのまま開きっぱなしにする powershell.exe -NoExit -Command "cmd1.ps1; cmd2.ps1"
事例:ROS2でターミナル起動毎に実行する内容
今回の作業目的です。
ROS1でのsource devel/setup.bash
に相当する作業がROS2でも必要です。下記チュートリアルを参照。
- コマンドプロンプトの場合
call C:\dev\ros2\local_setup.bat
- Powershellの場合
C:\opt\ros\galactic\x64\local_setup.ps1
上記コマンドをタブを開くたびに入力する必要があり面倒です。 (Powershellにはbashrcみたいなのがあるので実は不要ですが。)
他にもいろいろ設定する必要がありそう?な気がしますが,それは別の記事で検証します。
なんなら一つのファイルにまとめてからそれを実行すれば良いだけの気もしますしね。
補足: ROS2のインストール形式
ROS2のバイナリインストール時にはzipからではなく,aka.ms/rosに示されている手順でインストールしているため若干走らせているコマンドが異なる可能性があります。WindowsにWSLを経由せずにROS2を入れている人の母数が結構少ないのか情報が足りてないので分かり次第追記します。
Windows Terminalを用いた解決策
Windows TerminalはWSLやコマンドプロンプト,Powershellなどをまとめて扱えるMS公式のターミナルアプリです。 ここに下図のように呼び出したいターミナルソフトとその起動コマンドを設定することができるため,いちいち実行するのが面倒なコマンドを起動時に処理することができます。
新しいターミナルの登録手順
ここに新しくROS2用のコマンドプロンプト/Powershellのターミナル設定を登録します。
設定 -> 「新しいプロファイルの追加」から 「コマンドライン」 を使いたいターミナルソフトに応じて編集します。
コマンドプロンプトを用いる時の設定
コマンドプロンプトを用いる場合は下記のように登録すると良いです。(バージョンはgalacticの設定です)
cmd.exe /k "C:\opt\ros\galactic\x64\local_setup.bat"
/k
の意味はbatファイルを実行後,プロセスをExitしないという意味です。
追記:その後なんやかんやあってfoxyに変更したのでコマンドは下記に変更しました。
cmd.exe /k "C:\opt\ros\foxy\x64\setup.bat && C:\opt\ros\foxy\x64\share\gazebo\setup.bat"
Powershellを用いるときの設定
Powershellでは下記のような記述を書くことによりROS2の設定を呼び出せます。
powershell.exe -NoExit -Command "C:\opt\ros\galactic\x64\local_setup.ps1"
なお,私はVisualStudioの設定も読ませた方がいいかなと思って下記を登録しています。長い...
powershell.exe -NoExit -Command "&{Import-Module """C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"""; Enter-VsDevShell 595a88d4 -SkipAutomaticLocation -DevCmdArguments """-arch=x64 -host_arch=x64""";C:\opt\ros\galactic\x64\local_setup.ps1}"
補足:複数のコマンドを実行したい場合
複数のコマンドを実行する必要性が出た場合は下記のようにすると良いです。
- コマンドプロンプトの場合:
&&
で繋げる - Powershellの場合:
;
で繋げる
参考にしたURLたち・免責
参考になったりならなかったりしたURLをおいておきます。
筆者が現時点でROS2の開発をフルにやっていないのでこれがおすすめ!とは言えないのであしからず。
windows — Linuxの.bashrcファイルに相当するウィンドウはありますか?
Safest way to run BAT file from Powershell script - Stack Overflow
Start-Process -FilePath """C:\opt\ros\galactic\x64\local_setup.ps1""" -Wait -NoNewWindow
みたいな記法が書いてありましたが,これはちょっと期待していたのと動作が違ったのでパス。