cvl-robot's diary

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

自分用読むべき論文メモ 2019年6月版

しばらく論文読んでる暇がなかったので、面白かったTwitterの記事を中心に。(いつも、ほぼそうですが。。。)



研究者注目の的、タコ。


進化が明示的にコントロールされるようになったら、ますますやばい。


基本ツール


[メモ]Blue Noiseとリアルタイムレイトレーシングshikihuiku.wordpress.com


カメラキャリブレーションはとても大事。


農業ロボット関係


Choreonid関係


戦車型なのが日本での教育に向いてない。実銃やレーザーに置き換えるも簡単だろうから怖いし。


よくわかんないけど。

myenigma.hatenablog.com


低価格ってどのくらいなんですかね?



新しい情報がなかなか出てこない新型LeapMotion

NVIDIA Jetson Nanoで OpenPoseをビルドする方法、動画から人体の骨格検出 (NVIDIA Jetson Nanoの CUDAパワーで OpenPoseを使って動画から人体の骨格検出)
でべ on Twitter: "レビュー記事書きました!Jetson Nanoですが、ラズパイも少しフォローしてます。 Jetson Nano でカルマンフィルタ不要の9軸フュージョンセンサ BOSCH BNO055を使う https://t.co/6J658G3E1p"


JetsonNano関係


翻訳を期待!


BNO055では何も考えずQuaternion出力を使え、という話。


大事だと思うんです。Unityでオブジェクト置いたら終わり、じゃ意味ないもん。

todaitotexas.com
欲しい情報が何一つ手に入らない素敵なWEBページ。


展示内容は素晴らしい。

Jetson Nanoをロボットに搭載するために、リチウムポリマー6S22.2Vから5V80Wを安全に取り出せる電源を作る

Jetson Nanoは、安くて早くて便利ですが、フルスピードで動かそうとすると20Wの5V電源が必要になります。一般に、これをUSB電源からとるのは無理なので、DCDCコンバータを用意する必要があります。
一方、ロボットではモータを駆動するために、+12Vや+24Vの電源が使われることが多いです。そこで、24Vから5Vを作る電源を検討したいと思います。

この記事を参考にして事故等が起きても一切の責任を取れません。よくご検討の上自己責任でお願いいたします。

DCDCコンバータの選定

ロボットに搭載するために、できるだけ回路は物理的に小さくしたいと思います。自作でDCDCコンバータを作るとどうしても大きくなってしまいますから、素直にメーカー品を選定することにします。
www.cosel.co.jp
www.cosel.co.jp
有名メーカーのモジュールを探したところ、COSEL MGFS40/80シリーズが出力/サイズ比がもっともよさそうです。値段もそれぞれ、4000円、7000円とリーズナブルです。それぞれ、2台、4台のフルスペックJetson Nanoを動かすことができます。
難点は、現時点でどちらも在庫薄であることですが、そのうち入荷するでしょう。

低電圧検出回路の設計

大本の電源をリチウムポリマー電池から取り出すことに注意しなければなりません。リチウムポリマー電池は、過放電すると単に使えなくなるばかりか、膨らんで爆発するなどの危険性があります。そこで、終止電圧が来たらDCDCコンバータを自動的に止めるようにしなければなりません。リチウムポリマーの1セルの基準電圧は3.7V、終止電圧は3.0Vぐらいが一般的です。厳密にやるならば、各セルの電圧を監視するべきなのですが、回路規模的に大変になってしまうので、6S18Vを終止電圧としてDCDCコンバータを止めるようにしたいと思います。

ツェナーダイオードを使って基準電圧を作ります。18Vを直接比較しようとすると、もっと大きな電圧が比較回路のために必要になってしまいますので、5V程度の電源で駆動できるように適当に電圧を調整します。また、電圧を比較するのに最も手軽な方法は、OPアンプをコンパレータとして使うことだと思います。OPアンプの+入力にツェナーダイオード、-入力に抵抗で分圧したバッテリー電源電圧を入れます。

f:id:cvl-robot:20190904090105p:plain
電圧比較回路
www.falstad.com
回路の原理確認には、このWEBアプレットの回路シミュレータを使いました。電源電圧が18Vを超えるとコンパレータの出力はLowになり、18Vを切るとHighの+5Vを出力します。

部品は、手元にあった3.6Vのツェナーダイオードを使うことにします。またコンパレータには、手元に転がっていた単電源OPアンプのJRC 3414ADを使うことにしました。これは、バイポーラ型ですが消費電力の少ないFET入力の方が良いと思います。
抵抗の分圧比は、電源電圧が18Vの時に3.6Vの電圧が下の抵抗にかかるように調整します。系列の抵抗値に当てはめて、下を3.6kΩ、上を14.4k(12k+2.4k)にしました。ノイズを恐れて多めに電流を流すようにしましたが、もうちょっと少なくてもいいかもしれません。

