オドメトリ

ちょっと更新が滞ってしまいました!

で,何をやっているかと言いますと,先日のつくば市役所のデータを解析してます.LidarデータからGmappingを使ってMAP生成を試みているんですが,まずは"1st thing, 1st"ということで,オドメトリの調整をしてます.今回,i-Cart Middleを採用したことで,オドメトリの計算方法が2つになりました.

1. ヨーレートセンサーの値を積分して,ヨー角計算

以前から使用しているInvenSenseのMPU9150をArduinoで繋いで使用してます.i-Cart Middleは車体が安定しているせいか,かなり綺麗なオドメトリができました.
f:id:rkoichi2001:20180901184214p:plain

2. 左右タイヤの進行距離差分をもとにヨー角計算

車体の公称値は下記のようになるんですが,

タイヤ直径:30cm
ホイールベース:45cm

タイヤからヨー角を求めるの,めっちゃシビアですね...結局何回か微調整して下記の値に落ち着いたんですが,それでも確認走行コース一周するとどこかにすっ飛んでいってしまいます...

タイヤ直径(右):30cm
タイヤ直径(左):29.76cm
ホイールベース:45cm

f:id:rkoichi2001:20180901224531p:plain

ということで,ヨーレートセンサーを使ったオドメトリを採用です.

確認走行区間データ取得@つくば市役所

ということで,お盆休みの最低目標だった「つくばチャレンジのコースでのデータ取り」をなんとか完了しました(゚Д゚)ノ

結局モータドライバをてなづけたり,ROSのスクリプトを準備してたら朝方までかかってしまい,,,11時くらいの出発になってしまいましたが,ペーパドライバのへっぽこ運転で首都高を超えてつくばまで行ってきました.ロボットも大型化したこともあり,車に乗せられるか心配してたんですが,近くのTimes Car RentalでダイハツのWakeを借りられることを発見!さすが、「あんちゃん,ここWakeだよ!」というだけあって,すっぽりすべてが収まりました.

f:id:rkoichi2001:20180819225815j:plain

で,つくば市役所についたんですが,さすがに何もない日に一人でロボット動かすのは恥ずかしいですね...日曜日ということもあってほとんど無人かと思ったんですが,空いている窓口もあって,割と人の出入りもありました...案の定、「なにやってるんですか?」とどこかの婦人に声を掛けられ...「げ,まさか,怒られる?」と思ってビビった挙句,「筑波大学4年生です!卒業研究のためにデータ取得してます!」って言いかけたんですが(爆),いくら不老不死の自分といえども,22歳設定はもう無理や...と思い,「サラリーマンなんですが,つくばチャレンジに出てまして,くぁwせdrftgyふじこlp...」と正直に自分語りしました(笑)

肝心のデータ取得ですが,9/15の第三回試験走行会での確認走行完了を目標に,確認走行区間のデータ取りをしました.(走行日以外の動力走行は禁止されていたので,手押しでのデータ取得を実施しました.きちんと守りましたよ~.)

明日からLidarデータ使ってMap作成に入りたいと思います.詳しくはまたアップします!

f:id:rkoichi2001:20180819231906j:plain

Hokuyo Lidar "UTM-30LX-EW" の ROS への接続方法

ということで,本日会場入りしてデータ取得は間に合わず...明日行きます!

出発に向けていろいろと準備をしているんですが,ついに北陽電機さんにお借りした Lidar が接続完了しました!半年も前にお貸し頂いたのに遅くなりました...Ethernet Type の使い方を一通り書いてくれてある記事が思いのほか少なかったのでまとめておきます.

0. urg_node のインストール

urg_node という ROSのパッケージが提供されています.こいつをダウンロードします.

$ sudo apt-get install ros-kinetic-urg-node

で,このパッケージには,
1. urg を動かすためのドライバ,ROSのラッパー
2. urg の IP アドレスを変更するための Python スクリプト
が含まれています.Default の IP アドレスから変更する必要がある場合,2 のスクリプトを実行してセンサーのIPを変更します.

1. PINGで疎通確認

UTM-30LX-EWの初期 IP アドレスですが,"192.168.0.10" として設定されています.Lidar を PC に接続して ping をうつと,下記のように Reply が帰ってきます.
(自分のPCのIPを同じネットワークにしてあげないといけないので,適当に192.168.0.100とかにします.)

$ ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=0.129 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=0.098 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=128 time=0.140 ms

で,センサーのIPを変更したい場合,自分のPCのIPアドレスを同じネットワークのものに変更してあげる必要があります.

2. IPアドレス変更

で,仮にロボットのローカルネットワークを下記のようにしたいとします.
172.16.x.x

この場合,下記のコマンドでセンサのIPアドレスを変更できます.

rosrun urg_node set_urg_ip.py --nm 255.255.255.0 --ip 192.168.0.10 172.16.0.10 172.16.0.254

右から二番目が変更したいIPアドレス,右端がデフォルトゲートウェイIPアドレスです.ここまで完了したら,自分のPCのIPアドレスを172.16.x.xに変更します.

3. urg_nodeの起動とrvizでの可視化.

ここまで来たらあとはnodeを起動して,rvizで可視化するだけです.

urg_nodeの起動

rosrun urg_node urg_node _ip_address:="172.16.0.10"

rvizの起動

rosrun rviz rviz

で,rvizで/LaserScanを可視化し,Fixed Frame を laser にしてあげれば,無事 Lidar が動いているのがわかります.

