cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

自分用読むべき論文メモ 2017年11月版

脳の基本単位回路を発見 | 理化学研究所
脳の基本単位の物理的な構造が分かったとのことなので、機能解析が進めば、NNのようなモデルでの複製も一気に進むのかな?

Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin, ``"Why Should I Trust You?": Explaining the Prediction of Any Classifier'', arXiv:1602.04938v3 [cs.LG] 9 Aug 2016.
機械学習の結果について、何故その答えが示されたかを、簡単な単語レベルでの要素のラベルの羅列を示すことで説明できるようにして、学習結果の良し悪しを判断できるようにしようとした話。超重要。

Huu Le, Tat-Jun Chin, ``Deterministic Approximate Methods for Maximum Consensus Robust Fitting,'' arXiv:1710.10003v1 [cs.CV] 27 Oct 2017.
ロバストな対応点探索。Matlabのコード有り。

www.blog.google
googleの音のVR用SDK

「非まじめ」のすすめ (〔正〕) (講談社文庫)

「非まじめ」のすすめ (〔正〕) (講談社文庫)

「非まじめ」のすすめ (続) (講談社文庫)

「非まじめ」のすすめ (続) (講談社文庫)

ロボコン創始者の森先生の本。

Kai Arulkumaran, Marc Peter Deisenroth, Miles Brundage, Anil Anthony Bharath, ``A Brief Survey of Deep Reinforcement Learning,’’ arXiv:1708.05866 [cs.LG]
深層強化学習サーベイ

RNN Noise: Learning Noise Suppression
github.com
RNNを使った音声データのノイズ低減。CのサンプルコードとWEBデモ有り。

最適制御の実用設計法―ILQ法による制御系設計と応用事例―

最適制御の実用設計法―ILQ法による制御系設計と応用事例―

実践的な最適制御設計のための手法の一つがILQ。恥ずかしながら知らなかったので、こっそり勉強。

N. Kimura, K. Fujimoto, T. Moriya, ``Real-Time Updating of 2D Map for Autonomous Robot Locomotion Based on Distinction Between Static and Semi-Static Objects,'' Advanced Robotics, Vol. 26, 2012 - Issue 11-12
実用的な2DSLAMの地図更新手法。日立。

Dynamical Movement Primitivesを理解したいけど、よく分からないのでとりあえず資料

優しさ順

studywolf.wordpress.com
離散的なdmpについて、実践的で導入的な解説。ソースコード有り。

www.youtube.com
ステファンシャールによる講義。
https://infoscience.epfl.ch/record/185437/files/neco_a_00393.pdf
本山の論文。
www-clmc.usc.edu
謹製のmatlabコード。

www.youtube.com
dmp - ROS Wiki
ROS用pythonソースコードがある

github.com
C++ソースコード

何も分からぬまま動かしてみたdemoプログラムの実行結果
demoDMP
Fig.1:
f:id:cvl-robot:20171115175615p:plain
Fig.2:
f:id:cvl-robot:20171115175629p:plain

demoDmpChangeGoal
Fig.1:
f:id:cvl-robot:20171115175805p:plain
Fig.2:
f:id:cvl-robot:20171115175821p:plain

demoDmpContextual
Fig.1:
f:id:cvl-robot:20171115175902p:plain
Fig.2:
f:id:cvl-robot:20171115175913p:plain
Fig.3:
f:id:cvl-robot:20171115175926p:plain

demoDmpContextualGoal
Fig.1:
f:id:cvl-robot:20171115175955p:plain
Fig.2:
f:id:cvl-robot:20171115180012p:plain

http://www.igi.tugraz.at/lehre/SeminarC/WS09/neumann_C_2009.pdf
http://genesis.naist.jp/~takam-m/Matsubara_IROS2010.pdf
http://www.reflexxes.ws/iros2012ws/Paper_14.pdf
https://biorob.epfl.ch/cms/page-36366.html