単電源OPアンプの電源を用意するのが億劫ですが、強い味方のスーパー三端子レギュレータ+5Vが手元にあったのでこれを使うことにします。超便利なので、手元にいくつか在庫を用意しておくと良いです。
ただし、こいつは低電圧検出後も停止されず微弱ながら電流を引き続けますので、停止してしまったら速やかにバッテリーを取り外す必要があります。基準電圧用のツェナーダイオードの電源とOPアンプの電源は同じものを用いてください。
akizukidenshi.com

あとは、このコンパレータの出力電圧をCOSELのDCDCコンバータのRC端子につないでやれば良いです。
注意点として、本来は出力にヒステリシスを入れて、一度基準電圧を切ったらラッチさせてチャタリングが起きないようにするべきだと思います。クリティカルな用途に使う際はよく注意してください。

出力状態の監視出力

この5V用DCDCコンバータで低電圧検出回路が働いたら、(もし使っていれば)他の系統の電源も連携して停止するようにするべきです。出力側の5Vの電圧でフォトカプラを駆動して、入力側の電圧基準で信号を取り出せるようにしたいと思います。
フォトカプラには、京都のマルツで入手できた東芝TLP550を使うことにします。これは、何の変哲もないオープンコレクタ出力1回路の物です。
toshiba.semicon-storage.com

f:id:cvl-robot:20190904094852p:plain
フォトカプラ
わざわざ回路図にするまでもないですが、左側の電源をCOSELのDCDCコンバータの5V出力、右側の電源をスーパー三端子レギュレータの5V電源とします。負論理で動きますので、そのまま別のコーセルのDCDCコンバータのRCに入力することができます。

メインのDCDCコンバータ電源回路

COSELのデータシートに従って素直に作ります。コンデンサのESRが無いので、シミュレータはこのままでは動きません。

f:id:cvl-robot:20190904103127p:plain
全体回路図

実装

出来ました。

f:id:cvl-robot:20190904103302p:plain
5V80WのDCDCコンバータの実装
が、やらかしています。DCDCコンバータモジュールは熱を持つので、電解コンデンサーを接しさせてはイケマセン!また、ラインフィルタを入れてはいますが、多分無意味なので不要です。

今日の本文

ダイエットのために、病院でおすすめされました。

ソニーのMDR-M1STが届いたので開封の儀

長年愛用してきたMDR-CD900STの後継機とも言われているMDR-M1STが発売されたので買ってみました。
早速届いたので、開封の儀。

f:id:cvl-robot:20190829133336j:plain
うわさの外箱。飾り気がない。
f:id:cvl-robot:20190829133407j:plain
梱包もシンプル
f:id:cvl-robot:20190829133648j:plain
説明書。保証書は無し。
f:id:cvl-robot:20190829133719j:plain
ケーブルと本体。ケーブルの根本がねじになっている特殊形状。
f:id:cvl-robot:20190829133802j:plain
持った感じは、CD900STとよく似てる。
f:id:cvl-robot:20190829134104j:plain
少し重い

感想

第一インプレッションは、CD900STとの細かい違いが気に入らなすぎて不満。
ヘッドバンドのクッションは薄い方が良いし、押しつけ圧が強くて長く使えないのも不満。
音質もCD900STと違うことが不満。
Final D8000と比べてしまうのが悪いのは分かっているけれど、今時のいい音とはかけ離れているし。これが標準の音になってしまったら悲しい。

今日の本文

ヘッドホンアンプどうしよう。

LookingGlassでの表示を綺麗にするために、three.jsのdisplacement mapの階調を8ビット256から24ビット16777216に拡張する

displacement mapは、画像データを元にお手軽に3次元(2.5次元)形状を表現する手法として知られています。これを使ってLookingGlassの表示アプリを作っている方がいたりして、なるほど簡単で良いなと感心しました。
stereo.jpn.org
ただグレーは通常256階調しか持ちませんので、Looking Glassの奥行表現の性能を表現しきれません。そこで、256階調を3色分の情報を使ってもっと細かに奥行を表現できるようにしたいと思います。

var displacementmap_vertexを改造する

three.jsではdisplacement mapをvar displacementmap_vertexという変数の中に定義した式で計算しています。そこで、この式の記述を探して中を書き換えてしまいます。

デフォルトのグレー256階調をコメントアウトします。

