カッコ付きの変数をわかり倒す


今回のキーワードはピンクチラシです。



さて、ロボゼロでのカッコ付きの変数の扱いについて。
オフィシャルのプログラムの中で、こんな感じのプログラムがあります。

;┌──<【POWERDOWN】サーボをオフにする >───────────────┐
:POWERDOWN
V51=0
:POWERDOWNLOOP
(V51=100
V51=V51+1
JUMPIF(V51,<,24,POWERDOWNLOOP)
V00=30
V23=30
TORQUESET
RETURN
;└───────────────────────────────────┘


このプログラムは一体なにをやっているのかというお話。
ロボゼロの冊子の中でも説明があった気がしますが、図付き攻撃を使って30秒で分かり倒します




まず、「V51=0」です。

1_20130218171511.jpg

これは変数V51という名前の変数箱に値0を代入することを意味します。さすがに楽勝です。




つぎに「(V51=100」です。これをわかり倒します。

「(V51」とは、ズバリV(V51)です。変数名自体を変数で指定しています。
と、こんなことを1年前の自分に説明してもピンとこないと思うので、
具体例と図で説明することでわかり倒します。

2_20130218171512.jpg

「(V51=100」
1)「=100」とあるので、何かの変数箱に100を代入します。
2)「(V51」とありますが、「V51」に「100」を代入するのではありません。
3)「V51」の中の値が示す変数箱に、100を代入するのです。
4)この場合はV51=0をすでに定義しているので、
  (V51 とは、ここでは V0 のこと
です。
  (V51=100 とはつまり V0=100 のことです。

これなら分かります。と思います。




では、

:POWERDOWNLOOP
(V51=100
V51=V51+1
JUMPIF(V51,<,24,POWERDOWNLOOP)


は一体何をやっているのか。

3_20130218171513.jpg

最初にまず、(V51=100 という指示で、実質的に V0=100 という代入を行っています。
この時点で、V0に100を入れるという、このプログラムの目的がちょっと達成されています。

次に、V51=V51+1 となっています。次回(V51を使う時に、V00の1つ隣のV01を示すようにする目論見です。

JUMPIF(V51,<,24,POWERDOWNLOOP)で、V5124未満なら:POWERDOWNLOOPに戻ります。
2回目の(V51=100 は V1=100 という意味になります。
同様に、3回目の(V51=100 は V2=100、4回目はV3=100・・・という風に、
サーボの個数分(0~23まで)だけ繰り返している、ということです。

これはアルバイトに例えるならば、
マンションの集合ポストに片っ端からピンクチラシを入れていく作業です。

1つずつ変数箱をずらしながら、ピンクチラシという同じ値を次々と代入しています。





最後に、

V00=30
V23=30
TORQUESET


となっています。
1番から24番までのサーボ(V00~V23)すべてのトルクの設定をひとまず100にしておき、
お目当てである、右肩の1番サーボ(V00)と左肩の24番サーボ(V23)のトルク設定だけ30に書き直しています。
とりあえず全戸にピンクチラシを機械的に入れておき、後からクレームの多い家の分だけ抜くという効率性を狙ったプログラムであることがわかります。
最後にTORQUESETで、サーボの出力を実行します。
肩のピッチサーボだけ脱力するので、腕が下がり、仰向けかうつ伏せかを判断する準備ができたことになります。




ロボワン直前にこんなネタを書いたりして・・・少し現実逃避気味です。
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

No title

喜んで作らせてもらいますよ。要件まとめて依頼下さい、自分も楽しみです。
兄弟とは腐れ縁で10年以上の付き合いだけど一度しか会ってないのが不思議なぐらいですよ。
いつかまたくだらない話を肴に盃を交わしあいたいものです。

No title

ゆてろ兄弟
なんて嬉しいことを言ってくれるんだい!震災の時もそうだったけど、ありがとMAX。
作りたいのは本当に原始的なやつで、具体的なイメージがあるので、本気でお願いします。
たぶんソレを作ってもらえたら、ソレを足がかりに欲しいツールを自作できるような気がします。
VBAというのもすごく便利そうですな。あとでちょっとかじってみます。

No title

Javascriptでいいんじゃないかな、ブラウザあればwinだろうがmacだろうがスマホでも動きますし。
Javascript使ったこと無いから軽く調べて見たけどCがある程度わかれば使える感じでした。
私はそんな感じのツール作る時はwinしか使わないのでエクセルに標準でついてるVBAを使ってます、簡単だし直感的だし使いこなせばかなり色々な事ができます。基本VB6と同じなのでネットや書籍から得られる情報も膨大です。
でもロボゼラーの兄弟にはCで作ってDos窓で動かすと雰囲気でそうなんでそれを期待かなw
最近コーディングしてないのでもし要件教えてもらえたらどんな言語でもツール作成しますよ、コメントバンバン書き込んで兄弟が改造できるようにしときます、こんな動機でもないと何も作らないし新しい言語いじる事もないです・・・
常に何かに挑戦してる兄弟に触発されながらも何もしない自分を反省です。

No title

メジャーな言語の方式に準じているのかと思ったのですが、そうでもないんですかね・・・
ロボゼロの言語はかなりシンプルな割に、やりたい事はそこそこ出来る感じで実は気に入っています。
兄弟は動く機械を制御してるんですねぇ、大人でプロなら当たり前の仕事なんだろうけど、すごいなぁ!責任重大!
C言語の本を読んだとき、ポインタはいまいち分からずじまいのまま今日に至ります。理由は使わないからなんですけど、遠からぬ未来に分かり倒したいと思います。
ロボットを作っていると、ちょっとした計算アプリぐらい自分で作れるとすごく便利だなと思います。
今は24個サーボを同時に移動指定して、一番多く移動するサーボから、その動作の最速時間をポンと出す計算機が欲しいです。
そういう計算機みたいなごく小さい計算アプリを、winでもmacでも同じプログラムで実行できるようにするには、どの言語を使えば良いのでしょう。JAVAスクリプトでしょうか?

何か面白い言語ですね、Vnn自体が変数というかIOの番号みたいな感じでカッコがポインタみたいな感じなのかな?もろハードと直結している感が武骨でかっちょいいですね。元々制御系のプログラム書いていたんで、自分のコードが目の前の大型機械を動かした感動が10年ぶりぐらいに戻ってきました。しかし抵抗だの電圧だのハードは基本からさっぱりなんで両方覚えながら遊んでる兄弟に感心しますよ。カルネジの具現化(カルネジが現実の具現化かw)面白そう!!こっそり見てますぜ!!
プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク