前回までのえんせき
ORB_SLAM2にターゲットチェンジして、あっさり動いた。次はWebカメラからの入力でORB_SLAM2をやるために、ROSから動かしてみることにした。
ensekitt.hatenablog.com
つまりなにしたの?
Ubuntu16.04上のROS KineticでORB_SLAM2を動かしてiPhoneで撮影した動画を取り込んでみた。
ROSで使えるようにする準備
github.com
README.mdの最後の方にROS Examplesがあったのでこれをやってみる。
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$HOME/orb-slam2_ws/ORB_SLAM2/Examples/ROS cd ~/orb-slam2_ws/ORB_SLAM2 chmod +x build_ros.sh ./build_ros.sh cd ~/orb-slam2_ws/ORB_SLAM2/Examples rosws init . /opt/ros/kinetic rosws set ~/orb-slam2_ws/ORB_SLAM2/Examples/ROS -t . echo "source ~/dev/orb_slam2_ws/ORB_SLAM2/Examples/setup.bash" >> ~/.bashrc bash cd ~/orb-slam2_ws/ORB_SLAM2/Examples/ROS rosmake ORB_SLAM2
なんかこのへん、本当にこうなんですか?って感じがするのでもっといい方法ないのか模索してるけど、
とりあえずすすめる。
ROSから動画を流して、ORB_SLAM2で自己位置推定させてみる
Terminal1 roscore Terminal2 cd ~/orb-slam2_ws/ORB_SLAM2 rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Terminal3 cd ~/orb-slam2_ws/dataset wget http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip unzip LSD_room.bag.zip rosbag play LSD_room.bag /image_raw:=/camera/image_raw
iPhoneで撮影した動画をORB_SLAM2に読み込める状態にして自己位置推定してみる
iPhoneで撮影した動画をUbuntuに取り込む(僕はDropboxから放り込みました。
video_stream_opencv
video_stream_opencvで録画済みの動画を扱えるようなので、
video_stream_opencv - ROS Wiki
をインストールする(OpenCVで読み込める画像をROSにストリーミングするもの)
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make_isolated source devel_isolated/setup.bash cd ~/catkin_ws/src git clone https://github.com/ros-drivers/video_stream_opencv.git rosdep update rosdep install --from-path ~/dev/catkin_ws/src/video_stream_opencv --ignore-src cd ~/catkin_ws catkin_make_isolated echo "source ~/catkin_ws/devel_isolated/setup.bash" >> ~/.bashrc bash
Launchファイルを編集して動画を扱えるようにする
.launchファイルを作る。launchファイルっていうのはrosrunで1つ1つ丁寧に引数を指定するのが大変だから一気にいろんなノードを立ち上げるためにあるみたい。
video_stream_opencvは引数は多いし、ビュアーとかも立ちあげなきゃいけないのでlaunchを使っているのかな。
というわけで、
~/catkin_ws/src/video_stream_opencv/launch
にいくつか.launchファイルがあるので、その中からvideo_file.launchをコピーして一部改変する。
cd ~/orb_slam2_ws/dataset/ cp ~/catkin_ws/src/video_stream_opencv/launch/video_file.launch ./ mv video_file.launch my_video_file.launch nano my_video_file.launch
my_video_file.launchに以下のような内容を記述する
再生したい動画のパスはこちら
/home/myhome/orb_slam2_ws/dataset/IMG_0000.MOV
<launch> <!-- launch video stream --> <include file="$(find video_stream_opencv)/launch/camera.launch" > <!-- node name and ros graph name ここでカメラの名前を変えておく(ORB_SLAM2側が/camera/image_raw固定っぽいのでvalueをcameraにする--> <arg name="camera_name" value="camera" /> <!-- full path to the video file ここにiPhoneで撮った動画のパスを入れる(フルパスがいいのかな) --> <arg name="video_stream_provider" value="/home/myhome/orb_slam2_ws/dataset/IMG_0000.MOV" /> <!-- throttling the querying of frames to --> <arg name="fps" value="30" /> <!-- setting frame_id --> <arg name="frame_id" value="videofile_frame" /> <arg name="camera_info_url" value="" /> <!-- flip the image horizontally (mirror it) --> <arg name="flip_horizontal" value="false" /> <!-- flip the image vertically --> <arg name="flip_vertical" value="true" /> <!-- visualize on an image_view window the stream generated --> <arg name="visualize" value="true" /> </include> </launch>
僕は、~/orb_slam2_ws/dataset/直下に動画と、さっきのLaunchファイルをおいた。
動画をROSを通じでORB_SLAM2が受け取れるようにする。
Terminal1 roscore Terminal2 cd ~/orb_slam2_ws/ORB_SLAM2 rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/calib.yaml Terminal3 cd ~/orb_slam2_ws/dataset roslaunch video_file.launch
youtu.be
できました!!日比谷公園を歩いてみた。
この時のYamlファイルはこちら→
iPhoneでも使えたっぽいORB_SLAM2の設定ファイル · GitHub
(iPhoneでもうまく撮れてると使えるので試してみてね)
色々実験してみて、方向転換と逆光がいまいちなことがわかった。
広角とかジンバルに乗せて撮るべきなのかもしれない。
全天球カメラとかジンバルだれかください。
次どうするか
iPhoneに寄り道してしまったので、キャリブレーションもやりやすそうなWebカメラをさっさと試す。
参考
ここまでで使ったROSの使い方
ROSのパッケージの中にはノードがある。
rosrun [package_name] [node_name]
パッケージ[package_name]の中のノード[node_name]を起動する。node_nameのあとに引数をいくつかつけることがある
rosnode list
起動しているnodeプロセスが一覧できる
rosnode info [起動してるnode_name]
[起動してるnode_name]の情報が見られる
rosrun [package_name] [node_name] __name:=my_node
ノード名を/my_nodeとして起動することができる→rosnode listで見るとmy_nodeが出てくる
rosnode ping my_node(:例)
/my_nodeにpingを送って起動中か確認できる
roslaunch [launch file]
launch file にしたがってROSのノードたちを立ち上げる
rosrun rqt_graph rqt_graph
ノード間の関係性とかをグラフで表示してくれる
sudo apt-get install ros-kinetic-rqt sudo apt-get install ros-kinetic-rqt-common-plugins
でインストールして使える。