この記事は以前の記事(Raspberry pi(Raspbian wheezy)にROS indigoをインストールする)をもとに、Raspbian jessie用に書き換えた記事である。
Raspbian のバージョンによってインストールするパッケージが異なるので、以下のコマンドでRaspbianのバージョンを確認した上で、適切な方法を選ぶ必要がある。$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie $Codenameの行に動作中のバージョンが表示される。
WiringPi2 for Pythonをインストールする
前回の記事に引き続いて Raspberry Pi A+ へ、もろもろインストールする。
Python開発用ツールのインストール
python-pipはインストール済のようなので、python-devだけインストールする。
sudo apt-get install python-dev
WiringPi2のインストール
wiringipi2をインストールする。以前よりずっと簡単になった。
sudo pip install wiringpi2
いろいろ警告が出るけど、下のようになって終わればOK。
Successfully installed wiringpi2 wiringpi Cleaning up...
試運転
$ python Python 2.7.9 (default, Mar 8 2015, 00:52:26) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import wiringpi2 __main__:1: DeprecationWarning: The wiringpi2 module has been deprecated, please 'import wiringpi' instead.
以前のようにwiringpi2をimportすると、deprecatedだと怒られる。素直にwiringpiをimportすればよい。
>>> import wiringpi >>> wiringpi.piBoardRev() 2 >>> wiringpi.wiringPiSetup() wiringPiSetup: Must be root. (Did you forget sudo?) $
wiringPiSetupを使うにはroot権限が必要なので、sudo pythonとしなければならない。
以上。
Raspberry Pi A+にRaspbianをインストールする
完全な備忘録。来た道を見失わないために。
目標
- コンソールで起動(GUIは使わない)
- wifiでネットワーク接続
- PythonでGPIOを使う(別記事)
準備
- Raspberry Pi A+
- MicroSDカード(8MB以上のもの)
- WiFi USB Adapter(GW-USNano2)
- その他、インストールに必要なもろもろ
- セルフパワーのUSBハブ
- キーボード
- マウス
- HDMIディスプレイ
- USB-LANアダプタ
Raspbianのインストール
Raspberry PiウェブサイトのDownloadページでNOOBSをダウンロードする。
ダウンロードした圧縮ファイルを展開し、その中身を全てFATフォーマットしたMicroSDカードにコピーする。
コピーしたMicroSDカードを、もろもろ接続したRaspberry Pi A+に挿入して起動する。
起動したらRaspbianを選択してインストールを進める。
基本設定(その1)
Raspbian が起動したらコンソールを開いて、raspi-config を実行する。
sudo raspi-config
Advanced Optionsで、A2 Hostname を選ぶ。続く画面で、Hostname として適当な名前を入力する。(ここでは例として、roverを入力したものとする)
Advanced Optionsで、A4 SSHを選ぶ。続く画面で、Enableを選ぶ。
Enable Boot to Desktop/Scratchで、B2 Console Autologin を選ぶ。
Finishを選んで再起動する。
基本設定(その2)
別のPCからネットワーク経由で設定を継続する。
まず、PINGが通ることを確認する。
ping rover.local
SSHでログインし、.ssh フォルダを作成する。パスワードにはraspberryを入力する。
ssh pi@rover.local mkdir .ssh
sshd_configの設定を変更する。
sudo vi /etc/ssh/sshd_config
最終行のUsePAMをyesからnoに変更し、さらにUseDNS noを追加する。以下のようになればよい。
UsePAM no UseDNS no
いったんログアウトしてから、SSH鍵を転送する。
scp .ssh/id_rsa.pub pi@rover.local:~/.ssh/authorized_keys
再度、sshでログインする。以降、パスワードの入力を求められない。
ssh pi@rover.local
パッケージを更新し、アップデートする。
sudo apt-get update sudo apt-get upgrade
raspi-config を起動して設定の続きを行う。
sudo raspi-config
Internationalisation Optionsで、I1 Change Locale を選ぶ。
en_GB.UTF-8 の選択を外し、en_US.UTF-8 と ja_JP.UTF-8 を選択する。
Internationalisation Optionsで、I2 Change Timezone を選ぶ。
アジア(Asia), Tokyoを選ぶ。
Internationalisation Optionsで、I3 Change Keyboard Layout を選ぶ。
キーボードに合わせて適切なものを選ぶ。
wifi設定
/etc/network/interfaces を編集する。
iface wlan0 inet manual
これを
iface wlan0 inet dhcp
に書き換える。
/etc/wpa_supplicant/wpa_supplicant.conf を作成する。なお、ESSID、PSKには適切なものを指定する。
sudo bash cd /etc/wpa_supplicant wpa_passphrase ESSID PSK >> wpa_supplicant.conf
wifiモジュールをUSBハブに挿入するか、挿入済であれば以下を実行して wifi モジュールを再設定する。
ifdown wlan0 ifup wlan0
ログアウトした後、ネットワークケーブルを外してもPCからPINGが通ることを確認する。
以上で基本的な設定は完了。
Based on ScratchにShareメニューを追加する
この記事はSmalltalk Advent Calendar 2015のエントリです。
今さらSmalltalkベースのScratch 1.4をイジる必要はなかろうと思うが、ちょっとしたアイデアを試したりするのにまだまだ使える部分が多い。
その1つにRemote Sensor Protocolがある。シンプルなプロトコルなので他の言語でも実装しやすい。ScratchでRemote Sensor Protocolを使うには、ちょっとしたメソッドの変更を行った上で、Shiftを押しながらShareメニューをクリックして、Host MeshまたはJoin Meshを選べばよい。(簡単だけど奥深い!Scratchプログラミングの魅力)
しかし、ScratchSource1.4として公開されているオープンなScratch(いわゆるBased on Scratch)環境では、Shareメニューが存在しないので、この機能を利用することができない。
そこで、この記事ではBased on ScratchにShareメニューを追加する方法について説明したい。
目標
この記事では以下の機能の実現を目指す。
- Based on ScratchにShareメニューを追加する。
- ShareメニューにHost MeshおよびJoin Meshのメニュー項目を置く。
- 各メニュー項目がScratchにおけるRemote Sensor Protocolに基づいた機能を提供する。
ScratchのShareメニューには、作品をScratchのウェブサイトにアップロードする機能もあるが、Based on Scratch環境ではアップロードを行うことは許されていない。
you cannot implement the ability to upload projects to any MIT Scratch website (currently, http://scratch.mit.edu)
(License Informationより)
そこで、Host MeshおよびJoin Meshの機能実現のみとする。
準備
まずはScratchSource1.4.zipをダウンロードの上、適当なフォルダで展開する。
展開したフォルダにはイメージのみでVMがないので、普通のScratch1.4もダウンロードしてインストールしておく。
展開したフォルダにあるScratchSourceCode1.4.imageのファイルを、ScratchのVM(アプリケーション)にドラッグ&ドロップして、Based on Scratchを起動する。


起動したら、表示されているScratchのウィンドウを閉じる。そのためにはShiftを押しながらCommandキーを押し、表示されたHaloのうち左上の×印のボタンをクリックする。

メニュー用メソッドの作成
まずはShareメニューを押した時に反応するメソッドを作成する。
画面左側の緑色のウィンドウ(browser)の上段で、一番左にあるペイン(クラスカテゴリペイン)から、Scratch-UI-Panesを選ぶ。続いて、その右に表示されるクラスペインから、ScratchFrameMorphを選ぶ。そして、その右のプロトコルペインからmenu/button actionsを選ぶ。

するとbrowserの下段のコードペインが以下のようになっている(はず)。

この内容を全て消して、以下の内容をコードペインに入力 or コピペする。
shareMenu: aMenuTitleMorph
| menu |
menu _ CustomMenu new.
self addServerCommandsTo: menu.
menu localize.
menu invokeOn: self at: aMenuTitleMorph bottomLeft + (0 @ 10)

「_」アンダースコアになっている部分が、入力すると←の記号に変わっているがこれで問題ない。
メソッド入力欄の左上に表示される「ー」をクリックしてコンテキストメニューを出し、acceptを選ぶ。


特に問題がなければイニシャルを入れるように促されるので適当なもの(スペースが含んでいてはダメ)を入力してAcceptを押す。

1行目が太字で表示されればOK。
メニューの登録
メニューにShareを追加して、shareMenu:メッセージを送るようにする。
同じbrowser内で上段の右から2番目のプロトコルペインでinitializationを選び、その右のメソッド一覧ペインでcreateMenuPanelを選ぶ。

コードペインの20行目付近に、メニュー項目を登録している箇所がある。EditとHelpのエントリの間へ、以下のようにShareメニューのエントリを追加する。

終わったら先ほどと同様に、コードペインのコンテキストメニューでacceptを選ぶ。
MESH機能の抑制解除
この時点でメニューにはShareと表示されるが、クリックしてもメニュー項目は表示されない。これは、ScratchがデフォルトでMESH機能を抑制しているためなので、この抑制を解除する必要がある。
browserのプロトコルペインでmenu/button actionsを選び、メソッド一覧ペインでaddServerCommandsTo:を選ぶ。

抑制を解除するには、上のコード中で明るく表示されているtrueを、falseに置き換える。そして、コードペインのコンテキストメニューでacceptを選べよい。
試してみる
3つの追加・変更が完了したら、デスクトップをクリックしてworldメニューを出し、open…からScratchを選ぶ。Shareメニューをクリックして2つのメニュー項目が表示されればOKである。

ネットワークで接続された2台以上のPCでScratchを起動すればMESH機能の面白さを実感できるが、1台のPC上でもScratchを2個立ち上げて、一方でHost Meshを選び、もう一方でJoin Meshを選べば動作を確かめることができる。後者についてはIPアドレスとして127.0.0.1と入力すればよい。
気をつけなければならないのは、一方で変数値を更新しても、もう一方の変数が変わるわけではないこと。もう一方ではセンサー値として他の変数値を参照できるだけである。
Change File
上記の追加・変更を行うチェンジファイルも公開しておく。
http://itolab.com/software/scratch/enableShareMenu.1.cs
このファイルをダウンロードしたらScratchSourceのフォルダに格納した上で、worldメニューを出して、open…からfile listを選ぶ。enableShareMenu.1.csを選んでコンテキストメニューからfileInを選べば、全ての追加・変更が行われる。
手軽に実施したい人はどうぞ。
Elementary OSにROS indigoをインストールする
Elementary OSの調子がなかなか良いのでROSをインストールして継続的に使ってみることにした。
Elementary OSのウェブサイトからisoイメージをダウンロードする。ダウンロードの際には「Freyaをダウンロード」を押す前に「カスタム」をクリックして0と入力すれば無料で入手できる。もう少し使ってみないとわからないが数ドル払う価値はあるのではと思う。
今回はChromeBook(C720)にインストールして使ったが大きな問題なくインストールできた。
ROS indigoのインストール
OSのインストールが終わったらROSをインストールする。Elementary OS Freyaがubuntu 14.04ベースなので、ROSはindigoをインストールする。
ROS indigoのインストールページを参考に、インストールを進める。
Setup your sources.list
まずsource.listを作成する。画面左上のApplicationからTerminalを選んで起動し、以下を入力する。
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
これを実行すると/etc/apt/sources.list.dにros-latest.listが作られる。インストールページの指示に従ってapt-get updateまで実行すると、以下のようなエラーが発生する。
Err http://packages.ros.org freya/main amd64 Packages 404 Not Found Err http://packages.ros.org freya/main i386 Packages 404 Not Found
/etc/apt/sources.list.d/ros-latest.listを見ると、以下のような内容になっている。
$ cat /etc/apt/sources.list.d/ros-latest.list deb http://packages.ros.org/ros/ubuntu freya main
trustyであるべき部分がfreyaになっているのでROSのパッケージを入手できないようだ。
そこで、この部分を書き換えて以下のようにする。
$ cat /etc/apt/sources.list.d/ros-latest.list deb http://packages.ros.org/ros/ubuntu trusty main
Set up your keys
以下を実行してkeyを設定する。
$ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
Installation
後は通常どおりROSをインストールすればよい。今回はDesktop-Full Installとした。
$ sudo apt-get update $ sudo apt-get install ros-indigo-desktop-full
Initialize rosdep
続いてrosdepを実行する。
$ sudo rosdep init $ rosdep update
ところが2行目の実行後、以下のようなエラーが発生する。
$ rosdep update reading in sources list data from /etc/ros/rosdep/sources.list.d Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index.yaml Add distro "groovy" ERROR: Rosdep experienced an error: Could not detect OS, tried ['windows', 'ubuntu', 'rhel', 'qnx', 'osx', 'opensuse', 'opensuse', 'mint', 'linaro', 'gentoo', 'funtoo', 'freebsd', 'fedora', 'elementary', 'debian', 'cygwin', 'centos', 'arch'] Please go to the rosdep page [1] and file a bug report with the stack trace below. [1] : http://www.ros.org/wiki/rosdep
これもsources.listの時と同様にubuntuのコードネームがfreyaになっているのではないかと考えられるので、以下のようにOSの検出を上書きする。
$ export ROS_OS_OVERRIDE=ubuntu:14.04
再度rosdepを実行する。
$ rosdep update
Environment setup
ROSの設定を行うように.bashrcを変更する。
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc $ source ~/.bashrc
これまたエラーが発生する。
bash: /home/itolab/.bashrc: line 168: syntax error near unexpected token `/opt/ros/indigo/setup.bash' bash: /home/itolab/.bashrc: line 168: `esacsource /opt/ros/indigo/setup.bash'
もともと.bashrcの最終行に改行が入っておらず、echoの出力がつながってしまうことが原因である。適当なエディタで.bashrcを開き、esacとsourceの間に改行を入れる。
さらに先ほどのexportも追加しておく。
$ echo export ROS_OS_OVERRIDE=ubuntu:14.04 >> .bashrc
Getting rosinstall
rosinstallをインストールする。
$ sudo apt-get install python-rosinstall
以上でElementary OSへのROS indigoインストールは完了する。
ChromeBookへのLinuxインストール(準備編)
【無保証、損壊の危険あり】この記事ではChromeBookのハードウェア・ソフトウェアに変更を加えるため、ChromeBookを元に戻せないような状態にする可能性がある。実施する場合は自己責任で行うこと。
以前にArchLinuxのインストール方法としてまとめたが、ArchLinuxを使っておらずその後の記事を掲載するつもりもないので、元記事を削除し、必要な部分だけ残すことにした。
この記事ではChromeBook(Acer C720)でSeaBIOSを設定する手順について説明し、実際にLinuxをインストールする手順については別途説明する。
前提
自分が購入したChromeBookがAcerのC720(C720-2420)なので、この記事ではそれに関する情報のみ載せる。
Linux導入準備の流れ
- デベロッパーモードの有効化
- SeaBIOSの有効化
- ハードウェア書き込み保護の無効化
- GBBフラグの設定
- ハードウェア書き込み保護の有効化
デベロッパーモードの有効化
chrubuntuのインストールで説明したのと同じ方法でデベロッパー(開発者)モードにする。具体的には以下の手順となる。
- ChromeBookを終了しておく。
- キーボード最上段のescと→を押しながら、電源をオンにする。
- リカバリ画面になったら、Ctrl-Dを押し、その後、Enterを押す。
- 開発者モード用の初期化が始まり、その後自動的に再起動される。
SeaBIOSの有効化
これも以前の記事と同じように無線LANを有効にした後、ログイン画面する。
- ChromeBookを起動する。
- 無線LANの設定を行い、インターネットへアクセスできるようにする。
- EULAの画面をAcceptしてログイン画面に進む。(ただしログインしない)
- ctrlとaltを押しながら最上段の→キーを押し、ChromeOSのCUIログイン画面に移る。
- ユーザーIDとして、chronos と入力してログインする。(パスワードは入力しない)
次にSeaBIOSを有効化する。
$ sudo bash
# crossystem dev_boot_usb=1 dev_boot_legacy=1
シャットダウンする。
ハードウェア書き込み保護の無効化
デフォルトでSeaBIOSを起動するように変更するにはGBBフラグを設定する必要がある。また、このようにしないとバッテリーが空になった際に、自動的にChromeOSがリカバリされ、インストールしたLinuxが失われてしまう。GBBフラグを設定するには、ソフトウェア書き込み保護の無効化を行う必要があり、それに先立ってハードウェア書き込み保護の無効化を行う。
この手順を行うとAcerの保証が受けられなくなるので注意すること。
ArchLinuxサイト上のC720の情報ページに従い、C720の裏面のネジを全て取り外す。具体的な手順は以下の通りである。
- 裏面に見える12個のネジを全て外す。
- 保証用のシールを外して、その下のネジを外す。(保証が受けられなくなるので注意)
- 裏面のパネルを注意深く外す。
- 写真を確認しながら、バッテリー右上にある7番のネジを外す。
- 裏面のパネルを元に戻す。
裏面パネルは比較的簡単に外れる。ディスプレイヒンジ側の中央あたりに爪を入れ、やさしく開けていけば良い。
バッテリーが接続されたままなので、基盤上のネジを外す場合はドライバーを電子部品等に接触させないように十分に注意して行うこと。
また、外したネジは後で元に戻すので失くさないように注意する。
GBBフラグの設定
通常通りにChromeBookの電源を入れ、先ほどの「SeaBIOSの有効化」と同じようにCUIログインを行って、以下を実行する。
$ sudo su
# flashrom --wp-disable
# flashrom --wp-status
最後のコマンドで書き込み保護が無効化されていることを確認する。
# /usr/share/vboot/bin/set_gbb_flags.sh
上記を実行した結果が以下のようになっていることを確認する。
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
同じ内容であれば以下を実行して、SeaBIOSがデフォルトで起動するように設定する。
# /usr/share/vboot/bin/set_gbb_flags.sh 0x489
ソフトウェアの書き込み保護を有効にする。
# flashrom --wp-enable
ChromeBookをシャットダウンする。
ハードウェア書き込み保護の有効化
先ほどの「ハードウェア書き込み保護の無効化」と同じように裏面のパネルを取り外し、外したネジを7番の場所に元通り付ける。
SeaBIOS関係の設定は以上である。
グラフ操作フレームワーク:Grafeo公開

データを元にグラフを生成して、ぐりぐりとグラフを扱うにはRoassalという素晴らしいツールが既にある。一方で、小規模なグラフを作ったり操作したりできるツールの必要性もあって、ここ数年そういったソフトウェアの開発を行っていた。もとはFluoのグラフ操作部分だったのが、汎用的になるようにリファクタリングを重ねていったら、それなりに使えそうなものができたので公開することにした。
Grafeo
方向性としては、状態遷移図を作ったりするようなツールのフレームワークを目指しつつ、ちょっとしたグラフを描きたいといった場合に便利なツールとしても使えるようにしたい。
まだ公開していないが、このGrafeoをベースに既存のFluoを構築したり、umejavaさんのSState向けのUIを作ったりしているので、ぼちぼちと公開して行こうと思っている。
Liva PCにubuntu 14.04.2をインストールする
以前にアマゾンで買ったECSのLiva PCにubuntu 14.04.2のデスクトップ版をインストールした。
要するに、
- Ubuntuのサイトから14.04.2 LTSの64bit版をダウンロードする。
- Rufusを起動して「MBR UEFIコンピュータのためにパーティション構成」を選んで適当なUSBメモリに書き込む。
- Liva PCのBIOSを立ち上げて(電源オン時にDELキーを押す)、BOOTでUSBデバイスを優先にする。
- あとは普通にインストール。
だけでよかった。lubuntuも同様。
Raspberry pi model B(Raspbian wheezy版)にROS indigoをインストールする
この記事はRaspbian wheezy用のROS indigoビルドについて書いている。jessie用については別記事を参照のこと。
Raspberry piにROS/indigoをインストールする。現時点でRaspberry pi用のROSのバイナリパッケージは提供されていないようなので、直接ビルドしていくことになる。手順の概要は以下の通り。
- Raspbianをインストールする。
- ROSビルドの設定を行う。
- ROS本体をビルドする。
Raspbianのインストール
まず、Raspberry piのダウンロードページからNOOBSのZIPファイルをダウンロードする。
ダウンロードするしたZIPファイルを適当なフォルダに展開し、FATフォーマットされたSDカードにコピーする。
Raspberry piを適切にセットアップし、インターネット接続できるようにネットワークケーブルを接続したあと、NOOBSをコピーしたSDカードを挿入して起動する。
起動後の画面で日本語を選び、Raspbianのインストールを選んでインストールを始める。
このあたりの手順は、Raspberry piのセットアップページを参照する。
一般的なサイトで紹介している設定を済ませておくと良いだろう。
ROSビルドの設定
この手順はROSのページを参考にしている。要は忠実に一つずつこなしていくことだ。
2016/06/13追記
この記事はRaspberry piのOSであるRaspbianのバージョンがwheezyの頃の内容である。現時点でのRaspbianはjessieになるので、インストールするパッケージは異なる。この場合は別記事を参照してほしい。
なお、自分のRasperry piがどのバージョンのRaspbianで動作しているかどうかは、以下のコマンドで確認できる。
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie $
Codenameの行に動作中のバージョンが表示される。
2016/06/13追記終了
リポジトリの設定と更新
ROSのリポジトリを設定し、認証キーを追加する。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu wheezy main" > /etc/apt/sources.list.d/ros-latest.list' wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
aptのパッケージインデックスを更新する。
sudo apt-get update sudo apt-get upgrade
ビルド用パッケージのインストール
ビルドに必要なパッケージをインストールする。
sudo apt-get install python-setuptools python-pip python-yaml python-argparse python-distribute python-docutils python-dateutil python-setuptools python-six sudo pip install rosdep rosinstall_generator wstool rosinstall
rosdepを初期化する。
sudo rosdep init rosdep update
catkinのワークスペースを作成する。
mkdir ~/ros_catkin_ws cd ~/ros_catkin_ws
Variantの選択
ここで、ROSのどんなパッケージをビルドするかを選ぶことになる。推奨されているvariantのはros_commだが、他にdesktopやrobotなどがある。目的に応じて好きなものを選べばよい。variantはREP 131のページで紹介されている。
適当なvariantを選んだら、以下のようなコマンドでインストールの設定を行う。なお、下はros_comm用のコマンドなので、選んだvariantに応じてros_commの部分(3カ所ある)をvariantの名前で置き換えて実行する。
rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-ros_comm-wet.rosinstall wstool init src indigo-ros_comm-wet.rosinstall
なお、Collada DOMが不要ならば以下のように –excludeの後ろに collada_parser と collada_urdf を追加する。
rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp collada_parser collada_urdf --tar > indigo-ros_comm-wet.rosinstall wstool init src indigo-ros_comm-wet.rosinstall
この時点で選んだvariantを間違えてしまった場合は、srcフォルダを削除して上のコマンドをやりなおせば良い。
必要なパッケージのインストール
ROSのビルドに必要だが、Raspbianではstableになっていないパッケージをそれぞれビルドしておく。まずは、その準備を行う。
sudo apt-get install checkinstall cmake sudo sh -c 'echo "deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi" >> /etc/apt/sources.list' sudo apt-get update
libconsole-bridge-dev,liblz4-dev,liburdfdom-headers-devをインストールする。
mkdir ~/ros_catkin_ws/external_src cd ~/ros_catkin_ws/external_src sudo apt-get build-dep console-bridge apt-get source -b console-bridge sudo dpkg -i libconsole-bridge0.2_*.deb libconsole-bridge-dev_*.deb apt-get source -b lz4 sudo dpkg -i liblz4-*.deb git clone https://github.com/ros/urdfdom_headers.git cd urdfdom_headers cmake . sudo checkinstall make install
最後のcheckinstallを行うと、以下のような設定が現れる。
0 - Maintainer: [ root@raspberrypi ] 1 - Summary: [ Package created with checkinstall 1.6.2 ] 2 - Name: [ urdfdom-headers ] 3 - Version: [ 20150804 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ armhf ] 8 - Source location: [ urdfdom_headers ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ urdfdom-headers ] 12 - Conflicts: [ ] 13 - Replaces: [ ] Enter a number to change any of them or press ENTER to continue:
2番のNameをurdfdom_headersからliburdfdom-headers-devに変更する必要があるので、2 を入力してEnterを押し、次に liburdfdom-headers-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。
cd .. sudo apt-get install libboost-test-dev libtinyxml-dev git clone https://github.com/ros/urdfdom.git cd urdfdom cmake . sudo checkinstall make install
最後のcheckinstallを行うと、以下のような設定が現れる。
0 - Maintainer: [ root@raspberrypi ] 1 - Summary: [ Package created with checkinstall 1.6.2 ] 2 - Name: [ urdfdom ] 3 - Version: [ 20150804 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ armhf ] 8 - Source location: [ urdfdom ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ urdfdom ] 12 - Conflicts: [ ] 13 - Replaces: [ ] Enter a number to change any of them or press ENTER to continue:
2番のNameをurdfdomからliburdfdom-devに変更する必要があるので、2 を入力してEnterを押し、次に liburdfdom-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。
Collada DOMのインストール
variantsの選択時に Collada DOM を除外していなければ、以下を実行する。
cd ~/ros_catkin_ws/external_src sudo apt-get install libboost-filesystem-dev libxml2-dev wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz tar -xzf collada-dom-2.4.0.tgz cd collada-dom-2.4.0 cmake . sudo checkinstall make install
checkinstallを行うと、以下のような設定が現れる。
0 - Maintainer: [ root@raspberrypi ] 1 - Summary: [ Package created with checkinstall 1.6.2 ] 2 - Name: [ collada-dom ] 3 - Version: [ 2.4.0 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ armhf ] 8 - Source location: [ collada-dom-2.4.0 ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ collada-dom ] 12 - Conflicts: [ ] 13 - Replaces: [ ] Enter a number to change any of them or press ENTER to continue:
2番のNameをcollada-domからcollada-dom-devに変更する必要があるので、2 を入力してEnterを押し、次に collada-dom-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。
collada_urdfへのパッチ
Collada DOMをインストールした場合、以下のようにcollada_urdfへパッチを当てる必要がある。
Google Groupのエントリに添付されているパッチファイル(0001-fixed-arm-build.patch)をダウンロードし、ホームディレクトリにコピーしておく。
以下を入力してパッチを当てる。
cd ~/ros_catkin_ws/src/robot_model/collada_urdf/ patch -p1 < ~/0001-fixed-arm-build.patch
依存関係の解決
rosdepを実行して依存関係を解決する。
cd ~/ros_catkin_ws rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:wheezy
上記を実行すると、python-rosdep, python-catkin-pkg, python-rospkg, python-rosdistro, sbclがない旨のエラーメッセージが表示されるが、これらはpip経由でインストールしているので無視してよい。
ROS本体のビルド
後は以下を入力して本体をビルドする。
cd ~/ros_catkin_ws sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo
終わるまでひたすら待つしかない。SSH経由だとタイムアウトする可能性があるのでタイムアウトしないように設定するかコンソール経由でビルドする。
動作確認
.bashrcで初期化スクリプトを実行するようにする。
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bashrc
roscoreを起動する。
roscore
... logging to /home/pi/.ros/log/9781754e-3a9d-11e5-8b98-b827ebe98f3c/roslaunch-raspberrypi-11718.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://raspberrypi:42226/ ros_comm version 1.11.13 SUMMARY ======== PARAMETERS * /rosdistro: indigo * /rosversion: 1.11.13 NODES auto-starting new master process[master]: started with pid [11735] ROS_MASTER_URI=http://raspberrypi:11311/ setting /run_id to 9781754e-3a9d-11e5-8b98-b827ebe98f3c process[rosout-1]: started with pid [11748] started core service [/rosout]
Ctrl-Zを押してプロセスを止め、プロンプトでbgを入力してバックグラウンド動作させる。
bg
トピックの一覧を表示させる。
rostopic list
/rosout /rosout_agg
おそらく正常動作しているだろう。fgを入力した後、Ctrl-Cでroscoreの動作を止める。
fg
roscore ^C[rosout-1] killing on exit [master] killing on exit shutting down processing monitor... ... shutting down processing monitor complete done
ここまでくるのにかなりの日数を要してしまった…
ROS indigoでiRobot Createを動かすまで
以前にもTurtleBotの関係でベースとなるiRobot Createを動かす手順をまとめたが、今回は別の方向に進む準備段階としてできるだけ少ない手間でCreateを動かす手順をまとめたい。
OSのインストール
OSとしてubuntuの軽量ディストリビューションであるlinuxBeanを用いた。linuxBeanの公式サイトから、linuxBean 14.04 (Trifolium) 14.04.2をダウンロードする。ROS/indigoを用いるために14.04を選んでインストールした。
必要な設定などは過去の記事を参考にしながら進めた。
ROS/indigoのインストール
ROSのインストール手順に従って進めて行く。
まず、パッケージのリポジトリ設定を行う。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
次にキーの設定を行う。
sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
パッケージインデックスの更新を行う。
sudo apt-get update
GUIツールなしでindigoをインストールする。
sudo apt-get install ros-indigo-ros-base
rosdepの初期化を行う。
sudo rosdep init rosdep update
環境変数などの設定を行う。
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bashrc
rosinstallをインストールする。
sudo apt-get install python-rosinstall
catkin用のワークスペースを作成する
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd .. catkin_make
Createノードの準備
Create用のパッケージを導入する
sudo apt-get install ros-indigo-create-node
CreateとUSBシリアルアダプタを用いて接続する。
上記のノードで使う /dev/ttyUSB0 を見てみると以下のようになっている。
ls -l /dev/ttyUSB0 crw-rw---- 1 root dialout 188,0 7月 23 14:58 /dev/ttyUSB0
/dev/ttyUSB0にアクセスできるように、自分のユーザー名(hoge)をdialoutグループに追加する。
sudo vigr
/etc/groupファイルのうち、dialoutで始まる行の末尾に自分のユーザー名(hoge)を追加する。
dialout:x:20:hoge
Createへの接続テスト
roscoreを起動する。
roscore
(別のターミナルを開いて)create_nodeを起動する。
rosrun create_node turtlebot_node.py
赤字でエラーメッセージが表示されなければ(おそらく)問題ない。
Createを前進させる。
rostopic pub -1 /cmd_vel geometry_msgs/Twist -- '[10,0,0]' '[0,0,0]'
Createが数センチ動けばOK。