szmlb.net

tips for robotics

論文の整理の仕方について

読んだ論文の数が多くなってくると, フォルダ分けでの管理が非常に効率が悪い. そこで, mendeleyを導入したので, 覚書を残しておく.

データはDropboxで保存

データはDropbox上で保存し, クラウド上で同期できるようにする.
例えば, 保存フォルダを Dropbox/mendeley として作成しておく.
このフォルダは, 後のFile Organizerで指定するフォルダとする.

pdfファイルは, ファイル名を year_conference name_title のような規則に従って, 任意のフォルダに保存しておく.
ex. 2011_ICRA_szmlb_wheeled-mobile-robots.pdf
結局, mendeleyで取り込めば情報は抽出されるので, もう少し抽象度が高い名前でもいいかもしれない.

保存したフォルダは, 後のWatched Folderで指定する.
フォルダの階層分けは行わず, 1つのフォルダにpdfファイルをぶち込む形の方がいいと思われる.
そのあたりの自動分類はmendelayがやってくれるので.

mendeleyで管理

mendeleyを使えば, 発行年や論文誌名, タイトル, 著者情報を自動で抽出してくれる.
mendeleyのwatch folder機能を使って, Dropbox上のフォルダを設定し, 自動でmendeley上に情報が抽出されるようにする.

  • 同期の解除

mendeleyの設定として, クラウド上にpdfが同期されないように設定しておく.
All Documents上で右クリックして, Edit settingsを開き, Syncronize attached filesのチェックを外す.
自分の場合は, My Publicationフォルダのみ選択的に同期することにした.

f:id:szmlb:20160101130247p:plain

  • File Organizerの設定

File Organizerの機能を使えば, mendeley上で登録したpdfファイルから, 任意のフォルダにファイルをコピーしてくれる.
Preference->File Organizerから, 下記のように設定した. (conference paperがjournalの情報が抜けがちだったので, 後でyear-authorの順でフォルダ分けするように変更した)

f:id:szmlb:20160101134614p:plain

  • Watched Folderの設定

最後に, mendeley上で自動的にpdfファイルを登録するフォルダを設定する.
Preference-> Watched Folder で, 登録したいフォルダを設定する.
外付けHDD上のフォルダを指定したかったのだが, 選択肢に現れないので, 仕方なくローカル上にフォルダを作成してコピーした.

結果

f:id:szmlb:20160102112400p:plain

かなり便利だなという印象.
検索をかければ本文検索もかかるので, 論文へのアクセスがかなり効率化されそう.

日本語の昔の論文は, pdfに情報が埋め込まれていないので, 自分で入れる必要がある. これは仕方ない.
英語の文献に関しては, 著者情報や雑誌名が抜けるものは少なからずある.
必要な時に検索して修正を加えていけばまとまっていくと思う.

ROSでroombaを動かすまでのまとめ

ROSでroombaを動かした

手元にあるのはroomba700シリーズで, 環境はubuntu14.04, ROSのバージョンはindigoです.

Roombaと通信するための準備

USBシリアル変換コネクタもしくは無線化したい場合はzigbee等を用意します.

MZ Platformとフィジカルコンピューティング

ROSのドライバをインストール

roomba500シリーズ用のドライバですが700シリーズでも問題なく動きます.
Ubuntu 14.04 上のROS (Indigo) でRoombaを制御してみる|りさーちゃーのたまご
roombaをROSのコマンドで動かしてみる: 花岡ちゃんに花束を

ジョイスティック制御用のROSノードをたてる

「ROSではじめるロボットプログラミング」を参考にジョイスティックでroombaを制御します.

まず, ジョイスティックを使うためのノードをたてます.

$ rosrun joy joy_node

次に, joy_nodeからpublishされるtopicをsubscribeして, roomba500用のnodeに指令値をpublishします.

コードは著者様のgithubレポジトリから.
OTL/ros_book_programs · GitHub

$python joy_twist.py

roomba500用のドライバはcmd_velに発行された値に応じて動くので, 「ROSではじめるロボットプログラミング」のサンプルコードのまま動きます. 変更した点といえば, roombaの速度指令が少し大きかったので小さい値にスケーリングする程度でした.

あとは, turtlebotのプログラムを使えばそのまま流用できると思うのでそちらのほうが色々捗るかも.

macでwxmaximaを起動したときのコーディングエラーを回避する

ココに解決策がある.
Maxima -- GPL CAS based on DOE-MACSYMA / Support Requests / #39 Maxima 5.36.1 on Mac not running

$vim ~/.sbclrc

下記のように記入
(setf sb-impl::*default-external-format* :utf-8)

RoboticsToolboxメモ

RoboticsToolbox, Machine Vision Toolboxのメモ.