f:id:rkoichi2001:20180818164227p:plain

以上,メモメモでした.

バイパスコンデンサ・・・がない( ;∀;)

お盆休みもあと3日...ということで,だいぶ気分もブルーになりつつあります.あ~.もう働きたくないな~.

という感じなんですが,せめてお盆休み中に確認走行コースのデータくらいは取っておきたいという思いもあり,土曜につくばチャレンジ会場へデータを取りに行こうとしてます.追い込んで準備してたんですが,一つ足りない部品を発見...そうです.タイトルの通り所望のコンデンサが一つ足りません...抵抗とかコンデンサとか,電子工作するときに多めにいろんな種類のもの買ってたんで,ちょうどいいものがあるかな~と淡い期待を抱いてたんですが,

手持ちのコンデンサ
f:id:rkoichi2001:20180817041236j:plain

手持ちのコンデンサは容量が1000μF, 25Vだったんですけど,ほしいものは1000μF, 50Vでした....この部品,一つ100円くらいなんですが,Amazonで買うと明日の夜まで届かず...ということで,朝一で秋葉原まで行ってきます...うーん.なかなか進まんなあ.

OpenCVビルドの高速化

OpenCV3.3.1を使うことにしましたが,ソースのビルドをします.OpenCVのビルドをすることが仕事でも結構あるんですが,これって本当に時間かかります.ただ,時間を食っているところって大半がCudaのビルドなんです.で,オプションを何も指定しなければ,ほぼすべてのGPUに対してビルドを実行してしまいます.自分の持っているHWでしかOpenCVを使わないなら,PCのGPUで使える設定のビルドだけしてやればOKです.下記のようにCMakeのコンフィグ生成時点で指定してあげればOKです.

1. 自分のGPUのCompute Capabilityを調べる.

自分の場合はGTX1070なので,下記の表からCompute Capability6.1だとわかります.
developer.nvidia.com

2. CMakeのコンフィグを下記のように設定します.
cmake -D OPENCV_EXTRA_MODULES_PATH=/hoge/hoge/opencv331/opencv_contrib/modules -D CMAKE_INSTALL_PREFIX=/hoge/hoge/opencv331/install -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=ON -D WITH_GSTREAMER=ON -D WITH_OPENGL=ON -D BUILD_EXAMPLE=OFF -D CUDA_ARCH_BIN="6.1" -D CUDA_ARCH_PTX="6.1" -D WITH_CUBLAS=ON  ../opencv

ここで指定している”CUDA_ARCH_BIN”, "CUDA_ARCH_PTX"という変数がポイントで,指定したアーキテクチャにだけOpenCVをビルドします.あとはマルチコアをふんだんに活かして,下記のコマンドでビルドすれば,10分以内には終わるかと!

make -j32

以上,メモメモでした.

環境整備

約半年ぶりにJetson Tx2,ZEDを使います.最新のツールキットを落として使おうと思っているんですが,昨年のつくばチャレンジではTx2のOpenCVのバージョンとホストPCのOpenCVのバージョンが合わなかったりして苦労したので,合わせておきます.

JetsonTx2

Jetpack 3.2.1を使います.
developer.nvidia.com

紐付いているライブラリは,,,
OpenCV : 3.3.1
Cuda : 9.0
cuDNN : 7.0.5
TensorRT : 3.0GA

ZED

For Linux PC & JetsonTx2
ZED SDK v2.5.1 を使います.
www.stereolabs.com

紐付いているライブラリは,,,
Jetpack : 3.2
Cuda : 9.0

Cuda9.0

developer.nvidia.com

ということで,ベースのソフト構成は,,,,

Ubuntu 16.04
ROS Kinetic
OpenCV 3.3.1
Cuda 9.0

で決定です!cuDNNとかまで使えるレベルになればうれしいですが..

Tsukuba Exploration Rover2 HW完成!

ということで,想定したよりかなり時間がかかってしまいましたが,HWが完成しました!明日からはSW制作に取り掛かります.実際に試走会に参加するにあたって,機械部分の露出があると好ましくないので,ロボットの”ガワ”も一気に作ってしまいました.防水のことも考えてゴムとかはったりしてみたんですが,この辺りはちょっと作りこみが甘くてガバガバになってしまった(笑)ので,実際の雨天走行時に対処が必要そうです.

ちなみに,,,なんでTsukuba Exploration Roverって名付けたのかといいますと,NASAのジェット推進研究所が「火星探査のロボットを作る!」っていうプロジェクトを立ち上げて,それはそれは夢のあるプロジェクトだったんですけど,この時のロボットの名前が「Mars Exploration Rover」だったんですよね.単純にこれをパクりました.('ω')ノ 毎回ロボット紹介の時に司会の方が噛むのを見て申し訳ない気持ちになるんですが(笑),今年もこの名前で行こうかと.
Mars Exploration Rover - Wikipedia

横から
f:id:rkoichi2001:20180815021203j:plain

前から
f:id:rkoichi2001:20180815021324j:plain

後ろから
f:id:rkoichi2001:20180815021351j:plain

筐体内部の様子(前のエントリで扱ったバッテリもギリギリ収まってます!)
f:id:rkoichi2001:20180815021424j:plain

ひとまずデータをとれる状態にして,お盆休みが終わるまでに会場に行ってデータ取得をするとこまでもっていくのが目標です (゚Д゚)ノ