//var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif";

その下に、3色1677階調版を記述します。チャンネル毎に256倍のオフセットを与えているだけです。

var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( (texture2D( displacementMap, uv ).x + 256. * texture2D( displacementMap, uv ).y + 256. * 256. * texture2D( displacementMap, uv ).z ) * displacementScale + displacementBias );\n#endif";

データは、手前から奥へRGBの並びになります。

f:id:cvl-robot:20190828143444p:plain
デプス画像をグレーからRGBに

今日の本文

ソニーのモニターヘッドホンのMDR-M1STが出たので買ってみましたが、圧がCD900STより強くて長時間使えません。なんでこんな変更をしたんだ?

SONY 密閉型スタジオモニターヘッドホン MDR-CD900ST

SONY 密閉型スタジオモニターヘッドホン MDR-CD900ST

今一番良いモニターヘッドホンは間違いなくFinal D8000ですね。余計なのをいろいろ買うより、頑張ってこれを買うべきかもしれない。
final D8000 FI-D8PAL 平面磁界型ヘッドホン

final D8000 FI-D8PAL 平面磁界型ヘッドホン

Jetson NanoでRealSense D435iとT265を使ったプログラムを自動起動させる方法

Jetson Nanoは値段が安くてそこそこ性能が良いので、ロボットの頭として便利に使えます。画像処理も得意なのでいろいろなセンサーを搭載して、ロボットの起動と同時に、それらセンサーを使ったプログラムが自動で起動するようにしたいことが結構あります。
Ubuntu」「自動起動」などで検索してやり方を調べてみると、rc.localを使った方法やsystemdを使った方法などが見つかります。しかし、これらはX-Windowが立ち上がる前に呼ばれてしまうので、X-Windowを使用するプログラムを正しく起動することが難しいです。
またteratermなどからログインしてプログラムを起動しようとしても、xwindowを使うプログラムは画面のポートフォワーディングを設定しておかないとすんなり立ち上がってくれません。
そこで、xwindowが立ち上がってからプログラムを起動するように設定したいと思います。

~/.config/autostartを使う

Gnomeデスクトップの準備ができてからプログラムを起動するためには、ユーザのホームディレクトリに隠されている.configディレクトリの下に、autostartというディレクトリを用意して、その中に.desktop拡張子をもったファイルを置くことで行います[1]。

準備

autostartディレクトリが無い場合は自分で作ります。

> cd ~/.config
> mkdir autostart
> cd autostart
> nano realsense.desktop // なんでもいい適当なファイル名.desktop

realsense.desktopの中身は書式[2]に従って

[Desktop Entry]
Exec=何か実行したいプログラム
Type=Application

と書きます。
実行失敗したときにエラーメッセージが読めないと困るので、gnome-terminalを立ち上げてから、起動用のシェルプログラムを呼びます。

[Desktop Entry]
Exec=gnome-terminal -- bash -c "bash /home/cvl/workspace/openFrameworks/apps/myApps/myRealsenseMulti/autostart.sh; bash"
Type=Application

プログラムが終了したときに窓が消えてしまわないように、;bashを最後におまじない的に入れておきます。
autostart.shの中身は好きに書いてもらえばいいのですが、こんな感じで使っています。

sleep 5;
cd ~/workspace/openFrameworks/apps/myApps/myRealsenseMulti
make RunRelease

スーパーユーザー権限が必要な時の対処法

Dynamixelのモータとか、ルート権限が必要なデバイスを起動したいときはsudoを付けて起動しますが、通常パスワードをインタラクティブに入力しなければなりません。sudoに-Sオプションを付けると、標準入力からパスワードを読んでくれるようになりますのでこれを利用します。
autostart.shをこんな感じに変えます。

PASSWORD=password
echo PASSWORD | sudo -S ./bulk_read_write

参考文献
[1] Ubuntu起動と同時に自動でターミナルを開く - Qiita
[2] Autostart - LXDE.org

今日の本文

Jetson Nanoは本体は安いけれど、オプションに結構お金がかかるのが難点です。自分が使っているものを備忘録として、記載しておきます。

安いが見た目はそこそこ良い。落とすと割れる。
Noctua NF-A4x20 5V PWM 40mm 静音 ファン 5000rpm

Noctua NF-A4x20 5V PWM 40mm 静音 ファン 5000rpm

