片足立ちさせてみる

ディープラーニングだとかセンサーのことばっかりやっていたが、久しぶりにサーボを制御しようとした。
すると、コントロールソフトAicoをJAVAにしてから、まともにサーボの制御をしていなかったのに気づいた。そのために、制御プログラムのCOSM言語がJAVAのAicoでうまく動かないのに気づいた。いろいろ直した。
それに伴ってAicoもCosmも相当改訂した。
さしあたって、ロボットに片足立ちさせて見た。

どうってことでもない。一応、ちゃんと片足で立っている(左足の隙間!!、笑)。
この動きの間、センサーとサーボ角度を全て記録するようにモニターさせた。Cosmのプログラムで制御できる。モニターは、サーボの制御とは別スレッドで動かしている。それを実現するために、I2Cの1チャンネルはサーボだけに割り当てた。センサーは、全てSPIにぶら下げている。

よくみると、正常に動いていないセンサーがある。おい、どうなっているの。
モニターの結果として、うまくいった場合の評点を与えるようにしている。それを通して、倒れてしまうようなまずい状態と、そうでない状態の識別、サーボのコントロールの仕方を強化学習、深層学習をさせようと思っているのに!!
それと、倒れても壊れないように、部屋に太めの鉄線を渡して、そこにぶら下がるようにした。
Cosmのプログラムは以下の通りだが、使っていないスピードやサーボ角度の定義も入っている。
#######################################
# ashiro1-9.cosm
# 2017年6月29日
# 再び1から作り直す
#######################################
%param foot_rest 25 # 足関節の緩和角度
%param null_angle 0 # ゼロ角度
%defspeed slow {
interval:10
steps:40
}
%defspeed normal {
interval:5
steps:40
}
%defspeed fast {
interval:3
steps:10
}
# 右へ
%defangles leg_stand {
RightUpperRight:$null_angle
RightUpperLeft:$null_angle
LeftUpperRight:$null_angle
LeftUpperLeft:$null_angle
}
%defangles foot_rest {
RightLowerRight:-$foot_rest
RightLowerLeft:-$foot_rest
LeftLowerRight:-$foot_rest
LeftLowerLeft:-$foot_rest
# 前後はさしあたってゼロにしておく
RightLowerFront:$null_angle
RightLowerBack:$null_angle
LeftLowerFront:$null_angle
LeftLowerBack:$null_angle
}
%defangles right_leg_phase_1 {
# これだけ完全休息から少し戻しておく
RightLowerRight:28
RightLowerLeft:-28
#
RightUpperRight:28
RightUpperLeft:-28
LeftUpperRight:20
LeftUpperLeft:-20
}
%defangles right_leg_phase_2 {
RightLowerRight:45
RightLowerLeft:-45
RightUpperRight:-5
RightUpperLeft:5
LeftUpperRight:23
LeftUpperLeft:-23
}
%defexec walk1 {
monitor:start
##
stand:all
speed:normal
# ゆっくり右に倒す
setAngle:right_leg_phase_1
delay:500
# ゆっくりと重心のない足を上げる
speed:slow
setAngle:right_leg_phase_2
##
monitor:stop
# この行動に評価を与える
rating:set
}
#以上は全て定義
#以下が、定義以外の実行コマンド
%exec walk1 1