Robotics Toolbox, Machine Vision Toolboxとは?

・Peter Corkeさんが開発し公開しているMATLABオープンソースライブラリ
・Robotics Toolboxは主にロボットマニピュレータや移動ロボットのための座標変換や制御, シミュレーションに関するライブラリを含む
・Machine Vision Toolboxはロボットを指向したComputer Vision関係のライブラリを含む

ライブラリを一通り解説している本がRobotics, Vision and Controlという本.
半分はcoordinate transformにはじまりplanning, localization, controlと幅広く書かれている.
残りの半分は, computer visionに関するアルゴリズムとロボット制御への応用について書かれている.
邦訳版はまだないけど, 解説が非常に分かりやすいので読みやすいと思う.

ライブラリで使用しているアルゴリズムに関しての記載が少ない部分もあるが, ソースコードが見れるのと, 章末に参考文献が丁寧に記載されているので次に何を読めばいいのか分かりやすくなっている.

MatlabのバージョンはR2010a以降が推奨されている.

Robotics Toolboxの導入

導入:
RoboticsToolboxのコードをDL
ここでは, ver9.9をDL(robot-9.9)した.

matlabrc.mに以下の記述を追加

addpath(genpath('C:\hoge\robot-9.9\rvctools\startup_rvc'))
run C:\hoge\robot-9.9\rvctools\startup_rvc

これでmatlab起動時に自動的にRoboticsToolboxが読み込まれる.

レファレンスココ.

Machine Vision Toolboxの導入

導入:
MachineVisionToolboxのコードをDL. RoboticsToolboxのDLサイトで一緒にDL可能.
ここでは, ver3.3をDL(vision-3.3)した.

matlabrc.mに以下の記述を追加

addpath(genpath('C:\hoge\robot-9.9\rvctools\startup_rvc'))
run C:\hoge\robot-9.9\rvctools\startup_rvc

これでmatlab起動時に自動的にRoboticsToolboxが読み込まれる.

利用時に生じたエラー(Windows)

(1) 64bit版OSで生じるエラー

使用していて, Toolbox内のMEXファイルを利用する時にひっかかった.
https://groups.google.com/forum/#!msg/robotics-tool-box/7-zr6fkRPF8/tTy0DwNq9G8J

問題が生じたのは下記のコード.

load map1 % load map
goal = [50,30]; % goal point
start = [20, 10]; % start point
dx = DXform(map); % create navigation object
dx.plan(goal) % create plan for specified goal ←ココでエラー
dx.path(start) % animate path from this start location

ToolboxのMEXファイルはmatlab 32bit版でコンパイルされているらしく, 64bit版OSで利用しようとするとエラーが出る.

このエラーを解決するためには, 64bit OS上でMEXファイルを再度ビルドする必要がある.
64bit用matlabコンパイラが付属していないので, 別途インストールして利用する必要がある.

ココの案内に従ってコンパイラをインストールし, matlab上でコンパイラを設定するコマンドを叩いてみたけれど認識しない.

$ mex -setup

通常はここでコンパイラを選択して, vision-3.3\rvctools\vision\mexを作業ディレクトリにしてから

$ make

コマンドでOKらしい.
vision-3.3\rvctools\vision\mex\READMEファイルに記載があるので参考にされたい.

親切なことに, 64bit用にmexファイルを公開してくれている人がいたので利用することにした.
ココから.mexw64ファイルをDLして, vision-3.3\rvctools\vision\mexに保存する.
これでOK.

(2) contributed codeについて

サードパーティが開発した関数群は別途ダウンロードしMATLABにパスを通しておく必要がある. 教科書の中では注釈なく普通に利用しているので注意. 該当するのは以下の関数で, それぞれcontrib.zip, contrib2.zip内にコードがある.

contrib.zip

  • igraphseg
  • imser
  • vl_kmeans, for bag of words example, Sec 14.7
  • EPnP, for the CentralCamera.estpose() method, Sec 11.2.3

contrib2.zip

  • isift
  • isurf

MVTBのフォルダ, rvctools以下にcontribフォルダを作成.
contrib.zipおよびcontrib2.zipのrvctools以下のフォルダをすべてコピー.
startup_rvc.mに以下の記述を追加.

if tb
addpath(fullfile(rvcpath, 'common'));
addpath(fullfile(rvcpath, 'simulink'));
addpath(fullfile(rvcpath, 'contrib')); ← 追加
end

これで教科書中に出てくるすべての関数が実行できるはず.

python-controlを利用する際に直面したエラー

Windows

python-controlは, slycotというライブラリのpythonバインディングを使用するのでインストールが必要.
slycotをpip install slycotでインストールしようとすると, エラーが出てインストールできない.

Windows 64bit版でコンパイル時に起きるエラーらしい.