\2660- 在庫切れになるとトンデモナク高い金額がつけられていることがあるので、ご注意を。 5V PWM対応なら大丈夫なので10mm厚の物も使える。 最高速で動かしたいなら、5V20Wの電源が必要。 普通のご家庭に普通に転がっているジャンパーが一つ電源設定のために必要です。 実行速度を速く保ちたいなら良いマイクロSDカードが必要です。ただUHS-I U3は多分意味がないので、U1で十分だと思います。 Intel 8265NGWしかJetson NanoNanoはM2. Wifiカードを受け付けないそうですが、ほんとかな。 WiFiBluetooth用アンテナが必要です。コネクタの形状に注意が必要です。

ファンの取り付けのために、3mmのタップが立てられると便利です。

ライト精機 ライトBPタップダイスセットTDS-12B

ライト精機 ライトBPタップダイスセットTDS-12B

自分用読むべき論文メモ 2019年5月版

5月は情報多すぎて、上手く咀嚼ができてない.


眼球運動


いつも悩むGPSアンテナの選択


洗える電池


欲しい。


視線推定。Jetson Nanoでは重かった。


モータノウハウ


240Hzは要らない。欲しいのはHDMI入力なのでMB16AMTで良い。早く出ろ。


高音質な3D音響レンダリング。気になる。


Jetson NanoでRealsense D435i


Git


ICRA2019


高解像度化


CVPR2019


数式エンジンのAPI


www.chukyo-u.ac.jp
アノテーション付き3Dモデル


木材ベースの新素材


全てのドローンにあのボールの装着を義務付けてほしい。怖いから。

professor.kanagawa-u.ac.jp
モーターの先生


ICRA2019のベストペーパー

news.developer.nvidia.com
強化学習


SiCが活躍し始めた


気になるおもちゃ


はて。


Lidarデータセット

www.itmedia.co.jp
4脚ロボット

qiita.com
便利そう


JetsonNanoでも動くOpenVSLAM


Unity向けだけど勉強になりそう


教師無し文脈行動理解


音の解析と合成技術の資料

http://www.dwdrums.com/images/moonmic/olson_direct-radiator-loudspeaker-enclosures.pdf
スピーカーエンクロージャーの特性

shiropen.com
単眼ハンドモーキャプ


点群関係


グローブ型のハンドモーキャプ


阪野さん

www.livoxtech.com
store.dji.com
安いからうっかり買ってしまいそうになる。欲しいけど。画角に注意。


勉強しすぎに気を付けよう


内容以上に動画がうまい


TensorFlow用微分可能なレンダラー


買う本


arxiv.org
触覚


ずっと見てたい


ai-scholar.tech


モデルベース強化学習まとめ。ありがたい。


github.com
綺麗に立体復元


arxiv.org
光源推定

www.digikey.jp
150A10VでRds_onが0.75mΩとかいつの間にかすごい時代になったなぁ

material.io


CADモデルデータセット

arxiv.org


モーターを作ろう


リンク先の資料が勉強になる。

synapse.kyoto
知っとく価値がある。

nVidiaのJetson nanoで、ホログラムディスプレイのLookingGlassをHoloPlay.jsのSDKで使えるようにする。

Looking Glassは超面白いですね。今まで、さんざん色々な3Dディスプレイの表示クオリティの低さにがっかりさせられてきましたが、Looking Glassの画質はかなりいい線まで来ているように思えます。(欲を出せばいろいろありますが。)
Looking Glassにリアルタイムで描画しようと思ったら、3Dモデルを40枚同時に描画できなければいけないので、PCの要求仕様がかなり高いことが難点です。とくにそれらの値段が高く大きく重いことが悩みになります。
ところが、折しもちょうどいいタイミングでnVidiaのJetson Nanoという高度な描画能力を持ったマイコンボードが1万3千円ぐらいで買えるようになっていますので、この2つを組み合わせれば理想的じゃないか、と誰もが思いつくと思います。今日は、これをやってみたいと思います。

1.Jetson Nanoの準備

Jetson Nanoのイメージの焼きこみなどは、こちらを参考にしてください。
developer.nvidia.com
ぐぐれば一杯情報が出てきます。まっさらにインストールした状態から始めることにします。

2.準備

まず、作業用のディレクトリを作ります。

> mkdir workspace
> cd workspace
> mkdir ThreeJSTutorial
> cd ThreeJSTutorial
> mkdir js

次に、three.jsライブラリとHoloPlay.jsライブラリをダウンロードして展開します。

GettingStartGuideを見ながら進めるといいでしょう。
docs.lookingglassfactory.com
読むのが面倒くさい人は、次のリンクから。
https://github.com/mrdoob/three.js/archive/master.zip
https://s3.amazonaws.com/static-files.lookingglassfactory.com/ThreeJSLibrary/v0.2.1/HoloPlay.zip
これらのZIPを展開して、中身を~/workspace/ThreeJSTutorial/jsの下にコピーします。必要なのは.jsファイルが二つだけですが面倒くさいので全部コピーでも動きます。(WEBを公開する予定があって、セキュリティ等が気になる人は必要なファイルだけの方が無難。)

