なにかいいこと語ればいいね - はてブ出張所 -

▼元GoogleBlogger「なにかいいこと語ればいいね」(現在非公開) のはてなブログ出張所▼こちらにはプログラム・IT関連の記事をまとめています▼修了後も頑張って更新したい▼

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をコメントアウト

.xmlコメントアウトはで可能


$ 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

qiita.com


カメラキャリブレーション他ではお世話になった参考文献
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.com

とりあえず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接続.途中ディスプレイが必要になりますが.


ssh key を表示.公開鍵暗号方式とかいうやつです.

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

この2行は~/.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を初期化
パーティションが未割当の状態

ARM/RaspberryPi - Ubuntu Wiki

から
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でやっていきます…(´・ω・`)


次回はこいつにもROSを入れる.あとWi-Fi設定.
質問がありましたらコメントまたはTwitterにてお願いします.

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

blog.goo.ne.jp


たぶんubuntu16.04もほとんど同じ流れでいけるかと.


次回は作業ディレクトリとパッケージの追加.
質問がありましたらコメントまたはTwitterにてお願いします.