自分用読むべき論文メモ 2017年10月版

A. Rajeswaran, V. Kumar, A. Gupta, J. Schulman, ``Leaning Complex Dexterous Manipulation with Deep Reinforcement Learning and Demonstrations,'' arXiv:1709.10087v1 [cs.LG] 28 Sep 2017.
深層強化学習を使って教示による多指ハンドの学習

C. Funk, Y. Liu, ``Beyond Planar Symmetry: Modeling human perception of reflection and rotation symmetries in the wild,'' arXiv:1704.03568 [cs.CV] 28 Aug 2017.
深層学習を使ってアフィン変換の掛かった入力画像からの対称軸の検出

W. Ke, J. Chen, J. Jiao, G. Zhao, Q. Ye, ``SRN: Side-output Residual Network for Object Symmetry Detection in the Wild,'' arXiv:1703.02243 [cs.CV]
GitHub - KevinKecc/SRN: Side-output Residual Network for Object Symmetry Detection in the Wild
RNNを使ってスケルトンっぽい対称軸の検出

Kato D., Baba M., Sasaki KS., Ohzawa I, ``Effects of generalized pooling on binocular disparity selectivity of neurons in the early visual cortex.,'' Philos Trans R Soc Lond B Biol Sci. 2016 Jun 19;371(1697). pii: 20150266. doi: 10.1098/rstb.2015.0266.
http://www.fbs.osaka-u.ac.jp/jpn/events/achievement/kato-ohzawa-20160607/
猫の脳を調べたら、立体視は視差だけでなくwaveletから求められる階層的に表現された勾配情報も使っていたことが分かった

T. Hasegawa, M. Ambai, K. Ishikawa, G. Koutaki, Y. Yamauchi, T. Yamashita, H. Fujiyoshi, ``Multiple-hypothesis affine region estimation with anisotropic LoG filters,'' DOI: 10.1109/ICCV.2015.74.
http://vision.cs.chubu.ac.jp/~hf/Denso_AI_Seminar_2017.pdf
アフィン変換に不変な特徴量の検出を、異方性LoGフィルタをずらっと並べて主成分分析して90%の寄与率のものを使って作るようにしたら、事前計算できるし、ぐっと計算コストが減って性能が良くなったよ。なぜかアフィン領域推定のみでなく、等方性スケール推定や特徴点検出の性能も上がったよ。

猫の脳のwaveletを異方性LoGの行列圧縮版に置き換える、もしくは、waveletを同様に主成分分析風にPre計算するように考えても面白いかも。

qiita.com
データの形そのものをトポロジーの問題として解いてみる

ジェフ・ホーキンス、サンドラ・ブレイクスリー、伊藤文英訳:考える脳考えるコンピューター、ランダムハウス講談社、2005年

考える脳 考えるコンピューター

考える脳 考えるコンピューター

ディープラーニング流行はるか以前の、ディープラーニング類似の計算モデル考察の読み物。なんと一時期世の中を席巻したPalmを作った人の本。まだ、実現されてない有用なアイデアがたくさんある気がする。絶版とのことです。

V. Ila, L. Polok, M. Solony, K. Istenic, ''Fast Incremental Bundle Adjustment with Covariance Recovery,'' Inter. Conf. on 3DVision(3DV2017), 2017.
www.youtube.com
かなり高速なバンドルアジャストメントの計算法

www.youtube.com
PFNの。arXiv待ち。

J. Bian, W.-Y. Lin, Y. Matsushita, S.-K. Yeung, T.-D. Nguyen, M.-M. Cheng, ``GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence,'' In Proc. of Computer Vision and Pattern Recognition (CVPR), 2017.
GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence – 南开大学媒体计算实验室
www.youtube.com
速くて頑健な特徴点対応付け。openCV対応ソースコード有り。

