VirtualBox環境のROS2でWebカメラを使えるようにする

VirtualBox環境下でROS2を使用するときに問題になりそうなのはWebカメラなどのデバイス接続がきちんとできるかということです。

この記事ではVirualBox環境下のUbuntu18.04 ROS2 DashingでWebカメラを使えるようにします。

前提条件

VirtualBox ExtensionがホストPCとゲストPCにどちらもインストールされていること

USBをゲストPCに認識させる

VirturalBoxの設定で"USB3.0(xHCI)コントローラー"にチェックが入っていることを確認する。
私のPCではWebカメラUSB3.0ポートにさすことになります。
その場合は下記の設定を行う必要があります。
f:id:naonaorange:20210523160459p:plain

ゲストPCでWebカメラを認識させる

ゲストPCのデバイス設定でWebカメラを選択します。
これでゲストPCにWebカメラが認識されます。
f:id:naonaorange:20210523160824p:plain

Webカメラの動作確認

とりあえずWebカメラにきちんとアクセスできているか確認しましょう。

cheese

f:id:naonaorange:20210523161017p:plain

ROS2のV4L2用パッケージをインストールする

sudo apt-get install ros-dashing-v4l2-camera

ROS2プログラムを実行時アクセスできるか確認する

ros2 run v4l2_camera v4l2_camera_node
ros2 run rqt_image_view rqt_image_view

f:id:naonaorange:20210523161520p:plain

WSLで複数のUbuntuを作って使い分けたい

WSLでUbuntuを使っているときに、「同じUbuntuバージョンを複数使い分けたい!」と思ったことはありませんか?
Windows StoreにはUbuntu18.04とUbuntu20.04が別々に存在しているので、それらは別々にインストールすることができますが、
Ubuntu18.04を複数個使いたいと思ったときにも別々にインストールして使い分けることができます。
本記事ではその方法を記載していきます。

Windows StoreでUbuntuをインストール

まずは元になるUbuntuをWidnwos Storeからインストールします。
これはいつものやり方でOKです。
インストール後は初回起動だけ行い、ユーザー名やパスワードを設定してください。
f:id:naonaorange:20210519195818p:plain
この状態でwslコマンドをたたくときちんとUbuntu 18.04がインストールされたことがわかります。

wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2

Ubuntuの環境をファイルにエクスポート

ベースとなるUbuntuの環境をファイルにエクスポートします。

wsl --export Ubuntu-18.04 Ubuntu_18_04.tar

ファイルからUbuntuの環境をエクスポート

次にファイルをからエクスポートします。
Ubuntu1804_2というフォルダが作られるので、適宜フォルダを決めてからコマンドを実行してください。
Ubuntuの環境自体はこれで何個も複製できます。
Windows Terminalで複製したUbuntuが表示されるため、簡単に起動できます。

wsl --import Ubu1804_2 Ubu1804_2 Ubuntu_18_04.tar

複製したUbuntuに一般ユーザーでログインする

Windows Terminalでログインしてみるとなぜかルートでログインされています。
いつものように一般ユーザーでログインする場合には下記対応が必要です。

Windows Terminalを管理者権限で実行してタブ周辺のプルダウンをクリック->設定を開きます。
複製したUbuntuのプロファイルを開き下記のように変更します。
これで指定したユーザー名でログインできます

#変更前
wsl.exe -d Ubu1804_2

#変更後
wsl.exe -d Ubu1804_2 -u <user name>

複製したUbuntuの削除方法

wsl --unregister Ubu1804_2

JupyterLabで決定木アルゴリズムをGraphvizで可視化する

決定木アルゴリズムはロジックを可視化しやすいことがメリットです。
JupytarLabでもツリーの内容を可視化することができます。

しかし、可視化するためにはGraphvizというソフトを使用するのが一般的なのですが、
そのインストールに一手間かかるので手順を記載します。

Graphvizをダウンロード

使用するためにはGraphiviz自体をWindowsにインストールする必要があります。
pipでもインストールできるみたいですが、venv等の仮想環境を使用している場合はいろいろ面倒なのでWindowsにインストール要です。
www.graphviz.org
f:id:naonaorange:20210522162208p:plain
"not all tools and libraries are included"と記載されていますが、これだけできちんと動きました。

Graphvizをインストール

設定は基本デフォルトでよいですが、1点だけ注意です。
"Install Options"でGraphviz環境変数に追加しておくようにします。
f:id:naonaorange:20210522162339p:plain

pipでGraphvizラッパーをインストール

最後にpipでGraphvizのラッパーをインストールします。

pip install graphviz

これでOKです。

WSL2環境にROS2をインストールする

前回WSL2環境にROS1環境をインストールしました。
naonaorange.hatenablog.com

この記事ではROS2をインストールしたいと思います。

前提条件

  • WSL2のUbuntu18.04にROS2 Dashingをインストールする

Ubuntu20.04にROS2 foxyをインストールしたい場合は適宜読み替えてもらうとよいと思います。

WSL2のインストールとGUI環境の構築

naonaorange.hatenablog.com

ROS2のインストール

インストール作業は公式を見て行いましょう。
docs.ros.org

追加情報としては、ros desktopをインストール後に下記パッケージのインストールします。
colconでパッケージをビルドするときなどに必要になります。

sudo apt install python3-colcon-common-extensions

Turtlebot3のシミュレーション環境を構築する

ROBOTIS社のセットアップページで環境を整える。
このページでの追加情報としては、
Dashingの場合Gazebo11をアンインストールしてGazebo9をインストールしているが、
デフォルトでGazeboをインストールした時点で9が入るため、curlでのインストール作業等はスキップしている。
emanual.robotis.com

