ロボアクター制御ライブラリの作成

KURO-RS 玄柴(KURO-SHEEVA)

ロボアクター のリモコンを KURO-RS で学習できたので、 次は送信するためのプログラムを作る。

構想

使用言語はシェルスクリプト!
一々 rs_send filename 1 /dev/ttyUSB2 とか書いていられないので、 ライブラリ化し、
forward () {
	rs_send forward 1 /dev/ttyUSB2
}
forward
というふうにしたい と言うわけで、
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ ls
ALL_DEMO BURP HIGH5 LEFT_ARM_PICKUP LEFT_ARM_THUMP R RIGHT_ARM_STRIKE1 RIGHT_ARM_UP STEP
ARMS_IN DANCE L LEFT_ARM_STRIKE1 LEFT_ARM_UP RIGHT RIGHT_ARM_STRIKE2 RIGHT_TURN_STEP TALK_BACK
ARMS_OUT DEMO1 LEFT LEFT_ARM_STRIKE2 LEFT_TURN_STEP RIGHT_ARM_DOWN RIGHT_ARM_STRIKE3 ROAR TILT_BODY_LEFT
BACKWARD DEMO2 LEFT_ARM_DOWN LEFT_ARM_STRIKE3 LISTEN RIGHT_ARM_IN RIGHT_ARM_SWEEP S TILT_BODY_RIGHT
BACK_STEP EXECUTE LEFT_ARM_IN LEFT_ARM_SWEEP OOPS RIGHT_ARM_OUT RIGHT_ARM_THROW SLEEP WAKEUP
BULLDOZER FORWARD LEFT_ARM_OUT LEFT_ARM_THROW POWER_OFF RIGHT_ARM_PICKUP RIGHT_ARM_THUMP SONIC WHISTLE
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ ls | wc -l
54
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$
54個の関数を作ってライブラリにする。

プログラミングはシェルスクリプトで

54個の関数を手で作ってられないので、 ライブラリのソースを書くシェルスクリプトを作る
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ cat makelib.sh
#!/bin/sh
echo 'RS_SEND=${RS_SEND:-/usr/local/bin/rs_send}'
echo 'ROBOACTORDIR=${ROBOACTORDIR:-/usr/local/lib/kuro-rs/roboactor}'
echo 'ROBOACTORCHANNEL=${ROBOACTORCHANNEL:-1}'
echo 'ROBOACTORPORT=${ROBOACTORPORT:-/dev/ttyUSB0}'
echo
for FILENAME in [A-Z]*
do
 FUNCNAME="boroactor_"`echo $FILENAME | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
 echo $FUNCNAME'() {'
 echo ' $RS_SEND' '$ROBOACTORDIR'/$FILENAME '$ROBOACTORCHANNEL' '$ROBOACTORPORT'
 echo '}'
 echo
done
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$
実行する
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ sh makelib.sh> libroboactor.sh
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ head libroboactor.sh
RS_SEND=${RS_SEND:-/usr/local/bin/rs_send}
ROBOACTORDIR=${ROBOACTORDIR:-/usr/local/lib/kuro-rs/roboactor}
ROBOACTORCHANNEL=${ROBOACTORCHANNEL:-1}
ROBOACTORPORT=${ROBOACTORPORT:-/dev/ttyUSB0}
boroactor_all_demo() {
 $RS_SEND $ROBOACTORDIR/ALL_DEMO $ROBOACTORCHANNEL $ROBOACTORPORT
}
boroactor_arms_in() {
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$
できた。

デバッグ

テストプログラムを作って確認
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ cat /tmp/roboactor_test.sh
#!/bin/sh
. /usr/local/lib/kuro-rs/roboactor/libroboactor.sh
ROBOACTORPORT=/dev/ttyUSB2
roboactor_forward
roboactor_left
roboactor_right
roboactor_stop
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ sh /tmp/roboactor_test.sh
/tmp/roboactor_test.sh: 7: roboactor_forward: not found
/tmp/roboactor_test.sh: 8: roboactor_left: not found
/tmp/roboactor_test.sh: 9: roboactor_right: not found
/tmp/roboactor_test.sh: 10: roboactor_stop: not found
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$
目を疑うが、、、「ぼろあくたー」ではあかんな。
修正
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ vi makelib.sh
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ sh makelib.sh> libroboactor.sh
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ !head
head libroboactor.sh
RS_SEND=${RS_SEND:-/usr/local/bin/rs_send}
ROBOACTORDIR=${ROBOACTORDIR:-/usr/local/lib/kuro-rs/roboactor}
ROBOACTORCHANNEL=${ROBOACTORCHANNEL:-1}
ROBOACTORPORT=${ROBOACTORPORT:-/dev/ttyUSB0}
roboactor_all_demo() {
 $RS_SEND $ROBOACTORDIR/ALL_DEMO $ROBOACTORCHANNEL $ROBOACTORPORT
}
roboactor_arms_in() {
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$
再度テストプログラムの実行
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ sh /tmp/roboactor_test.sh
/usr/local/lib/kuro-rs/roboactor/FORWARD - 1 - /dev/ttyUSB2
port open err [/dev/ttyUSB2]
/usr/local/lib/kuro-rs/roboactor/LEFT - 1 - /dev/ttyUSB2
port open err [/dev/ttyUSB2]
/usr/local/lib/kuro-rs/roboactor/RIGHT - 1 - /dev/ttyUSB2
port open err [/dev/ttyUSB2]
/tmp/roboactor_test.sh: 11: roboactor_stop: not found
yasunari@debian:/usr/local/lib/kuro-rs/roboactor$ su
Password:
root@debian:/usr/local/lib/kuro-rs/roboactor# sh /tmp/roboactor_test.sh
/usr/local/lib/kuro-rs/roboactor/FORWARD - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/FORWARD]
/usr/local/lib/kuro-rs/roboactor/LEFT - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/LEFT]
/usr/local/lib/kuro-rs/roboactor/RIGHT - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/RIGHT]
/tmp/roboactor_test.sh: 11: roboactor_stop: not found
root@debian:/usr/local/lib/kuro-rs/roboactor# sh /tmp/roboactor_test.sh
/usr/local/lib/kuro-rs/roboactor/FORWARD - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/FORWARD]
/usr/local/lib/kuro-rs/roboactor/LEFT - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/LEFT]
/usr/local/lib/kuro-rs/roboactor/RIGHT - 1 - /dev/ttyUSB2
Send File : [/usr/local/lib/kuro-rs/roboactor/RIGHT]
/tmp/roboactor_test.sh: 11: roboactor_stop: not found
root@debian:/usr/local/lib/kuro-rs/roboactor#
root でないと /dev/ttyUSB2 にアクセスできないとか、
なぜか stop がないとか、、、なぜ?

まだ楽しめそうである。




←(前のページ)
ロボアクターのリモコンの学習(2)
当月のハックの記録
SheevaPlug/玄柴(KURO-SHEEVA)をハックしよう トップ (次のページ)→
バッファローダイレクトにまさかの再入荷

Copyright (C) 2003-2010 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市

AltStyle によって変換されたページ (->オリジナル) /