IPF方式ステレオ - オートモーティブ分野向け画像センシング技術の開発 - Panasonic
https://www.panasonic.com/jp/corporate/technology-design/ptj/pdf/v5703/p0208.pdf
原理的にPOCと同等の精度で、簡単なので圧倒的に高速。

ステファンシャールのDynamic Movement Primitives
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.142.3886&rep=rep1&type=pdf
高次のロボット動作を強化学習に掛けたいとき必須

ロボティクス・コンピュータビジョン・VR/MR・機械学習の新鮮な情報元リンク集 2017年10月版

[適当に編集中]
今のところ順番に意味はありません。後で整理するかも。良いページがあったら教えてもらえると、ありがたいです。

Seamless-Virtual Reality News

shiropen.com

Mogura VR

www.moguravr.com

中国語のニュースサイト

www.leiphone.com
中国語でのまとめ。言葉はわからないけど、このサイトは、業界界隈の世界中のニュースが充実している。日本でも、一か所に情報を集約したこのようなニュースサイトが必要なのではないか?

jstの中国の科学技術ポータル

www.spc.jst.go.jp

日経ロボティクス

超高額な雑誌
techon.nikkeibp.co.jp

マイナビニュース・テクノロジー

news.mynavi.jp

機械の目が見たセカイ -コンピュータビジョンがつくるミライ

news.mynavi.jp

コンピュータビジョンのセカイ - 今そこにあるミライ

ちょっと古い2015
news.mynavi.jp

CNET Japan ロボット

japan.cnet.com

My Enigma

移動ロボット、自動運転関連、とても勉強になる
myenigma.hatenablog.com

Wired

wired.jp

Gizmode

老舗だけど、ステマが気になる
www.gizmodo.jp

GIGAZINE

老舗だけど、ステマが気になる
gigazine.net

VR inside

vrinside.jp

IoT today

iottoday.jp

openFrameworks addons

ofxaddons.com

Preffered Research

https://research.preferred.jp/
PFNのブログ
twitter.com

Morpho 技術情報

技術情報 | モルフォ

ICCV2017関連

www.slideshare.net
次回のECCVは2018年。

Siggraph2017関連

www.gizmodo.jp

ICRA2017関連

www.icra2017.org

3DV2017関連

www.leiphone.com

cvpaperchallenge

www.slideshare.net

openCV備忘録

iwaki2009.blogspot.jp


ここから、英語

Computer Vision News - RSIP VISION

www.rsipvision.com

deep ideas

基礎的
http://www.deepideas.net/

ルンバのワイヤレス制御用XBeeインターフェースを比較的綺麗に作りたいときのメモ

先日、ルンバのROI(ルンバオープンインターフェース)用USBシリアル変換ケーブルを綺麗に作りました、が、移動ロボットにケーブルがあると何かと不便です。
なので、今回はこれをその辺に転がっていたXbeeを使って無線化したいと思います。

1.購入する部品

品目メーカー・型番購入先参考価格
XBee(Coordinator用)digi・XBee S2Cなど秋月電子通商2,500円
XBee(Router用)digi・XBee S2Cなど秋月電子通商2,500円
XBeeUSB変換基板SparkFun・XBee Explorer USBスイッチサイエンス3,243円
XBee5Vマイコン用変換基板SparkFun・XBeeエクスプローラ5Vマイコン用スイッチサイエンス1,243円
コネクタminiDIN7pinオス千石電商155円
スーパー3端子レギュレータ5V500mARECOM・R-78E5.0-0.5秋月電子通商350円
小さなプラケース透明な奴秋月電子通商50円
AWG28ぐらいの細さで5cmぐらいの長さのケーブルが色違いで4本必要です。また、ビニールテープか熱収縮チューブの細い奴が2cm長ぐらい必要です。

2.はんだ付け