次にGazeboを起動してみる。
起動に時間がかかるが正常に起動する。
emanual.robotis.com
f:id:naonaorange:20210523000042p:plain

最後にRvizを起動する。
emanual.robotis.com
f:id:naonaorange:20210523000245p:plain

WSL2環境にROS1をインストールする

以前、WSL1にROS1をインストールする記事を書きました。
この記事ではWSL2環境にROS1をインストールする方法を書きたいと思います。

WSL2をインストールする

下記記事を参考にインストールしてください。
naonaorange.hatenablog.com

ROS1をインストールする

こちらは公式HPを参考にしてください。
wiki.ros.org

Turtlebot3のシミュレーション環境構築

WSL2環境での使用に対して問題になりそうなところはRviz, Gazebo等のシミュレーション環境です。
きちんと動いているのか確認するためにTurtblebot3のシミュレーションをしてみましょう。

環境構築自体はこちらのページを参考にしてください。
emanual.robotis.com
注意点としては今回シミュレーション環境のみ作成するため"Network Configuration"は不要です。

Turtlebot3シミュレーション実行

#プログラムのダウンロード
cd ~/catkin_ws/src/
git clone -b melodic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ~/catkin_ws && catkin_make
roscore

別ターミナルでGazeboを起動します。

roslaunch turtlebot3_gazebo turtlebot3_world.launch

f:id:naonaorange:20210520065629p:plain

また別ターミナルでRvizを起動します。

roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

f:id:naonaorange:20210520065739p:plain

WSL2でUbuntuを使ってみる

以前、WSLのインストールについて記事を書きました。
naonaorange.hatenablog.com

時は流れていつの間にかWSL2になっていたので、今更ですが使ってみます。

前提条件

  • Ubuntu18.04をインストールする

初期設定

PowerShellを管理者権限で開きWSL2の機能を有効にする。

#WSLを有効にする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

#仮想マシン機能を有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

実行後には再起動する。

次にWSL2用Linuxカーネル更新プログラムパッケージのインストールを行う。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

WSLのデフォルトバージョンをWSL2にする

PowerShellを起動し実行する

wsl --set-default-version 2

Windows StoreでUbuntuをインストールする

今回はUbuntu 18.04をインストールします。
f:id:naonaorange:20210519195818p:plain
インストール後は起動します。初回起動時はユーザーネームとパスワードの設定を促されるため行います。

インストール後はPowerShellでWSLバージョンを確認します。もし1であれば変更してください。

#確認方法
wsl --list --verbose

#変更方法
wsl --set-version <distribution name> <versionNumber>

X ServerとしてVcXsrvをインストール

下記サイトよりダウンロードしてインストールします。
sourceforge.net

VcXsrvの初期設定

XLaunchを起動します。(名前がVcXsrvではないのでわかりにくいですが、、、)
基本的にデフォルト設定でよいですが、"Additional parameters for VcXsrc"には下記のコマンドを記載します。
f:id:naonaorange:20210519202325p:plain

#-ac: disable access control restrictions
#-nowgl: disable the GLX extension to use the native Windows WGL interface for hardware-accelerated
-ac -nowgl

WSL2 Ubuntu側でのX Server設定

Ubuntuの~/.bashrcに下記設定を追加します。

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

FirewallでX Serverの通信を許可する

WindowsのデフォルトではX Serverのポートが塞がれているため、Firewallの設定で許可をします。
この変更はセキュリティーにも影響を及ぼしますので個人の責任でお願いします。
システムとセキュリティーWindows Defender ファイアーウォール→詳細設定に進みます。
受信の規則で新しい規則を作成します。(他の記事では受信規則の一覧にVcSrvの行がありその設定を変更していましたが、私の環境ではVcSrvの行自体がありませんでしたので、新たに作成します。
設定項目はポートを選択します。
f:id:naonaorange:20210519210827p:plain

ポートは6000を指定します。
f:id:naonaorange:20210519210905p:plain

規則の名前はわかりやすい名前にしてください。
f:id:naonaorange:20210519210959p:plain

さて、これで規則自体は出来上がりました。
しかし、現段階ではどのPCからの通信も許可する内容になっています。
これではセキュリティー的に脆弱なため、せめてプライぺーとアドレスからの通信に限定します。
先ほど作成した規則を右クリックしてプロパティーを開きます。
スコープのリモートIPアドレスを"172.16.0.0/12"に限定します。
f:id:naonaorange:20210519211345p:plain

動作確認

Ubuntu上で実行します。

xeyes

下図のようなウィンドウが表示されればOKです!
f:id:naonaorange:20210519211619p:plain

Google Colaboratoryの無料プランでもgitを使ってソフト開発をしたい

最近は日本でもGoogle Colaboratoryの有料プランが使えるようになったり色々便利になってきています。

Google Colaboratoryに移行するときに問題になることの一つがソースコード管理です。
Goggle Colaboratoryのインスタンスは時間でリセットされてしまうため、
ソースコードをそのままにしておくとそのうち消えてしまいます。
加えて、gitを使ってバージョン管理もしたいですよね。

git管理については有料プランを契約すればGoogle Colaboratory上でターミナルを実行できるそうなので、
そちらでできると思います。
ですが、まずは無料版を使っていきたいのでJupyter Notebook上からGitコマンドを実行できるようにしてみました。

プログラムはこちらのGithubリポジトリに挙げています。
github.com

他にもGoogle Colaboratoryでの開発が便利になりそうなものをこのリポジトリに追加していきたいと思います。