szmlb.net

tips for robotics

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

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

追記

ubuntu on VMwareで共有フォルダが見えない場合の対策

ubuntu 14.04, カーネルバージョン3.13.xの場合には以下の対処が必要.qiita.com

ubuntu12.04では下記の対応で対処可能.

                                                                                                      • -

VMwareで一時的に色々インストールしてテストしていたのだが, 新しいカーネルを導入すると, 共有フォルダの機能が使用不可となった.
vmware-toolsの再インストールが必要なのだが, 再インストールするとエラーが出てインストールがとまる.

原因と解決は以下のサイトに記述されている.
Anyone able to get Shared Folders working? (Gue... | VMware Communities
問題は別だが手順は下記のサイトを参考にした
Ubuntu 13.04上でVMWare Toolsのshared foldersが有効に成らない場合 - c4se記:さっちゃんですよ☆

$ cd ./vmware-tools-distrib/lib/modules/source
$ tar xvf vmhgfs.tar
$ vim ./vmhgfs-only/inode.c

1926行目にて,
d_alias → d_u.d_alis
と変更

$ tar sf vmhgfs.tar vmhgfs-only
$ cd ../../../
$ sudo bin/vmware-uninstall-tools.pl
$ sudo ./vmware-install.pl

これで正常にインストールされて/mnt/hgfs/に共有フォルダが表示される.