ルンバに取り付けるアダプタを先に作ります。
まず、ケースの加工をします。透明ケースの左肩部分にドリルで7mm程度の穴をあけます。保護のためにあらかじめ、セロテープなどを貼っておき、細いドリルから始めてじょじょに穴を広げていきます。とりあえずリーマの先が入るようになればOKです。miniDIN7ピンを取り出し、端子部分の部品だけを取り出します。箱の外側から、開けた穴に端子を合わせてぴったりハマり込むまでリーマで穴を広げます。

次に、部品を接続していきます。配線図は次の通り。
f:id:cvl-robot:20170830172555p:plain
スーパー三端子レギュレータの1番ピン(Vin)に赤色のケーブルを直にはんだ付けします。はんだ付け部分には熱収縮チューブなどをかぶせて絶縁してください。
スーパー三端子レギュレータの2番ピン(GND)、3番ピン(Vout)をXBeeエクスプローラ5Vマイコン用基板のGNDと5Vのスルーホールへはんだづけします。運良く基板上でピンは隣り合って並んでいますので、3端子レギュレータの端子を少し折り曲げてやれば綺麗に収まります。
あとはコネクタと基板の配線です。ケーブルは、ケースに開けた穴を通してからminiDIN端子にはんだ付けしてください。
a.miniDINの1番(または2番)の電源ピンと三端子レギュレータの1番ピンに接続した赤いケーブルをつなぎます。ここはルンバのバッテリーの電圧(14~16Vぐらい)が出ていますので、他に接触しないよう気を付けてください。
b.miniDINの6番(または7番)のGNDピンとXBeeエクスプローラ5Vマイコン用のGNDのスルーホールを黒いケーブルで接続します。
c.miniDINの4番のTxD端子をXBeeエクスプローラ5Vマイコン用のDINに繋ぎます。
d.miniDINの3番のRxD端子をXBeeエクスプローラ5Vマイコン用のDOUTに繋ぎます。
c,dについては、TxDが入力DIN、RxDが出力DOUTと互い違いにつながっていることに留意してください。

完成写真はこんな感じ。
f:id:cvl-robot:20170830173524p:plain
スーパー三端子レギュレータのこの品番のものはコンデンサを内蔵しているそうなので、外付け部品は不要です。
秋月の透明ケースは、ちょっと大きすぎたので100円ショップなどで、もっと収まりの良いケースを探した方が良さそうです。XBeeの基板はアンテナが見えるように表側に配置してください。

PC側は特に何もする必要がありません。USBケーブルでPCに接続してください。
たまたまですが、スーパー三端子レギュレータが入っていた透明のケースは、XBeeエクスプローラUSBの基板の幅にぴったり合います。
f:id:cvl-robot:20170830173917p:plain

3.Xbeeの設定

特に難しい設定は必要なく、透過モード(AT)で2つを繋げば良いようです。

取り付け先FirmwareIDDHDLBD
PC側ZigBee Coordinator AT[上下同じもの]例.631[RoombaXBeeのSH][RoombaXBeeのSL]115200
RoombaZigBee Router AT[上下同じもの]例.631[PC側XBeeのSH][PC側XBeeのSL]115200
ただ、LEDをBlinkさせようと高速で通信しようとするとエラーで落ちるので、設定に不備があるかも知れません。もっと詳しい人のページを調べてください。

4.テスト

テストは、http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Tethered_Driving_2.pdf
のアプリを使って、有線と同じように確認することができます。
f:id:cvl-robot:20170830175128p:plain

今日のオーディオアンプ

DDFA方式で有名なDENON PMA-50の後継機PMA-60が発表になりましたね。欲しいです。

ルンバの制御用USBシリアルケーブルを綺麗に作りたいときのメモ

一年戦争の時のジオン軍よろしく、移動ロボットを闇雲に量産しようという計画を行っています。そういえば、研究室に転がっている(掃除用)ルンバも動かせるはずだと思いだし、ケーブルを作ってテストしてみました。

1.購入する部品

品目メーカー・型番購入先参考価格
USBシリアルケーブル(5V)FTDI・TTL-232R-5V秋月電子通商1950円
コネクタminiDIN7pinオス千石電商210円

