はじめに
普段はubuntuでROSを使っていますが、諸事情によりwindowsでROSを動かす必要がありました。しかし、windowsでよく使われるシェルであるコマンドプロンプトは、あまりにも使い勝手が悪かったので、ROSを操作しやすいように改造しました。
結果、**コマンドプロンプトを開くだけで、ROSのコマンドも使えるし、登録したエイリアスも使えるし、linuxコマンドも使えるようになりました。**楽!!
※諸事情とは→Oculus LinkとROSを一緒に使いたいが、Oculus Linkはlinuxに対応していない...
環境
- Windows 10
- コマンドプロンプト (Windows Terminal)
- コマンドプロンプトはWindows Terminalから起動することを想定しています
- ROS2 Foxy
1. 起動時にセットアップ用の処理を自動で実行する
コマンドプロンプト起動時に自動で実行してほしい処理がいくつかあります。例えば、
- ROS2のセットアップ (
call C:\opt\ros\foxy\x64\local_setup.bat
) - コンパイル環境の設定 (
call "C:\Program Files (x86)\Microsoft Visual Studio\...
) - 作成したワークスペースのセットアップ (
call install/setup.bat
)
などがあります。これらのコマンドを以下のような1つのバッチファイルにまとめて、それをコマンドプロンプトの起動時に自動で実行するように設定します。
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
call "C:\opt\ros\foxy\x64\local_setup.bat"
windows terminalにて、ctrl+,
で設定を開き、新しいプロファイルを追加します
を選択して、ROS用のプロファイルを新規に作成します。その後の詳しい手順は、以下のサイトの6.1 Using the new Windows Terminal
の部分を参照してください。
起動時に先ほどのバッチファイルを実行するようにしたいので、プロファイルのcommandline
は以下のように設定します。
{
"commandline" : "C:\\Windows\\System32\\cmd.exe /k \"path\\to\\bat\"",
}
2. エイリアスを登録する
いちいちROSの長いコマンドを入力するのは大変なので、エイリアスを登録したいところです。linuxではbashrcに書くだけで済みますが、コマンドプロンプトにはそういう概念はなさそうだったので、doskeyコマンドを使いました。doskeyコマンドを使うと、コマンドプロンプトから使用するマクロを設定できます。例えば、以下のコマンドでは、ros2 run...
から始まるコマンドを、ros-tcp-endpoint
という名前で登録しています。
$ doskey ros-tcp-endpoint=ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=192.168.11.12
しかし、コマンドプロンプトで上記のコマンドを実行するだけだと、そのウインドウを閉じると消えてしまいます。設定を永続化させるために、今回は、C:\Users\(ユーザ名)\
にMacros.txt
というファイルにすべてのエイリアスを記述し、コマンドプロンプト起動時にそれを読み込むようにしました。
マクロ名=コマンド
作成したバッチファイルに以下の一行を追加します。このdoskeyコマンドでマクロファイルの中身が読み込まれて登録されます。
doskey /macrofile="C:\Users\(ユーザー名))\Macros.txt"
3. linuxコマンドを使えるようにする
デフォルトのコマンドプロンプトでは、ls
やmv
などのコマンドが使えませんが、下記のGowをインストールすることで使えるようになりました。
ただし、そのままだと文字化けの問題があるため、以下の記事に従って対処しました。
参考文献