はじめに: 素直に終わらなかったので…
下記に従えば簡単にインストール…ROSだけはできず、かなり難航しました。
2016/5時点での一連の最新のパッケージの状況かもしれず、インストールで行ったことをまとめておきます。
ROS以外にも、開発環境の設定で参考になりそうなことは全て記載してみます。(半分はメモ…)
(2016/5/15 VNCのインストール手順を追記)
インストール手順として参考にした情報
- [RPi用Ubuntu手順] RaspberryPi | Ubuntu wiki
- [ROS手順] ROS Indigo の Ubuntu へのインストール | ROS.org
- [OpenCV3手順] Install OpenCV 3.0 and Python 2.7+ on Ubuntu | pyimagesearch
インストールした環境
- Ubuntu 14.04 LTS
- ROS Indigo
- OpenCV 3.0.0
Ubuntuのインストール
Ubuntu自体は問題なくインストールできた。
[RPi用Ubuntu手順] に基本的には従い、下記を実施:
1. イメージをmicroSDへ書き込み
手順にリンクしてあるイメージをそのまま利用。
(参考) sshインストール
$ sudo apt-get update
$ sudo apt-get install openssh-server
(参考) UTF-8ワーニング対策
※ この設定があるコンソールで下記がログイン時に警告されることへの対策: LC_ALL=ja_JP.UTF-8
"-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)"
$ export LANGUAGE=ja_JP.UTF-8
$ export LANG=ja_JP.UTF-8
$ export LC_ALL=ja_JP.UTF-8
$ sudo locale-gen ja_JP.UTF-8
- こちらの方法で良いかもしれない --> Debian/Ubuntuのデフォルトロケールを変更する | Qiita
2. ディスク容量確保
※ 意味を理解せず実施するとパーティションが壊れ、イメージの書き込みからやり直しになるので注意して下さい。
$ sudo fdisk /dev/mmcblk0
コンソールでこのとおり行った:
Delete the second partition (d, 2), then re-create it using the defaults (n, p, 2, enter, enter), then write and exit (w). Reboot the system, then:
$ sudo resize2fs /dev/mmcblk0p2
3. OSとデスクトップ、Video driver
$ sudo apt-get install linux-firmware
$ sudo apt-get install lubuntu-desktop
$ sudo apt-get install xserver-xorg-video-fbturbo
こちらも実施。
Then add this to /etc/X11/xorg.conf (create if it doesn't already exist):
Section "Device"
Identifier "Raspberry Pi FBDEV"
Driver "fbturbo"
Option "fbdev" "/dev/fb0"
Option "SwapbuffersWait" "true"
EndSection
4. Video core他
$ sudo apt-get install libraspberrypi-bin libraspberrypi-dev
$ sudo ln -s /usr /opt/vc
$ sudo apt-get install libraspberrypi-bin-nonfree
※シリアルコンソールはスキップ
(以上問題なし)
ROSのインストール (難航、この記事の本題)
[ROS手順] では、いくつか問題が出てしまったので下記のように解決。
1. リポジトリのrestricted・universe・multiverse設定
https://help.ubuntu.com/community/Repositories/Ubuntu
こちらに書いてあるとおりで、GUIを操作して設定。
2. sources.listを設定
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
3. 鍵の設定
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
4. パッケージのアップデート、インストール
ubuntu@ubuntu:~$ sudo apt-get install ros-indigo-desktop-full
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ros-indigo-desktop-full
ros-indigo-desktop-fullをインストールしたかったが、上記のように見つからないため、非full版を選択した。
$ sudo apt-get update
$ sudo apt-get install ros-indigo-desktop
また、エラーとなった。
Errors were encountered while processing:
/var/cache/apt/archives/libegl1-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
/var/cache/apt/archives/libgles2-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
これで解決しなかった。
$ sudo apt-get -f install
5. libegl1/libgles2のエラー対応
そこで、こちらを参考にした。
-
Ubuntu 14.04 (trusty) Raspberry Pi 2 image | Raspberry Pi フォーラム
$ sudo apt-get download libegl1-mesa-dev libgles2-mesa-dev
$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/libegl1-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
予定通りErrorになる。※ ダウンロードは不要だったと思う…$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/libgles2-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
これも予定通りErrorになる。$ sudo apt-get install -f
こちらが成功して、ROSインストールの準備ができた。
6. ROSインストールを再トライ
$ sudo apt-get install ros-indigo-desktop
今度は、成功した。
7. rosdepの初期化、.bashrcへのセット、python設定
$ sudo rosdep init
$ rosdep update
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
pythonで運用するので…
$ sudo apt-get install python-rosinstall
OpenCV3のインストール
OpenCV3手順で問題なくインストールできました。
$ sudo apt-get install build-essential cmake git pkg-config
$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
$ sudo apt-get install libgtk2.0-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ pip install numpy
$ sudo apt-get install python-pip
$ cd shared/lab/
$ git clone https://github.com/Itseez/opencv_contrib.git
$ cd opencv_contrib
$ git checkout 3.0.0
$ cd ..
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ git checkout 3.0.0
$ mkdir build
$ cd build/
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/shared/lab/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON .. &> ~/shared/lab/opencv/buildlog.txt
$ make -j4 &>> ~/shared/lab/opencv/buildlog.txt
$ sudo make install
(ご参考) その他の設定
Keyboard を日本語に
Ubuntu Weekly Recipe/第376回 Raspberry Pi 2にUbuntuをインストールし,RDPでリモートアクセスする | Gihyo.jp
/etc/default/keyboardを編集し、"us"を下記のように"jp"に書き換える。
XKBLAYOUT="jp"
下記を実施すると、インストールが始まって反映される。
$ sudo dpkg-reconfigure -f noninteractive keyboard-configuration
Raspberry Piでカメラ入力を扱うためのインストール
Accessing the Raspberry Pi Camera with OpenCV and Python | pyimagesearch
Raspberry Pi自体でカメラの入力で画像処理するには、この記事の内容が重要。
cv2.VideoCaptureなどの代わりに必要になるPiCameraを、arrayモジュールと併せてインストール。
$ sudo pip install "picamera[array]"
※ 従って、Pythonプログラムも入力などはRPi専用で開発するか、共通化のためのラッパーが必要になるようです。
(参考) Unifying picamera and cv2.VideoCapture into a single class with OpenCV | pyimagesearch
Pythonインタプリタを効率化 (MacOSで問題回避が必要)
pythonをインタラクティブモードで利用するとき、タブ補完やヒストリ保存を有効にしたい。ところが、
13. 対話入力編集とヒストリ置換 | Pythonチュートリアル
この方法のうちタブ補完は、MacOS Xでは働かない。
MacOSはGPLライセンス回避のため、本物のreadlineが実装されていないらしい。そこで、
[Python] Mac OSX10.9でPythonのタブ補完を有効にする | Yura YuWrite
この手順で~/.pystartupを作成。また、~/.bashrcへ下記を追加。
export PYTHONSTARTUP=~/.pystartup
IPアドレス固定
$ sudo emacs /etc/network/interfaces
下記のように固定する場合のご参考まで。
iface eth0 inet static
address 192.168.7.111
network 192.168.7.0
netmask 255.255.255.0
gateway 192.168.7.1
dns-nameservers 192.168.7.1
Sambaを設定
$ mkdir ~/shared
$ sudo apt-get install samba
$ sudo emacs /etc/samba/smb.conf
下記を後端に追加。
[shared]
path=/home/ubuntu/shared
read only=no
browsable=yes
guest ok = yes
force user = ubuntu
Hostnameを変更
$ sudo emacs /etc/hostname
$ sudo emacs /etc/hosts
どちらも、所望の名前へ変更。
VNCサーバーを設定
$ sudo apt-get install vnc4server
$ vncserver
初回はパスワードを設定すれば、問題なく動作。
emacsが必要なので…
$ sudo apt-get install emacs
.emacsはμemacs風に設定…。
(global-set-key "\C-h" 'backward-delete-char)
(global-set-key "\C-z" 'scroll-down)
(以上)