2.はんだ付け

FTDIのUSBシリアル変換ケーブルのピン配置は、次のリンクにあります。
http://akizukidenshi.com/download/ds/ftdi/TTL-232R_pin.pdf
ルンバのオープンインターフェースのピン配置は、次のリンクの3ページ目に有ります。
http://www.irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec.pdf
しかし、上下・裏表どっちの方向から見ているのか分かりにくいので、[1]のページで中盤で紹介されている写真を参考にします。
清書しなおすとこんな感じ。
f:id:cvl-robot:20170828170508p:plain
はんだ付けが必要なのはTxD, RxD, GNDの3本だけ。TxD, RxDはクロスするように、TxDにはRxD、RxDにはTxDを繋ぐよう互い違いに接続します。
GNDピンは6番,7番どちらでも構いません。両方繋いでも構いません。
Vpwrは、大した電流を引っ張れないので使わない方が賢明だと思います。
また、起動時のシリアルの通信速度115200bpsから19200bpsに変更するためにはBRC端子を使う必要がありますが、このケーブルでは変更できないのでdefultの115200bps固定になります。
あと、

超重要:はんだ付けの前に、miniDINケーブルのカバーをUSBシリアルケーブルに通しておくことを忘れないように!

完成品はこんな感じ。3.3V-5Vレベルシフトの回路等が不要なので、両端以外にデッパリの無い綺麗な仕上がりになります。
f:id:cvl-robot:20170828172421p:plain

3.テスト

ルンバの動かし方については、ROSのノードとして動かす方法や、自分で作ってみよう系の記事が山のように出てくるのでそちらを参考にしてもらうことにして、ここでは簡単に配線が正しく作れたかどうかを確認する方法を記します。
[2]の電通大の記事を読むと、Windows用アプリケーションが公式に配られているとあります。
http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Tethered_Driving_2.pdf
これをダウンロードして実行すれば良さそうです。
f:id:cvl-robot:20170828171619p:plain

ルンバのカバーのツメを丁寧にはがして外してテストします。
加工してしまうと保障が受けられなくなってしまうかもしれないので、以下は自分の責任で行ってください。
カバーのエッジとバリで指を切らないように注意してください。特に横に撫でるように指を動かすと、ケガします。
f:id:cvl-robot:20170828172738p:plain
動いたー。

取り外したカバーのコネクタ部分に、ドリルとリーマを使ってコネクタが挿せる大きさの穴をあけて、カバーを基に戻して完成。
f:id:cvl-robot:20170828173219p:plain
綺麗にできました。

テストに使用したルンバは、ビックカメラモデルのRoomba631です。

ルンバ631 (量販店モデル)

ルンバ631 (量販店モデル)

FPFH特徴量をbinaryファイルに出力

FastGlobalRegistrationのテストデータを自分で作りたいと思います。
github.com
PCLに慣れている人ならば問題ないのでしょうが、上記サイトにはFPFH特徴量を出力するサンプルコードの抜粋しか載っていません。
欠けている部分を他のプログラムから探してきて、動くようにしたいと思います。

1.FPFH特徴量のサンプルプログラム

PCD形式のデータからFPFH特徴量を計算するサンプルプログラムを探すと、下記リンクに奇麗なコードがありました。
PCL/OpenNI tutorial 4: 3D object recognition (descriptors) - robotica.unileon.es

2.PCL1.8のインストール

下記サイトで提供してくださっているinstallerを使って、PCLをインストールします。インストーラに素直に従えば大丈夫です。
Point Cloud Library 1.8.0 has been released – Summary?Blog
3rd partyフォルダの下にあるopenNIのインストールも行ってください。

3.CMakeLists.txtの準備

適当にプロジェクト用のフォルダを作ってください。ここでは、

E://workspace/pcl/FPFHbinary

