Jetson Xavierを使ってみる その3(ROSの環境構築、USBカメラ映像のPublish)
はじめに
今回はJetson XavierでROSの環境を構築して、USBカメラの映像をPublishしてみました。
ROSの通信で画像を送信して、物体検出や遠隔操作などを試したいなと思っています。
▼以前の記事はこちら
環境を構築する
最初にOSのバージョンを確認しておきました。
▼Ubuntu 20.04です。

Ubuntu 20.04に対応した、ROS Noeticをインストールしていきます。
▼WSL2で構築したときと同様の手順で環境を構築します。
Open Manipulator関連のインストールスクリプトを実行するのが楽なので、今回も利用します。
▼インストールに関するページはこちら。
以下のコマンドを実行し、インストールを行いました。
sudo apt update
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_noetic.sh
chmod 755 ./install_ros_noetic.sh
bash ./install_ros_noetic.sh他にも必要なパッケージをインストールしておきます。
source ~/.bashrc
sudo apt-get install ros-noetic-ros-controllers ros-noetic-gazebo* ros-noetic-moveit* ros-noetic-industrial-core
sudo apt install ros-noetic-dynamixel-sdk ros-noetic-dynamixel-workbench*
sudo apt install ros-noetic-robotis-manipulatorJetson XavierでOpen Manipulatorを制御するつもりはないのですが、次いでなので関連するものをダウンロードしてビルドしました。
cd ~/catkin_ws/src/
git clone -b noetic https://github.com/ROBOTIS-GIT/open_manipulator.git
git clone -b noetic https://github.com/ROBOTIS-GIT/open_manipulator_msgs.git
git clone -b noetic https://github.com/ROBOTIS-GIT/open_manipulator_simulations.git
git clone -b noetic https://github.com/ROBOTIS-GIT/open_manipulator_dependencies.git
cd ~/catkin_ws && catkin_makeここまで問題なく環境を構築することができました。
USBカメラの映像を確認する
Jetson XavierにUSBカメラを接続して、映像を確認します。
▼USBカメラは以下のものを利用しています。
必要なコマンドはChatGPTに聞いてみました。まずは必要なパッケージをインストールします。
sudo apt update
sudo apt install ros-noetic-usb-camUSBカメラのデバイス名を確認します。
ls /dev/video*▼USBカメラを接続していない状態では/dev/video*が無く、接続した状態では/dev/video0と/dev/video1が表示されました。

どちらを指定すればいいのか分からなかったのですが、今回は/dev/video0で問題ありませんでした。
ターミナルでroscoreを実行し、別のターミナルで以下のコマンドを実行しました。
rosrun usb_cam usb_cam_node _video_device:=/dev/video0 _pixel_format:=yuyv _image_width:=640 _image_height:=480 _framerate:=30▼問題なく起動できたようです。

▼rostopi listにもusb_cam関連のものがあります。

rostopic echoで確認してみました。
rostopic echo /usb_cam/image_raw▼データが流れていました。

Jetson Xavierはサーバー用に使っていてデスクトップ画面は基本的に見ていないので、別のPCで確認します。
別のPCで映像を確認する
WindowsのWSL2で構築したROSの環境を利用して、Jetson Xavierと通信します。ローカルネットワーク内での通信です。
▼ROSの環境構築は、先述した以前の記事で行いました。
Jetson側がROSのマスターになるように、.bashrcを編集しました。
▼予めJetson側のIPアドレスを確認しました。

▼Jetson側の.bashrcのIPアドレスを編集しました。

▼WSL2側の.bashrcのIPアドレスも変更しました。

改めてJetson側でsource .bashrcを実行してからroscoreと以下のコマンドを実行しました。
source .bashrc
rosrun usb_cam usb_cam_node _video_device:=/dev/video0 _pixel_format:=yuyv _image_width:=640 _image_height:=480 _framerate:=30WSL2側でもsource .bashrcを実行し、ROSのコマンドを実行しました。
▼WSL2側でrostopic listを実行して、トピックを確認できました。

この状態でWSL2側でrvizを実行し、GUIで操作をします。
▼RVizが起動しました。

▼Addを選択し、topicを見るとusb_camがあります。

image_rawのimageを選択して追加しました。
▼カメラの映像を確認できました!

ローカルネットワーク内というのもあるのか、レスポンスは速かったです。手を振ったら大体そのまま映っていました。
最後に
ローカルネットワーク内では通信できることを確認したので、最近よく使っているTailscaleによるVPN通信経由では通信速度はどうなるのかが気になっています。また、新たにUnityも利用して遠隔操作をしようとしているので、色々試してみようと思っています。