ここで大体解決.
「Unable to find vcvarsall.bat」の対処法 | Regen Techlog

結局, 非公式のPythonライブラリ用インストールバイナリを利用.
Python Extension Packages for Windows - Christoph Gohlke

Linux

slycot利用時にはfortranコンパイラがインストールされている必要がある.
あとはBLAS, LAPACKも使っているので必要.

$ sudo apt-get install gfortran
$ sudo apt-get install libblas-dev libatlas-dev liblapack-dev

最後にpipでそれぞれ入れる.

$ pip install control
$ pip install slycot

Mac

fortranを入れておく
$ brew install gfortran

BLAS, LAPACKをインストールd.hatena.ne.jp

$ pip install slycot
$ pip install control

slycotをimportするとエラーが出たので, 下記のサイトの通り対応した.d.hatena.ne.jp

LinxuxでPCIの情報を調べる

以下, 忘備録としてメモ.

lspciとlshwが使える.
http://open-groove.net/linux/lspci-bus-device-check/

$lspci -v
pciの情報は取れる. デバイスドライバの代わりを自前で用意する場合は表示されるIOベースアドレスが重要.

suになって

$lshw

を叩くと, PCIデバイスの情報が表示される.
lspciよりも多くの情報を参照できる.

少し古いけど, 東北学院大学の熊谷先生の資料は参考になる.
デバイスドライバに頼らないハードウェア操作

ベースアドレス等の情報を抽出してプログラムで使用する場合は

/proc/bus/pci/devices
/proc/ioports

等をみる.

RTOSの技術資料サイトも参考に.
PCIデバイスのしくみと制御 - マイクロネット

PCI以外についてはこちら.
ハードウェアの情報を収集する - いますぐ実践! Linuxシステム管理 / Vol.239
Linuxのシステムやハードウェア情報を取得するコマンドを集めてみた

他参考
I/OポートとIRQの使用状態を確認するには
www.infraeye.com

ubuntuでリアルタイムLinux

ubuntuリアルタイムOS化する方法についてのメモ.

linuxカーネルのリアルタイムカーネルに関しての歴史は以下のサイトにまとまっている.

UbuntuStudio/RealTimeKernel - Community Help Wiki
UbuntuStudioTips/Setup/Kernels - Ubuntu Japanese Wiki

まとめると以下の5種類のカーネルが存在する.

linux-generic (non-real-time)
linux-preempt (soft real-time)
linux-lowlatency (soft real-time)
linux-realtime (hard real-time)
linux-rt (hard real-time)

ubuntu 10.04以前では, linux-rtというパッケージをapt-getすれば, ハードリアルタイムなカーネルが選択できるようになっていたようだ.
ubuntu12.04以前では, linux-lowlatencyというパッケージをapt-getすることで, ソフトリアルタイムなカーネルがインストールされる.
そして, aboganiさんが公開しているパッケージlinux-realtimeをapt-getすることで, ハードリアルタイムなカーネルの導入が可能となる.
ubunut14.04においても同様にlinux-lowlatencyパッケージを導入可能だが, linux-realtimeパッケージの導入ができない.
ちなみに, ubuntu studio14.04ではlinux-genericとlinux-lowlatencyが統合されており, 標準でlowlatencyカーネルとなっている.

自前でカーネルにパッチをあててビルドする方法

RT PREEMPTパッチを標準のカーネルにあてる.
RT PREEMPT HOWTO - RTwiki

Beagle Bone BlackやIntel Edisonでカーネルをリアルタイム化した事例がある.
ソフトとハードの交差点:【BeagleBone Black】RT-Preemptカーネルの評価 - livedoor Blog(ブログ)
Intel Edisonをリアルタイム化する - Qiita

下記サイトには, RT PREEMPTカーネルのビルド方法の手順が記載されている.
System configuration [Linux-Sound]

また, 下記レポジトリで, 最適化されたubuntu studioのカーネルが配布されている.
thismaechler / ubuntustudio-14.04-realtimeaudio — Bitbucket

ubuntuに対して自前でRT PREEMPTのパッチを当ててビルドした時のメモを下記記事にまとめました.
ubuntuにrt-preemptカーネルを導入する - AKHrobotics

パッケージインストールによる方法

lowlatencyカーネルの導入
$ sudo apt-get install linux-lowlatency (linux-lowlatency-pae)

realtimeカーネルの方法
背筋トレーニング日記: Ubuntu 12.04LTS でリアルタイムプログラミング
背筋トレーニング日記: Ubuntu 12.04LTS でリアルタイムプログラミング(2回目)

$ sudo add-apt-repository ppa:abogani/realtime
$ sudo apt-get update
$ sudo apt-get install linux-realtime
$ sudo reboot

評価についてはまた別途まとめたい.

追記