とします。このフォルダにCMakeLists.txtというファイルを作り、下記の例のようにします。

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(FPFH_BINARY)
set(PCL_DIR "E:/Program Files/PCL 1.8.0/cmake/PCLConfig.cmake")
find_package(PCL 1.7 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(fpfh_binary fpfh_binary.cpp)
target_link_libraries(fpfh_binary ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} ${PCL_FEATURES_LIBRARIES} ${PCL_SEARCH_LIBRARIES})

適当にプロジェクト名、およびファイル名はfpfh_binaryと命名することにします。
target_link_librariesに、common, io, features, searchを追加します。

4.fpfh_binary.cppの準備

githubのサンプルコードと、チュートリアルのサンプルコードを合体させて動くようにします。
githubの方はPointNormal型を入力データとしているので、チュートリアルの方のPointXYZとNormalを別々に扱う形式に変更します。

#include <pcl/io/pcd_io.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/fpfh_omp.h>

int
main(int argc, char** argv)
{
	// Object for storing the point cloud.
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	// Object for storing the normals.
	pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
	// Object for storing the FPFH descriptors for each point.
	// pcl::PointCloud<pcl::FPFHSignature33>::Ptr descriptors(new pcl::PointCloud<pcl::FPFHSignature33>());

	// Read a PCD file from disk.
	if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) != 0)
	{
		return -1;
	}

	// Note: you would usually perform downsampling now. It has been omitted here
	// for simplicity, but be aware that computation can take a long time.

	// Estimate the normals.
	pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation;
	normalEstimation.setInputCloud(cloud);
	normalEstimation.setRadiusSearch(0.03);
	pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);
	normalEstimation.setSearchMethod(kdtree);
	normalEstimation.compute(*normals);

	// Assume a point cloud with normal is given as
	// pcl::PointCloud<pcl::PointNormal>::Ptr object

	pcl::FPFHEstimationOMP<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fest;
	pcl::PointCloud<pcl::FPFHSignature33>::Ptr object_features(new pcl::PointCloud<pcl::FPFHSignature33>());
	fest.setRadiusSearch(0.03); 
	fest.setInputCloud(cloud);
	fest.setInputNormals(normals);
	fest.compute(*object_features);

	// FILE* fid = fopen("features.bin", "wb");
	FILE* fid = fopen(argv[2], "wb");
	int nV = cloud->size(), nDim = 33;
	fwrite(&nV, sizeof(int), 1, fid);
	fwrite(&nDim, sizeof(int), 1, fid);
	for (int v = 0; v < nV; v++) {
		const pcl::PointXYZ &pt = cloud->points[v];
		float xyz[3] = { pt.x, pt.y, pt.z };
		fwrite(xyz, sizeof(float), 3, fid);
		const pcl::FPFHSignature33 &feature = object_features->points[v];
		fwrite(feature.histogram, sizeof(float), 33, fid);
	}
	fclose(fid);
}

5. テストデータの準備

適当にpcdデータを用意します。FPFH特徴量の計算は比較的速いのですが、FastGlobalRegistrationでは大きなデータはとんでもなく長い時間がかかるので、スタンフォードバニー辺りでテストしておくと良いです。
sourceforge.net

FPFHの出力は、コマンドプロンプトで次の例のようにします。第一引数が入力pcdで、第二引数が出力です。

fpfh_binary.exe scan_000.pcd scan_000.bin

ファイルサイズは入力の100倍ぐらいの大きさになります。

FastGlobalRegistrationのMatlabのMexファイルのコンパイル

Matlabコマンドプロンプトから次のオプションを付けてコンパイルしてMEXファイルを作ります。

mex read_features.cpp -I../External/Eigen -I../External
mex fast_global_registration.cpp ../FastGlobalRegistration/app.cpp -I../External/Eigen -I../External -I../FastGlobalRegistration

f:id:cvl-robot:20170809161351p:plain

今日のアニメ化待ち漫画

邪神ちゃんドロップキック、アニメになったら絶対かわいい。