#Intel Edisonを使ったロボット
UART経由でシリアル通信を行ったIntel Edisonで動くロボットに挑戦!!
【仕様】
・WEB画面(Node.js or python)でロボットを操作
・音声認識、画像認識で動作
今回、音声認識や画像認識を行う予定なのでEdison上のYocto linuxをRebuildを実施。
(EdisonでUSBビデオやUSB音声を扱うのにOSイメージのRebuildが必要)
#Yocto linux Rebuild手順(ubuntu作業)
準備したもの
・ubuntu-14.04.1-server(VM :CPU: 2, MEM: 4G, Disk: 50G)
##1.コンパイルに必要なパッケージをインストール
$ sudo apt-get install build-essential git diffstat gawk chrpath texinfo libtool gcc-multilib
##2.インストールに必要な設定
$ git config --global user.email "******@gmail.com"
$ git config --global user.name "tsunaki"
# 一時ディレクトリの作成(どこでもOK)
$ sudo mkdir -p /temp/bitbake_download_dir
$ sudo mkdir -p /temp/bitbake_sstate_dir
$ sudo chmod 777 -R /temp
##3.LinuxイメージをDownLoadする
ここからをwgetなどでDownLoad(Edison Linux source files)
$ wget http://downloadmirror.intel.com/24389/eng/edison-src-rel1-maint-rel1-ww42-14.tgz
$ tar xvf edison-src-rel1-maint-rel1-ww42-14.tgz
$ cd edison-src
##4.build初期設定
$ ./device-software/setup.sh --dl_dir=/temp/bitbake_download_dir --sstate_dir=/temp/bitbake_sstate_dir --bb_number_thread=8 --parallel_make=8
# buildに必要な環境変数を設定
$ source poky/oe-init-build-env
##5.カーネルのbuild
スペックにもよりますが、かなり時間が掛かります
# build
$ bitbake virtual/kernel
##6.カーネル設定
$ bitbake linux-yocto -c menuconfig
メニュー画面で以下を設定して<save>する
■ Video設定
Device Drivers
Multimedia support
Media USB Adapters
USB Video Class [M] ←ここを設定
UVC input events device support
■ Sound設定
Device Drivers
Sound card support
Advanced Linux Sound Architecture
USB sound devices [M] ←ここを設定
※終了は<Exit>で階層があがるので、最初のページまで実行すればOK。
##7.カーネルのRebuild
終わったら,設定した.configをコピーする。
$ cp tmp/work/edison-poky-linux/linux-yocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standard-build/.config ../device-software/meta-edison/recipes-kernel/linux/files/defconfig
# rebuild
$ bitbake virtual/kernel
##8.全体のbuild
$ bitbake edison-image
※ build中にwarningが出ても問題なし。
##9.Edisonへ焼き込み
以下のコマンドで,Edisonに焼き込むファイルをtoFlashフォルダにまとめる。
$ ../device-software/utils/flash/postBuild.sh
ここから実際にEdisonに焼き込みを行う。
※先ずはEdisonとubuntuは接続しないでおく
$ cd toFlash
$ sudo ./flashall.sh
[sudo] password for slavey:
Using U-Boot target: edison-default
Now waiting for dfu device 8087:0a99
Please plug and reboot the board
# ↑これが出たらEdisonのUSB OTGを接続する。
焼き込みが完了したら、とりあえずEdisonの電源を切ってubuntuと切り離す。
##10.ここからEdisonでの作業
Mac側でEdisonへシリアルログイン
$ screen /dev/tty.usbserial-A703ZARJ 115200 -L
User : root
Pass : なし
先ず、USB接続が認識されていることを確認
USB OTGを外部機器で利用する際は電源供給をUSB以外から行う必要がある。
Intel Edison Breakout Board Hardware Guideを見ると、J21から7v〜15vを取得できるとのこと。
# ドライバを認識しているかの確認
root@edison:~# lsmod
Module Size Used by
uvcvideo 71516 0
videobuf2_vmalloc 13003 1 uvcvideo
videobuf2_memops 13001 1 videobuf2_vmalloc
videobuf2_core 37707 1 uvcvideo
usb_f_acm 14335 1
u_serial 18582 6 usb_f_acm
g_multi 70703 0
libcomposite 39245 2 usb_f_acm,g_multi
bcm_bt_lpm 13676 0
bcm4334x 574851 0
root@edison:~# lsusb
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 056e:7016 Elecom Co., Ltd
Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
認識されているのを確認したら、Edisonの初期セットアップ
# PASSWORD, WIFIの設定
$ configure_edison --setup
# Package Managerの設定
$ vi /etc/opkg/base-feeds.conf
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
$ vi /etc/opkg/intel-iotdk.conf
src intel-iotdk http://iotdk.intel.com/repos/1.1/intelgalactic
src intel-all http://iotdk.intel.com/repos/1.1/iotdk/all
src intel-i586 http://iotdk.intel.com/repos/1.1/iotdk/i586
src intel-x86 http://iotdk.intel.com/repos/1.1/iotdk/x86
# Package Update
$ opkg update
$ opkg upgrade
##11.オーディオ入出力ツールをインストール
opkgでALSAをインストール
$ opkg install alsa-utils
##12.音声を出力
テスト用のサウンド(test.wav)準備して音声出力
$ aplay -D plughw:1,0 test.wav
イヤホンから音が出ている確認ができました。
##13.Edisonロボット接続
サーボコントローラを操作はシリアル通信で行うため、EdisonのUART設定を行う。
UARTはGalileo開発ボードのPIN0/PIN1(/dev/ttyMFD1)を利用。
UARTを使うにはGPIOのmodeを変更しなければ行けないらしい?!
※Intelのmraaでmraa_uart_init(0);でもOKみたいです。
mraa: uart.h File Reference
以下コマンドを実行してmode変換
$ echo 214 > /sys/class/gpio/export 2>&1
$ echo high > /sys/class/gpio/gpio214/direction
$ echo low > /sys/class/gpio/gpio214/direction
$ echo 131 > /sys/class/gpio/export 2>&1
$ echo mode1 > /sys/kernel/debug/gpio_debug/gpio131/current_pinmux
$ echo 249 > /sys/class/gpio/export 2>&1
$ echo high > /sys/class/gpio/gpio249/direction
$ echo 1 > /sys/class/gpio/gpio249/value
$ echo 217 > /sys/class/gpio/export 2>&1
$ echo high > /sys/class/gpio/gpio217/direction
$ echo 1 > /sys/class/gpio/gpio217/value
$ echo out > /sys/class/gpio/gpio131/direction
$ echo 0 > /sys/class/gpio/gpio131/value
$ echo 130 > /sys/class/gpio/export 2>&1
$ echo mode1 > /sys/kernel/debug/gpio_debug/gpio130/current_pinmux
$ echo 248 > /sys/class/gpio/export 2>&1
$ echo low > /sys/class/gpio/gpio248/direction
$ echo 0 > /sys/class/gpio/gpio248/value
$ echo 216 > /sys/class/gpio/export 2>&1
$ echo in > /sys/class/gpio/gpio216/direction
$ echo in > /sys/class/gpio/gpio130/direction
$ echo high > /sys/class/gpio/gpio214/direction
このあとNode.jsのserialportで接続の確認ができ、Wifi経由でロボット操作が可能になりました。
ここまでで、なんだかんだ2日も掛かりました。
このあと音声認識と画像認識の組込みを行う予定です。
ただ、Edisonの外部機器とサーボ9軸への電源供給が課題。。。