ROS1を使ってみる その5(WSL2 Ubuntu 18.04、カメラ)
はじめに
今回はWSL2のUbuntu 18.04にROSをインストールし、カメラを利用してみました。
なぜUbuntu 18.04なのかというと、ロボットの画像処理用に使われていたJetson系のコンピュータにUbuntu 18.04が入っていたからです。普段使っているWindowsのノートPCで試せるほうが楽なんですよね。
RVizでカメラの映像を表示できるところまで確認しました。さらにYOLOと一緒に使おうと思っています。
▼以前の記事はこちら
WSL2でUbuntu 18.04のインストール
まずはWSL2でUbuntu 18.04をインストールします。
▼WSL2でUbuntu 20.04をインストールしたときに、ついでにUbuntu 18.04もインストールしていました。手順は同じです。
▼WindowsのPowerShellで以下のコマンドを実行すると、Ubuntu 18.04をインストールすることができます。
wsl.exe --install Ubuntu-18.04
▼Ubuntu 18.04がインストールされました。
ただし、一度アンインストールしてからインストールする場合などはすんなりインストールできないかもしれません。
▼こちらの記事で対処したことがあります。
ROSの環境構築
次にROSの環境を構築しました。Ubuntu 18.04なので、Melodicをインストールします。
以前Noeticをインストールしたときは、ROBOTISのOpen ManipulatorのGetting Startedを読みながらインストールしました。今回もROBOTISの製品のGetting Startedを参考にしています。
▼Open Manipulator-PのGetting Startedに、Melodicでのインストール方法が書かれていました。
https://emanual.robotis.com/docs/en/platform/openmanipulator_p/ros_setup
以下のコマンドでROBOTISのインストール用の.shファイルをダウンロードして実行しました。
sudo apt-get update
sudo apt-get upgrade
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_melodic.sh && chmod 755 ./install_ros_melodic.sh && bash ./install_ros_melodic.sh
Open Manipulator-Pは使わないので、git cloneは行わずにcatkin_makeを実行してみました。
sudo apt-get install ros-melodic-ros-controllers ros-melodic-gazebo* ros-melodic-moveit* ros-melodic-industrial-core
cd ~/catkin_ws
source devel/setup.bash
catkin_make
▼特にエラーもなく、実行できました。
▼以前も試していた、Turtlesimを実行してみました。
roscore
を実行後、Ubuntu 18.04の新しいターミナルを開いて、以下のコマンドを実行してみました。
rosrun turtlesim turtlesim_node
▼カメが表示されました。
WSL2環境へのカメラの接続
これまでの記事でもWSL2環境でUSBデバイスを利用するときはコマンドで使えるようにする必要がありました。今回もカメラに対して同じ手順を踏みました。
▼Open Manipulatorを操作するときはU2D2というUSBデバイスを利用する必要がありました。
Ubuntu環境でlsusb
を実行すると、カメラは認識していないことが分かります。
▼何も設定していない状態だと2つだけ表示されています。
PowerShellを管理者権限で開いて、コマンドを実行していきます。
▼管理者権限でないと、この後エラーが出ます。
usbipdをインストールしていない場合は、インストールしておいてください。
▼こちらからmsiファイルをダウンロードして実行すると、インストールが始まります。
https://github.com/dorssel/usbipd-win/releases/tag/v4.2.0
まずデバイスのBUSIDをusbipd list
で確認します。
▼WebCamがありますが、これは私のノートPCの内蔵カメラのようです。
USBカメラを接続してみました。
▼ちなみに八千円くらいのUSBカメラなのですが、電子部品屋さんで中古品を二千円で二つ入手しました。
▼再度コマンドを実行すると、Webcamが増えていました。
以下のコマンドでWSL環境でもUSBデバイスを利用できるようにします。<busid>の部分は、先程のBUSIDに置き換えてください。
usbipd bind --busid <busid>
usbipd attach --wsl --busid <busid>
▼bindしてからattachを実行しないとエラーが起きます。
▼その後Ubuntu 18.04でlsusb
を実行すると、カメラを認識していました。
ROSでカメラを利用する
▼以下のページを参考にしました。
以下のパッケージをインストールしました。
sudo apt install ros-melodic-libuvc-camera
▼インストール後にROSのコマンドを実行すると、エラーが出ていました。
ChatGPTに聞いてみたのですが、以下のパッケージをインストールすると解決しました。
sudo apt-get install libuvc-dev
▼次はPermissionエラーが出ていました。
参考にしていたサイトに、こういった場合の対処も書かれていました。以下のコマンドで権限を確認してみました。
lsusb
ls -l /dev/bus/usb/00*
▼以下のように表示されました。
この画像ではPC内臓カメラ(/dev/bus/usb/001/002)は権限変更後ですが、USBカメラ(/dev/bus/usb/001/004)は差し直しました。
USBカメラの権限はcrw-rw-r--になっています。以下のコマンドで書き込み権限を付与します。
sudo chmod a+w /dev/bus/usb/001/004
▼再度権限を確認すると、crw-rw-rw-に変わっていました。
ここまで設定出来たら、roscore
を実行し、新しくターミナルを開いて以下のコマンドを実行しました。
rosrun libuvc_camera camera_node
▼以下のように出力されました。
さらに新しくターミナルを開き、以下のコマンドを実行しました。
rosrun image_view image_view image:=/image_raw
▼以下のようにカメラの映像がウィンドウに表示されました!
▼FPSが低いのか、動きがあるとラグがありました。
なお、USBカメラを差し直すともう一度権限を付与するためのコマンドを実行する必要がありました。PowerShellでWSL2に接続するためのコマンドも再度実行する必要があるのでご注意ください。
▼ちなみにUSBカメラを抜いて、接続しているカメラをPCの内蔵カメラのみにすると、実行できていませんでした。
RVizで確認する
新しくターミナルを開いて、rviz
を実行しました。
▼以下のように表示されました。
左側のAddを選択すると、新しくウィンドウが開きます。
▼By topicの/image_rawにあるImageを選択後、OKを選択しました。
▼左下の小さいウィンドウにカメラの映像が表示されました。
▼拡大して表示してみました。
最後に
WSL2ではないUbuntu環境であればもっと簡単に扱えるとは思うのですが、なんとかカメラを利用することができました。
FPSが低いことは気になっています。コマンドで変更できるようであれば変更して、YOLOと一緒に使ってみたいなと思っています。