Raspberry Pi 2へのROS Indigo/Ubuntu/OpenCV3他開発環境のインストール(ログ)

  • 3
    いいね
  • 0
    コメント

はじめに: 素直に終わらなかったので…

下記に従えば簡単にインストール…ROSだけはできず、かなり難航しました。
2016/5時点での一連の最新のパッケージの状況かもしれず、インストールで行ったことをまとめておきます。
ROS以外にも、開発環境の設定で参考になりそうなことは全て記載してみます。(半分はメモ…)

(2016/5/15 VNCのインストール手順を追記)

インストール手順として参考にした情報

インストールした環境

  • Ubuntu 14.04 LTS
  • ROS Indigo
  • OpenCV 3.0.0

Ubuntuのインストール

Ubuntu自体は問題なくインストールできた。

[RPi用Ubuntu手順] に基本的には従い、下記を実施:

1. イメージをmicroSDへ書き込み

手順にリンクしてあるイメージをそのまま利用。
- Download 2015-04-06-ubuntu-trusty.zip

(参考) 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

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)

(以上)