ORB-SLAM を導入する
LSD-SLAMは導入できた.
今度はORB-SLAMを導入する.
【OS】Ubuntu 14.04 LTS
【ROS】ROS indigo
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libsuitesparse-dev
$ sudo apt-get install libblas-dev
$ sudo apt-get install liblapack-dev
$ sudo apt-get install libeigen3-dev
$ git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM
$ gedit ~/.bashrc
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/ubuntu/ORB_SLAM
最後に追記
$ cd ~/ORB_SLAM/Thirdparty/g2o/
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make
$ cd ~/ORB_SLAM/Thirdparty/DBoW2/
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make
$ cd ~/ORB_SLAM/
$ gedit manifest.xml
opencv2をコメントアウト
$ mkdir build
$ cd build
$ cmake .. -DROS_BUILD_TYPE=Release
[rosbuild] Building package ORB_SLAM
[rosbuild] Error from directory check: /opt/ros/indigo/share/ros/core/rosbuild/bin/check_same_directories.py /home/ubuntu/ORB_SLAM
1
Traceback (most recent call last):
File "/opt/ros/indigo/share/ros/core/rosbuild/bin/check_same_directories.py", line 46, in
raise Exception
Exception
CMake Error at /opt/ros/indigo/share/ros/core/rosbuild/private.cmake:102 (message):
[rosbuild] rospack found package "ORB_SLAM" at "", but the current
directory is "/home/ubuntu/ORB_SLAM". You should double-check your
ROS_PACKAGE_PATH to ensure that packages are found in the correct
precedence order.
Call Stack (most recent call first):
/opt/ros/indigo/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)
CMakeLists.txt:4 (rosbuild_init)
-
- Configuring incomplete, errors occurred!
See also "/home/ubuntu/ORB_SLAM/build/CMakeFiles/CMakeOutput.log".
は…?もしかしてROS_PACKAGE_PATHが通ってない?
$ echo $ROS_PACKAGE_PATH
/home/ubuntu/ros/indigo/package_dir:/home/ubuntu/ros_catkin_ws/indigo/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks:/home/ubuntu/ORB_SLAM
うん?いや,通っているぞ?
github.com
あきらめて一度再起動する.
$ sudo reboot
$ cd ORB_SLAM/build/
$ cmake .. -DROS_BUILD_TYPE=Release
$ make
あれ?通った?なんで?
まあいいや,とにかく無事に導入できたようなのでテストする.
$ roscore
デフォルトでは以下の通り
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml
PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE を表しているらしい.
Loading ORB Vocabulary. This could take a while.
Vocabulary loading failure: This is not a correct text file!
Wrong path to vocabulary. Path must be absolut or relative to ORB_SLAM package directory.
Falied to open at: /home/ubuntu/ORB_SLAM//Data/ORBvoc.txt
おっと,Data/ORBvoc.txt.tar.gz解凍を忘れていた.
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml /camera/image_raw:=/image_raw
$ rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
$ rosrun uvc_camera uvc_camera_node
RVIZで見る.
$ rosrun rviz rviz -d Data/rviz.rviz
FixedFrame=ORB_SLAM/World
Add→By topic→→/ORB_SLAM/Map/Maker
LSD_room.bagを入れてテストする
$ wget http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip
$ unzip LSD_room.bag.zip
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml /camera/image_raw:=/image_raw
$ rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
$ rosbag play LSD_room.bag /image_raw:=/camera/image_raw
できた.
正確にトラッキングできていないようなら,カメラキャリブレーションすればいい.
$ sudo apt−get install ros−indigo−camera−calibration
$ rosrun uvc_camera uvc_camera_node set_camera_info:=/camera/set_camera_info
$ rosrun camera_calibration cameracalibrator.py --size 10x7 --square 0.024 image:=/image_raw
印刷設定によっては --square 0.023 もある.とりあえず定規を使って正確に.
[image]
width
640
height
480
[narrow_stereo]
camera matrix
642.312297 0.000000 326.922975
0.000000 640.587748 226.561341
0.000000 0.000000 1.000000
distortion
0.045102 -0.149298 0.001217 -0.001112 0.000000
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
projection
642.660889 0.000000 325.975378 0.000000
0.000000 641.689636 226.420144 0.000000
0.000000 0.000000 1.000000 0.000000
('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')
で,これをどこに置けばいいんだ?
/Date/settings.yaml にそれっぽい記述がある.
$ gedit ~/ORB_SLAM/Data/settings.yaml
# Camera Parameters. Adjust them!
# Camera calibration parameters (OpenCV)
Camera.fx: 609.2855
Camera.fy: 609.3422
Camera.cx: 351.4274
Camera.cy: 237.7324
# Camera distortion paremeters (OpenCV) --
Camera.k1: -0.3492
Camera.k2: 0.1363
Camera.p1: 0.0
Camera.p2: 0.0
コピーして自分用に書き換える.
$ cp ~/ORB_SLAM/Data/settings.yaml ~/ORB_SLAM/Data/settings_default.yaml
$ gedit ~/ORB_SLAM/Data/settings.yaml
# Camera Parameters. Adjust them!
# Camera calibration parameters (OpenCV)
Camera.fx: 642.3123
Camera.fy: 640.5877
Camera.cx: 326.9230
Camera.cy: 226.5613
# Camera distortion paremeters (OpenCV) --
Camera.k1: 0.04510
Camera.k2: -0.1493
Camera.p1: 0.001217
Camera.p2: -0.001112
うまく行っているかどうかは正直わからない….
カメラキャリブレーションさえ精度よく求められていれば…
参考リンク
noshumi.blogspot.jp
カメラキャリブレーション他ではお世話になった参考文献
http://irvs.github.io/rosbook_jp/
次回はイメージの話
質問がありましたらコメントまたはTwitterにてお願いします.
ROSCORE Error
先日のこと.
$ roscore
$ rosrun uvc_camera uvc_camera_node
$ rosrun image_view image_view image:=/image_raw
Couldn't find an AF_INET address for [hostname -I]
なんぞ!?
どうやらMasterのネーム解決ができていないらしい.
ラズパイと接続のため,いろいろ環境変数をいじったのがあかんかったか.
とりあえずQiita読んでどうにか対処しようとする.
$ roscore
roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://**(A)**:11311/
The traceback for the exception was written to the log file
(一部書き換え)
どういうことなの?
ROS_MASTER_URIが指定間違えなのか?
とりあえず確認しよう.
$ echo $ROS_MASTER_URI
http://localhost:11311
あれ…?とりあえず初期設定に書き換え
$ export ROS_MASTER_URI=http://localhost:11311
$ sudo gedit /etc/hosts
$ source ~/.bashrc
$ echo $ROS_MASTER_URI
http://localhost:11311
これでいいのか? いや,よくない.なにも変わっていない.
再びググってみると,内部でROS_MASTER_URI=http://**(A)**:11311 の ROSCORE が動いているらしいことが分かった.なんで…?
ならばROSCOREを止めればいい.
$ killall -9 roscore
$ killall -9 rosmaster
$ roscore
$ rosrun uvc_camera uvc_camera_node
$ rosrun image_view image_view image:=/image_raw
今度はうまくいった.killallすればよかったのか.
Raspberry Pi 3 ROS で Webカメラをブラウザに表示する
mjpeg_serverを使って,ラズパイに接続したウェブカメラをブラウザで見られるようにしてみる.
作業ディレクトリを作っていなかったので,追加する.
例によってSSH接続.
$ ssh ubuntu@***.***.***.***
$ mkdir -p ~/ros_catkin_ws/src
$ cd ~/ros_catkin_ws/src
$ catkin_init_workspace
$ cd ..
$ catkin_make
環境変数の書き換え.
$ vi ~/.bashrc
コメントアウトして,
#source /opt/ros/kinetic/setup.bash
以下の行を追加する.
source ~/ros_catkin_ws/devel/setup.bash
反映させるのを忘れないように.
$ source ~/.bashrc
依存関係を入れる.
$ sudo -E apt-get update
$ sudo -E apt install ros-kinetic-cv-bridge
$ sudo -E apt install ros-kinetic-cv-camera
$ sudo -E apt install ros-kinetic-image-transport-plugins
$ cd ~/ros_catkin_ws/src
$ git clone https://github.com/RobotWebTools/mjpeg_server.git
$ cd ..
$ catkin_make
…gitの仕組みが未だにわかっていない
git@github.com:RobotWebTools/mjpeg_server.git では繋がらなかったので.
gitのプロキシ設定については前回あたりに書いていたはず.
これで使えるようになった.
$ roscore
別端末から
$ rosrun cv_camera cv_camera_node
別端末から動作確認コマンド.数字の羅列が表示されれば,動作成功.ctrl+cで止める.
$ rostopic echo /cv_camera/image_raw
再び別端末.
$ rosrun mjpeg_server mjpeg_server _port:=10000
portは任意
http://***.***.***.***:10000/stream?topic=/cv_camera/image_raw
をブラウザで見る.IPはラズパイの方.
これで監視カメラが作れた.
出先で見るようにするにはVPNが必要だったりとちょい面倒なので省略.
ちなみにこれでフレームレートを変更できる.下の例は10fps
$ rosparam set /cv_camera/rate 10
参考文献は前回と同じく「Raspberry Piで学ぶ ROSロボット入門」
みんな買おう!!
次回はカメラの映像をROSで共有する.
質問がありましたらコメントまたはTwitterにてお願いします.
RaspberryPi 3 + Ubuntu16.04 に ROS を入れる話
RaspberryPi 3 Ubuntu16.04 に ROS を入れる話.
とはいえ,神scriptがあるのでこちらを参照する.
前回と変わらずSSH接続.途中ディスプレイが必要になりますが.
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd ~/.ssh
$ ssh-keygen
$ ls -l id_rsa*
$ cat id_rsa.pub
出てきたやったら長いやつを以下にコピペ
https://github.com/settings/keys
ログイン必須
次に神スクリプトをいただく.
github.com
Forkしてcloneする.
ラズパイ側の git proxy を設定.
$ git config --global http.proxy http://proxy:port
$ git config --global https.proxy http://proxy:port
$ git config --global url."https://".insteadOf git://
確認はこれ.
$ git config --list
$ vi ~/.gitconfig
ラズパイで以下のコマンドを打つ.
$ git clone https://github.com/(user_name)/ros_setup_scripts_Ubuntu16.04_server.git
なぜかラズパイでないと受け付けなかった.
PCに戻って,スクリプトを走らせる.
そのときプロキシ環境下ではスクリプトの書き換えが必要っぽい.
$ vi ros_setup_scripts_Ubuntu16.04_server.git/step1.bash
sudo 以下「-E」を全て追加.正直なところまだ何かを忘れている気がする….
$ cd ros_setup_scripts_Ubuntu16.04_server.git
$ ./step1.bash
INSTRUCTIONが表示されれば無事終了しているらしい.
言語設定.
$ vi locale.ja.bash
sudo 以下同じく「-E」を追加.
$ ./locale.ja.bash
$ source ~/.bashrc
$ cd ~
$ roscore
表示されれば無事終了.
WI-FI設定の話.
$ sudo vi /etc/network/interfaces
以下の行をコメントアウト.
# source /etc/network/interfaces.d/*.cfg
以下4行を追加
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/labwifi.conf
wireless-power off
$ sudo -s
以下,スーパーユーザで実行する.
# apt install wpasupplicant
# wpa_passphrase (SSID) (暗号化キー)> /etc/wpa_supplicant/labwifi.conf
# cat /etc/wpa_supplicant/labwifi.conf
# apt install wireless-tools
# ifup wlan0
# reboot
参考文献は同じく「Raspberry Piで学ぶ ROSロボット入門」です.
上田様ありがとうございます.
次回は未定.
質問がありましたらコメントまたはTwitterにてお願いします.
Raspberry Pi 3 に Ubuntu 16.04 を入れる話
ラズパイにUbuntu16.04を入れる.
先に断っておきますが,試行錯誤の歴史を羅列しています.
必ず最後まで読んでから実行してください.
ほかのサイト様と併用することをお勧めします.
【MAIN】Raspberry Pi 3
【OS】Ubuntu 16.04 server
【HOST】Ubuntu 14.04 PC
【PROXY】環境
【必要なもの】Ethernet(有線環境)
gpartedで該当MicroSDを初期化
※パーティションが未割当の状態
から
ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz
をダウンロードする.wgetからでも取り寄せられるが,プロキシが面倒なのでブラウザから.ホームディレクトリでもどこでもいいのでとりあえず置いておく.
まず,MicroSDをアンマウントする.
$ df -h
$ sudo umount /dev/***
/dev/***がMicroSDの場所.gpartedでも調べられる.私の場合は /dev/sdc でした.
$ xzcat ~/ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz | sudo dd bs=1MB of=/dev/***
/dev/***を間違えると大変なことになるので何度も確認してください.
進行度を見るには,別の端末から以下のコマンドを打って,元の端末に戻ると情報が表示されている.
$ sudo killall -USR1 dd
ラズパイにSDカードを挿入.電源ON.
ディスプレイが正常ならこのような表示が出てくる.
ubuntu login: ubuntu
Password: ubuntu
初期IDと初期PASSは両方「ubuntu」なので,とりあえず新Passwordに変更する.
ラズパイが有線で接続されていることを確認してIPアドレスを調べる.
$ ip addr show eth0
sshでPCから環境を設定したいのでIPアドレスをもとにSSH.
$ ssh ubuntu@***.***.***.***
こんな警告が出たら.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
表示に従ってknown_hostsを削除.
$ rm ~/.ssh/known_hosts
$ ssh ubuntu@***.***.***.***
以下,PCからSSHで入力している.ラズパイディスプレイは外してしまえ.
ちなみに文字化けが怖いのでラズパイ側は英語環境のままにしている.
まず最初に設定ファイル修正を行う.
$ sudo vi /boot/firmware/config.txt
# set extended DT area
# device_tree_address=0x100
# device_tree_end=0x8000
device_tree_address=0x02008000
最後の行を追加.これをやらなかったおかげで一回ぶっ壊した.
すごくめんどうなproxy.
ちなみに $ vi ~/.bashrc で直接いじってもいいらしい.
$ export https_proxy="http://proxy:port/"
$ export http_proxy="http://proxy:port/"
$ export ftp_proxy="http://proxy:port/"
$ sudo -E apt update
$ sudo -E apt upgrade
ここまでくれば,お疲れさまです.CUI環境は慣れてください.
参考文献は,「Raspberry Piで学ぶ ROSロボット入門」です.
いやあ,ほんとうにためになります.
まだ序盤しか試せていませんが,これからよろしくお願いします.
なんかエラー(?)が出る.
sudo: unable to resolve host ubuntu
sudo: ホスト ubuntu の名前解決ができません
$ cat /etc/hosts
$ cat /etc/hostname
二つのファイルを比較すると,どうもUSER-PCの項がなかったので追加する.
$ sudo vi /etc/hosts
127.0.0.1 USER-PC
これで直る.(直った)
参考リンク:
Bash on Ubuntu on Windowsで謎のエラー: 文系エンジニアの私的ナレッジベース
ちなみにDesktop環境にしたかったけど,なぜかエラー続きでぶっ壊しました(2回目).
もうCUIでやっていきます…(´・ω・`)
Ubuntu 14.04 に ROS indigo を入れる話 [後編]
作業ディレクトリとパッケージ追加の話.
最初に作業ディレクトリの名前を間違えるというミスをしてしまったばかりにとんでもないことになったので,慎重にコマンドを打っていこう(戒め).
以下,コマンド
catkinを使うためのディレクトリを作る.
$ cd ~
$ mkdir -p ros/indigo
$ cd ros/indigo
$ rosws init . ~/ros_catkin_ws/indigo/devel
$ echo "source $HOME/ros/indigo/setup.bash" >> ~/.bashrc
作業ディレクトリを~/ros_catkinにする人もいるようです.
ぶっちゃけ分かればなんでもいい.
今回はLSD-SLAMを入れたい.まず依存関係を入れる.
$ sudo -E apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev
ここでrosmakeできるディレクトリを作るのを忘れていた.
$ cd ~/ros/indigo
$ mkdir package_dir
$ rosws set ~/ros/indigo/package_dir -t .
$ source ~/.bashrc
$ cd ~/ros/indigo/package_dir/
$ git clone https://github.com/tum-vision/lsd_slam.git lsd_slam
$ rosmake lsd_slam
作業ディレクトリ下に入ってgithubからcloneしてrosmakeすればいいらしい.
コマンドをコピペするだけでSLAMができるのだから便利な世の中ですよ.
参考リンク
qiita.com
ほんとうにお世話になっているサイト様.
例によってほとんどコピペなのだけど….
作業中になんかCMakeエラーを起こす.
CMake Error at /opt/ros/indigo/share/dynamic_reconfigure/cmake/cfgbuild.cmake:78 (string):
string sub-command REPLACE requires at least four arguments.
Call Stack (most recent call first):
/opt/ros/indigo/share/dynamic_reconfigure/cmake/cfgbuild.cmake:99 (gencfg_cpp)
CMakeLists.txt:29 (include)
ググってみる.エラーの原因はプログラムにあるらしい.
$ sudo vi /opt/ros/indigo/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator.py
check_name(name)
# check_description(description)
self.gen.fill_type(newparam)
self.gen.check_type_fill_default(newparam, 'default', self.gen.defval[paramtype])
self.gen.check_type_fill_default(newparam, 'max', self.gen.maxval[paramtype])
上の144行目check_description(description)をコメントアウト(か削除)すればいいらしい.
ついでにAR.Droneを操作できるパッケージも追加しよう.
git プロトコルを設定.
$ git config --global url."https://".insteadOf git://
たぶんgitのproxy設定時に同時にやるべきだった.ここでかなりつまずいていた.
$ git config --global http.proxy http://proxy:port
$ git config --global https.proxy http://proxy:port
gitconfigの確認は以下のコマンドでできる.
$ git config --list
今回はドライバーのardrone_autonomyとGUIのtum_ardroneを導入する.
$ cd ~/ros_catkin_ws/indigo/src
$ git clone https://github.com/AutonomyLab/ardrone_autonomy.git -b indigo-devel
$ cd ..
$ rosdep install --from-paths src -i
$ catkin_make
$ cd ~/ros_catkin_ws/indigo/src
$ git clone https://github.com/tum-vision/tum_ardrone.git -b indigo-devel
$ cd ..
$ source devel/setup.bash
$ rosdep install tum_ardrone
$ catkin_make
ついでにps3コントローラーのドライバーも入れておく.
$ sudo -E apt-add-repository ppa:falk-t-j/qtsixa
$ sudo apt-get update
$ sudo apt-get install sixad
プロキシくぐれなかったら「-E」を付けてください….
参考リンク
www.ntt-tx.co.jp
分かりやすいAR.Drone×ROSの解説サイト.まさかのNTTさん.
qiita.com
シミュレータだけど実物を飛ばすのにも役に立ちました.
次回はラズパイにUbuntu16.04を入れる試行錯誤の話.
質問がありましたらコメントまたはTwitterにてお願いします.
Ubuntu 14.04 に ROS indigo を入れる話 [前編]
今更感がすごいけど,様々なトラブルに見舞われてどうにかこうにか成功したので備忘録として載せておく.ちなみに1年ほど前の話.
【OS】Ubuntu 14.04 LTS 64bit
【ROS】ROS indigo
【Proxy】環境下です.
以下,コマンドの列挙.
aptのプロキシ設定
$ export https_proxy="http://proxy.server:Port/"
$ export http_proxy="http://proxy.server:Port/"
$ export ftp_proxy="http://proxy.server:Port/"
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
wget のプロキシ設定
$ sudo vi /etc/wgetrc
# You can set the default proxies for Wget to use for http and ftp.
# They will override the value in the environment.
http_proxy = http://proxy.server:Port/ #外す
ftp_proxy = http://proxy.server:Port/ #外す
(viの使い方「i」で編集モード,「Esc」でコマンドモードに戻り「:wq」Enterで保存して終了)
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo -E apt-key add -
$ sudo -E apt-get update
$ sudo -E apt-get install ros-indigo-desktop-full
$ sudo reboot
※どうしても rosdep init がうまくいかなくて再起動したらうまくいきました(?)
$ sudo -E rosdep init
$ rosdep update
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc$ source ~/.bashrc
$ source /opt/ros/indigo/setup.bash
$ sudo -E apt-get install python-rosinstall
$ roscd
$ roscore
これでROSが動けば完了.
ROSのアンインストールは以下のコマンドで.
$ sudo apt-get purge ros-*
$ sudo apt-get purge python-ros*
$ sudo apt-get autoremove
参考リンク
ROS 使い方メモ --1.ROSのインストール
Proxy環境がどうもすんなりいかなかったのですが,一つずつ設定していって再起動すればどうにかなりました.
sudo の後に -E を付けるとだいたい解決するようです.
qiita.com
たぶんubuntu16.04もほとんど同じ流れでいけるかと.