Jetson Nano 2G ROS Oak-D-Lite
やっと、OAK-D-Lite を購入できたので、
Jetson Nano 2G の ROS(Melodic) で、Oak-D-Lite(depthai-ros) を使えるようにしてみました。
参考は、 luxonis /
depthai-ros です。
環境:
1) 実行 SBC
Jetson Nano 2G: jetpack4 (ubuntu 18.04 相当)
OpenCV4.1.1
注) OpenCV4.x が必要とのことです。
Jetson Nano 2G OpenCV4.1.1 Build を参考にして下さい。
Ubuntu 18.04 は、OpenCV3.2 です。
後、他のROSパッケージも、OpenCV4.x 対応にしないと行けないので、下記を参考にして下さい。
自作 Turtlebot3 自立走行に向けたプログラム。#5
2) Rviz の確認用 リモートPC
Ubuntu Mate 18.04
ROS:melodic
注) こちらにも、同じように、depthai-core、 depthai-ros をインストールします。
但し、OpenCV3.2 なので、完全にはインストール出来ませんが、Rviz での確認に必要になります。
1. depthai-core (ライブラリー) のインストール。
https://raw.githubusercontent.com/luxonis/depthai-ros/main/install_dependencies.sh を参考にビルド&インストールします。
$ mkdir -p ~/local/oakd-lite
$ cd ~/local/oakd-lite
$ git clone --recursive https://github.com/luxonis/depthai-core.git --branch main
$ cmake -Hdepthai-core -Bdepthai-core/build -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr/local
注) ここで、
-- OpenCV and required libraries (opencv_core; opencv_imgproc) found, OpenCV Support enabled
が表示される事を確認します。
$ sudo cmake --build depthai-core/build --target install
これで、/usr/local へインストールされます。
2. ROS (depthai-ros) のビルド。
~/catkin_ws へ従来のようにインストールします。
vision_msgs が必要だったので、先にインストールします。
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros-perception/vision_msgs.git
$ cd vision_msgs
$ git checkout melodic-devel
$ cd ~/catkin_ws
$ wget https://raw.githubusercontent.com/luxonis/depthai-ros/main/underlay.repos
$ vcs import src < underlay.repos
[$ rosdep install --from-paths src --ignore-src -r -y] 此処は、実行していません。
$ catkin_make
3. USB Device の登録が必要みたい。
4. 動作確認。
i) depthai_examples/stereo_node.launch の確認。
1) Rviz の確認用 リモートPC
$ roscore
2) SBC での起動。
$ roslaunch depthai_examples stereo_node.launch
3) PC での確認。
$ roslaunch depthai_examples stereo_node.launch PC:=true
$ rviz
ちょっと変かな? 結構、遅め。
frame rate=15[fps] だったか? もう少し上げられるのか?
下記は、PC 側で起動しないと、TF が Publish されないみたいです。
<include if="$(arg PC)" file="$(find depthai_bridge)/launch/urdf.launch">
ii) depthai_examples/rgb_publisher.launch
やり方は、上と同じ。
TF が出ていない様。めちゃくちゃ遅い。
こちらも、下記は、PC 側にします。
<include if="$(arg PC)" file="$(find depthai_bridge)/launch/urdf.launch">
iii) depthai_examples/stereo_nodelet.launch
やり方は、同じ。但し、rviz の起動は、
SBC ではせずに。PC側で起動する。
ちょっと変かな?
TF が出ていない。
こちらも、下記、2つは、PC 側で起動します。
<include if="$(arg PC)" file="$(find depthai_bridge)/launch/urdf.launch">
<node if="$(arg PC)" type="rviz" name="rviz" pkg="rviz" args="-d $(find depthai_examples)/rviz/stereo_nodelet.rviz" />
これで、TF が出だしました。しかし、やはり結構遅いまま。
/stereo_publisher/stereo/image/Image が、白黒でした。
残念でした。
やはり、オリジナルの方法の様に、
$ rosdep install --from-paths src --ignore-src -r -y
を実行すべきか?
意味がわからないので、今回は、飛ばしていますが?
これが原因か?
rosdep使おうよ
これでは、無いみたいだ。逆に、これを実行したら、パッケージ版がインストールされるので、OpenCV3.2 版が紛れ込んだらNGです。
下記エラーが出ているので、こちらが先決か?
下記に問い合わせがあるみたい。
OAK-D Lite troubles with camera parameters mismatch #60
$ roslaunch depthai_examples stereo_node.launch monoResolution:=400p camera_model:=OAK-D-LITE
これでエラーは消えました。
リモートPC で確認してみました。
Rviz で、/stereo_publisher/stereo/depth/DepthCloud を Add してみます。
少し、早く見える様になった気がします。
自作 Stereo Camera よりは、良い気がします。
部屋の壁、ふすまが、直線的に出ています。
$ rostopic hz /stereo_publisher/stereo/depth
$ roslaunch depthai_examples stereo_nodelet.launch monoResolution:=400p camera_model:=OAK-D-LITE
こちらは、パラメータ名が違うようです。以前と同じエラーになります。
それでも、デフォルトの 480p で実行されている様です。
さすが、resolution=480 だと、遅いです。
400p になるように、設定箇所をみつけないといかんぞね。
もしかしたら、
~/catkin_ws/src/luxonis/depthai-ros-examples/depthai_examples/ros1_src/stereo_nodelet.cpp
を修正して、再度 build するのか?
ほかのパラメータは、実行時に取り込んでいるのに、
~/catkin_ws/src/luxonis/depthai-ros-examples/depthai_examples/ros1_src/stereo_publisher.cpp
は、実行時に取り込んでいるので、同じ処理を組み込めばよいのか?
但し、キャリブレーションデータが、
image_height: 720
image_width: 1280
なので、720x1280 でCaption して、その後、画像サイズをリサイズする処理になるのか?
此処は、プログラムで実行時にCamera の方から、取り込んでいるので気にしないで良いみたい。
ros1_src/stereo_publisher.cpp
但し、stereo_nodelet の方は、固定になっているので、バグ!!
ros1_src/stereo_nodelet.cpp
もっと小さいサイズのキャリブレーションデータもサポートされていないと無理か?
結局、ros でのサポートが未だ、完璧では無いのだろう。 Native のアプリケーションでは、
そこらへんが、充実しているのかも?
おんちゃんとしては、320x240 くらいのフレームサイズで良いのだが。
後、stereo_nodelet.launch だと、
/stereo_publisher/stereo/depth/DepthCloud が、出てきません。
どこかチョンボしているのか?
注1) /stereo_publisher/stereo/depth 、 /stereo_publisher/left/camera_info はちゃんと publish されています。
但し両者の画像サイズの指定が一致していないので、Rviz で表示されないだけみたいぞね!!
$ rostopiecho /stereo_publisher/stereo/depth |more
$ rostopic echo /stereo_publisher/stereo/camera_info |more
原因は、上の記述の所のようなので、自分で組み込めば良いのかも。
/stereo_publisher/stereo/points/PointCloud2 は、出ています。
これが、白黒なので、残念です。
これは、映像が左に振れているような気がします。
stereo_nodelet は、まだ開発途上なのかも知れません。先がおもいやられそうです。
後は、rtabmap_ros で、試してみたいです。
5. stereo_nodelet.launch と stereo_nodelet.cpp の修正。
ros1_src/stereo_nodelet.cpp に足りない処理を、ros1/stereo_publisher.cpp から取り込んで修正しました。
注) Jetson Nano 2G でのビルドは、SSHではなく、直接 テキストログインして行います。でないと、うまくビルドできません。
実行時に、 nodelet の load で、エラーログを吐いて終了します。
これで、OK となりました。
PC で速度を確認。
$ rostopic hz /stereo_publisher/stereo/depth
average rate: 30.007 から 30.008
Jetson Nano 2G では、どうか? 本当に遅い!!
Jetson Nano 2G で、 OAK-D-Lite を、直接、USB3.0 ポートへ挿しました。Wi-Fi dongle
は、USB 2.0 にしてみました。
15[Hz] です。見違えるほどよくなりました。
注) github の方で対応してくれたので、最新版を試して下さい。
注1) 終了時に、エラーを出力するみたい。実行処理は、問題ないので、影響はあまり無いが!!
解析してみると。depthai_bridge/BridgePublisher::~BridgePublisher() でエラーになっているみたいぞね。
depthai_bridge/BridgePublisher.hpp
~BridgePublisher() の、thread の終了待ちの処理が、問題か?
try{} , catch(_Unwind_RaiseException e){} で逃げるのか?
おんちゃんには、これ以上はわかりません。
注) github の方で対応してくれたので、最新版を試して下さい。