テスト用のindex.htmlを作ります。

まっさらの状態のJetson Nanoですとまだ使いやすいエディタも入っていないので適当なものを入れます。

sudo apt-get update
sudo apt-get -y install nano

Getting StartのWEBページの一番最後にあるexampleのソースコードをコピーして、index.htmlファイルを作ります。

> nano index.html
コピペ

medium.com
こちらのページにも同様のexampleが載っていますが、こちらの方は時間ごとに更新されて動くのでアニメーションさせたいときの参考になります。

3.WEBサーバのインストール

WindowsLinux向けのWEBサーバーインストーラアプリXAMPPは、x86/x64をターゲットにしたバイナリで配布されているので、ARMコアのJetsonNanoでは動きません。要はLAMPのアプリが入っていればいいので、手動でインストールしていきます。Lampのインストール方法は、Jetson向けの物はほとんど見つかりませんが、RaspberryPi用の記事はたくさん書かれていますのでこれを参考にします。
www.neko.ne.jp
インストールコマンドだけを抜き出すと、こんな感じになります。sudoで始まる行だけ辿れば大丈夫のはず、です。

> uname -a
> perl -V
> sudo apt-get udpate
> sudo apt-get -y install apache2
> apache -V
> sudo apt-get -y install php php-dev php-fpm php-gd
> sudo apt-get -y install php-mysql
> sudo a2enmod proxy_fcgi setenvif
> sudo a2enconf php7.2-fpm
> sudo systemctl reload apache2

php7.2-fpmの7.2はphpのバージョンに対応します。適切なバージョンを入れてください。

> sudo apt-get -y install mysql-server
> mysqld -V
> mysql -V
> sudo apt-get -y install phpmyadmin
[yes]
[password] x2
[apache2]

4.WEBコンテンツのパスを通す

apache2のdefaultのWEBコンテンツの置き場所は、/var/www/html/の下です。状況が変わって見つからないときは、

> sudo find / -name index.html -print

などで探すとよいでしょう。ここに、workspaceディレクトリの下に作ったThreeJSTutorialディレクトリのシンボリックリンクを張ります。

> cd /var/www/html
> sudo ln -s ~/workspace/ThreeJSTutorial ThreeJSTutorial
> cd

5.Holoplay.js for Linuxを起動する

何の制限があってかわかりませんが、LookingGlassのThree.jsライブラリであるHoloPlay.jsはWindowsMacにしか正式に対応していません。これを何とかするライブラリを先人が開発してくれているので、これを使いわせてもらいます。一応、アンオフィシャルだと思うので何があっても自己責任でお願いします。
github.com
初出はこちら。
Holoplay.js for Linux - Made with Looking Glass - Looking Glass Factory Forum

Githubからソースコードをダウンロードしてきて解凍します。適当な場所においてもかまわないはずなのですが、なぜかapt-getでgolang goをインストールしようとすると~/goにGOPATHを通そうとする(そして.bashrcに別の場所を書いても無視される)などのよくわからない挙動をしめす「ことがある」ので、~/goに展開してしまいます。

golangをインストール

> sudo apt-get -y install golang-go
> nano ~/.bashrc
一番最後の行に、
export GOPATH=~/go
export GOBIN=$GOPATH/bin
export PATH=$GOPATH/bin:$PATH
を足す。
> bash

golangのパスの機嫌がよくわからないときがあるので、何か困ったらWEBでもっと詳しいページを調べてください。
次にgoの実行環境を整えます。

> cd ~/go
> go get

何も言われず終了すればうまくいっているようです。何か文句を言われたら、PATHの設定などが間違えているのかもしれません。
これで準備ができましたので、goスクリプトを実行します。

> sudo go run main.go

この時点では何の応答もありません。
LookingGlassのUSBを接続して、WEBブラウザで用意したThreeJSTutorialを開きます。
すると、上手くいっていればキャリブレーションデータがターミナルに表示されて、ブラウザ内に次のような画面が表示されます。

Chromiumhttp://localhost/ThreeJSTutorial/index.htmlを開く。

f:id:cvl-robot:20190513190436j:plain
LookingGlass+JetsonNanoの動作テスト

うろ覚えで書いているので、上手く動いた動かない、のフィードバックをお待ちしています。

今日の工具

一流工具が欲しい病気にかかっています。