OGIMOノート~家族のためのモノづくり~

OGIMOテックノート ~家族のためのモノづくり~

重度障害の息子を持つ父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具/ロボット関係の製作記録、思った事を残していきます

【ROS】ラズパイで始めるROS Bot入門① ~Ubuntu Server インストール~

はじめに

ロボット制御のデファクトスタンダードになっているROS(Robot OS)を勉強している。
Kobukiみたいな既にROSインストール済のロボットでROSの基礎を学習中だが、自前で一から勉強してみたくなったので、お手軽なRaspberry piを使って自作ロボットを作ってみたいと思う。

Hostマシン : Raspberry Pi 3
使用Soft : Ubuntu 16.04 LTS / ROS Kinetic
使用ロボットHW : 市販二輪走行ロボット(次回に説明)

パッケージサポートが整っている Ubuntu 14.04 / ROS Indigo を選択したかったが、その場合 Raspberry Pi3では動かずRaspberry Pi 2 になると聞いたので、今回は Ubuntu 16.04 LTS / ROS Kinetic を選択した。

Ubuntu Server 16.04 のインストール

基本的には、下記サイトの参考にした
gihyo.jp

母艦Ubuntu PCで
https://wiki.ubuntu.com/ARM/RaspberryPi
から ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz をダウンロード。

Ubuntu PCの場合、 xzcat コマンドでSDカードに書き込む。この際、SDカードの有無時の/dev/のファイル増減から指定する/dev/ファイルを見つける。私の環境では/dev/sde1 であった。(/dev/sd** or /dec/mmcblk***のどれかになる模様)一旦、SDカードがmountしている場合はumountしておいた方がよい

$ xzcat ubuntu-16.04-preinstalled-server-armhf+rasPi 3.img.xz | sudo dd of=/dev/sde1

時間がまぁまぁかかる。もし途中経過が分からず不安ならば、別ターミナルで以下のコマンドを入力する

$ sudo killall -USR1 dd

Windows PCの場合、7zipで解凍して、出てきたimgファイルをDDforWindowsなどでSDカードに書き込む。(この際、管理者権限で実行しないとうまくSDスロットを認識してくれないので注意)



ラズパイでのUbuntu立ち上げ

 続いて、書込み後のSDをラズパイに挿入して、電源ON。
コンソール画面が出るのでログイン/パスワードを入力(デフォルトは"ubuntu/ubuntu")。

次に設定ファイルの更新をします。この修正をしないと、ソフトアップデートした際にOSが起動しなくなるとの事。
/boot/firmware/config.txtを以下の様に編集します。

#device_tree_address=0x100     ←コメントアウトする
#device_tree_end=0x8000      ← コメントアウトする
device_tree_address=0x02008000 ←追記する

この修正後に、"sudo apt update"→"sudo apt upgrade" を実施する。その後、rebootを実施して、立ち上がる事を確認する。

各種設定

sshで入るため、下記設定を行う

sudo apt-get install avahi-daemon

続いて、PPAを設定する。

sudo add-apt-repository ppa:ubuntu-raspi

/etc/apt/sources.listを次のように書き換える

deb http://jp.archive.ubuntu.com/ports/ xenial main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
    
deb http://jp.archive.ubuntu.com/ports/ xenial-security main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
    
deb http://jp.archive.ubuntu.com/ports/ xenial-updates restricted main multiverse universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates restricted main multiverse universe
    
deb http://jp.archive.ubuntu.com/ports/ xenial-backports restricted main multiverse universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-backports restricted main multiverse universe

続いて、ロケールタイムゾーンの設定をする

$ sudo vi /etc/hosts
    → 2行目に127.0.0.1 ubuntuがあるか確認し,ない場合は追加
$ sudo locale-gen ja_JP.UTF-8
$ echo "LANG=ja_JP.UTF-8" | sudo tee /etc/default/locale
$ sudo dpkg-reconfigure -f noninteractive locales
$ echo "Asia/Tokyo" | sudo tee /etc/timezone
$ sudo dpkg-reconfigure -f noninteractive tzdata
$ sudo vi  /etc/default/keyboard
    → XKBLAYOUT="us"をXKBLAYOUT="jp" に変更
$ sudo dpkg-reconfigure -f noninteractive keyboard-configuration

ここまで来たらいったん再起動。

GUIログイン設定

パッケージをインストール

$ sudo apt install ubuntu-desktop gnome-session-flashback xserver-xorg-video-fbturbo dphys-swapfile
$ sudo  vi /etc/X11/xorg.conf
  →  以下の記載を追加(新規作成)
Section "Device"
    Identifier "Raspberry Pi FBDEV"
    Driver "fbturbo"
    Option "fbdev" "/dev/fb0"
    Option "SwapbuffersWait" "true"
EndSection
$ sudo vi  /etc/network/interfaces
   → 以下をコメントアウト
# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# See LP: #1262951
# source /etc/network/interfaces.d/*.cfg

ここまで来たらいったん再起動。その後、Ubuntuロゴをクリックするとセッションが選択できるので,[GNOME Flashback (Metacity)]を選択してログインできれば成功。

無線の設定

ここははまりかけたので注意。

まずは、電波帯の国設定

$ echo "JP" > sudo tee /etc/wpa_supplicant/wpa_supplicant.conf

続いて、/etc/network/interfacesの修正をする。

# source /etc/network/interfaces.d/*.cfg   ←コメントアウトされている事を確認

以下の4行を追加
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/[SSID名].conf
wireless-power off

その後、[SSID名前\],confを作成する。

$ sudo -s
# apt install wpasupplicant
# wpa_passphrase [SSID名] [パスワード] > /etc/wpa_supplicant/[SSID名].conf
# less  /etc/wpa_supplicant/[SSID名].conf
network={
   ssid="[SSID名]"
   #psk="[パスワード]"
  psk = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
# apt install wireless-tools

これで、"ifup wlan0" をすれば wlan0 が見える!と思いきや、、、見えない…

何故だ!?とWebを調べていくと以下のサイトを発見
github.com

どうやら2017/4/13以降のソフトアップデートが原因の様で、以下のコマンドで回避できるとのこと。

$ cd /lib/firmware/brcm/
$ sudo wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.bin -O brcmfmac43430-sdio.bin
$ sudo wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.txt -O brcmfmac43430-sdio.txt
$ sudo reboot

これで無事にWifiが見えた! よかった

次回

いよいよ ROS インストールに行きます。(先は長いなぁ)