2013.12.24先週はアクセスが少なくて、がっかりしてガチ系のブログを書くのやめようかと悩んだyukiです。FBで友達に聞いたら、ガチ系の技術ブログはロングテイルだからと励ましてもらって気を取り直したところです。ところで、皆さん、ネコは好きですか?私はネコと遊んでみたいと思うときはネコ喫茶に行くのですが、世の中なかなか相性のいいネコというものがいません。秋葉のネコ喫茶でも、いっぱいネコいるのに、1匹しか私と遊んでくれません...。ネコハーレムを作っている常連さんがうらやましい限り。ネコとの相性がよくて、触らせてくれたり、遊んでくれたりすると、プロトコルが合ったとか勝手に思って喜んだりします。ネコと戯れるのはいろいろ発見があってよいですね。harem.ここでプロトコルというのは、通信手順のことをいいます。ネコとの対話(?)において、ネコが気に入る手順でアプローチできたということです。ネコが気に入ってくれたので、遊んでくれる。ここは、インタラクティブな知能、相手がこう思っているだろう、ここではネコが気に入ってくれるだろうという観察に基づく仮説と実行するための行動計画がなされているわけですね。ネコが遊んでくれれば、うまくいったということでフィードバックされて学習もします。人間ってなんてすごいんだろうって思う瞬間です。wΣ(@o@)これだけだとただのプログラムオタのネコ好き話で終わってしまう。高尚なことを話さないと!!ロボットを作るときは知的な動作をさせたいと思うものです。知能は、観察者によって発現する、というのは人工知能研究者にはよく知られた言葉です。私ごときが言っても信じてもらえないとおもうので、エピソードを紹介すると。私に、サブサンプションアーキテクチャは奥さんの実家で何もすることがなかったんで、蟻の群れを見てて思いついた。飲みに行ったカラオケ屋で話してました。「ネコと戯れる」、こんなところにも、よくよく観察すると人工知能問題が隠れていたりして、面白いです。皆さんの周りにも潜んでいると思うので探してみてください。wさて、皆さん、先週のプログラムは動きましたか?今日は、先週のプログラムの解説としてDynamixelを動かすためのプロトコルに切り込んでいきます。Dynamixelの場合、プロトコルと言っても単体で動かす場合は、パケットと呼ばれる通信する一連のデータを作って、シリアルで送り込むだけなので、割とシンプルです。パラメータの構造から見て行きましょう。MX-64Rのマニュアルを見てください。ここから抜粋した下記がMX-64Rのパラメータ用のマッピングです。(0X00)これは、メモリーマップと言って、サーボのボードCPUのメモリに書いてある内容です。この番地に書き込んだデータが、サーボの制御に使用されるため、ここを書き間違うとサーボが壊れて工場に修理送りになりますので要注意です。(ファームを壊さなければほとんどの場合は手元で直せますが、うちはいろいろ試しすぎてファームからぶっとばしていくつか壊しました。w)サーボは、RS485でパケットと呼ばれる一連のコマンド列を読み取ります。このコマンド列であるパケットは次のようになっています。パケットの中身を細かく見て行きましょう。ON)を押したときの動作の関数となるプログラムをあわせて見てください。0xFFで始まります。これは、パケットの始まりであることを示します。ことをヘッダーといいます。ここ、とても重要ですので、またこの先の連載でも解説します。次は、サーボのIDです。サーボはマップの4番目を見ると1バイトデータです。原理的には255までIDが設定できることになります。Dynamixelでは、254がブロードキャストIDと言って、一斉通信をするためのIDになりますから、1~253までが使えるIDになります。手持ちのもので、サーボを買ったばかりであれば、IDは1になっているはずです。ID設定を変えているのであれば、そのIDを指定します。プログラムの5行目と10行目を見てください。5行目のプログラム中のマーカーになっている部分がIDの番号設定です。下のプログラムで書いてある10行目の(id&0xFF)は、byte型にキャスト(型あわせの意味)するために確実に8ビット分のデータを確保するためのものです。//ID次は、11行目、Length(長さ)を指定します。これは、パラメータのバイト数+2(チェックサムと指令の分らしい)の数値を設定します。253までの長さのパラメータが設定できることになります。したがって、パラメータはどんなに長くても、253個までです。今回の設定では、LEDを設定するので、マップをみるとLEDのパラメータは1バイトです。ON/OFFの1バイト指令しかありませんから書き込むマップの場所は1バイト、パラメータは1バイトの合計2バイト+規定の2バイト=4となります。次のバイト12行目は、コマンド指令です。このパケットがサーボに何をさせたいのかを指令します。コマンドはいろいろあるのですが、今回はREAD/WRITEに限ります。READのコマンドは2、WRITEのコマンドは3です。READは、サーボに状態を聞いて返信させるコマンドです。WRITEは、サーボに指令を与えるコマンドです。今回はLEDのON/OFF指令を与えますのでWRITE=3を使います。その次13行目がLEDのマップアドレスです。このマップの番地にパラメータを書き込むことによって、サーボはそのデータを読み出して動作します。マップで見るとLEDの番地は、0x19(16進数)です。その次14行目は、LEDのマップ番地に書き込む変数です。マップの解説によると1バイトです。ここでは、LEDをON=1にしたいので、1を書き込みます。ここまででパラメータができました。このようなマップを使ってサーボへの指令を送るパケットを作ります。ここで15行目に、数値ではなくチェックサムを計算して返す関数が最後に来ています。Sum)とは誤り検出符号の一種です。チェックサムとして符号値そのものを指すこともありますが、Dynamixelでは計算する必要があります。前の週に書き足してもらった次のプログラムを見て下さい。byteという型になっています。byte型になっています。Dynamixelのチェックサムは、IDから最後のチェックサムの一つ手前までのバイトをすべて足し算した数値の1バイト分の補数の数値になります。IDは先ほど説明したパケットでは3番目(C#では、0から数えはじめるので3番目は2です。i=2)から最後の一つ手前packet.Length-1までです。そのようにfor文でループさせて計算します。ところで、1バイト=255までの数字ですから、byte型は最大255までで計算をする必要があります。計算するとどう考えても足し算していったら255を越えてしまいます。そこで、数値としては4バイトまで数えられるint型で計算して、最後にbyte型に変換するという方法をとります。計算式で見ると、checksumはint型(4バイト)で計算してますね。0xFFになっています。&0xFFで1バイト分を切り出しています。最後の最後でbyte型に変換しています。チェックサムを計算してパケットにつけて送ることで、パケットの内容が合っているかどうかをサーボ側、PC側でも確認ができます。#ちなみになぜかDynamixelはパケットのチェックサムが間違っててもサーボはコマンドを実行しますので注意。一応チェックサムが間違ってるとパケットが間違ってるよという返事もきます。今回作ったパケットは、このような内容でした。このように、byte型を使って、パラメータとパケットの作り方がわかれば、あとはシリアルポートから送るだけです。この手順(プロトコル)は17~21行目に書いてあるように思いきり簡単です。シリアルポートが開いているか確認する。size);皆さん、シリアルポートの設定とByteの扱いはなんとなくつかんでいただけたでしょうか?これからいろいろ便利な(複雑な?)プログラムを追加していきます。次回は、デバイスマネージャーをいちいち見に行かなくてもシリアルポートを読み込む設定について解説します。お楽しみに!ロボコンマガジン、ぜひどうぞ。マイクロものづくりは最近話題の本。Blog関連記事ショップからの重要なお知らせDCモータを使ったマイクロマウス入門1佐倉です。昨日と本日の2日間、マイクロマウス合宿2013に参加してきました。昨日は、電気回路再入門と、ステッピングモータの解説をして、オリエンタルモーター株式会社さんのマイクロマウス向けステッピングモータ無償提供のご紹介をしました。丸...ショップからの重要なお知らせ【C#連載】とりあえず通信にトライ!先週末は、ネコ店長にくっついて、巌流島に行ってきました。嵐の前だったのと島なので、ものすごい風でネコ店長も大変でした。ロボットは風が強いとなかなか体制を維持するのが大変ですね。見せていただきました。取りだして見せていただいたボードの第1印象は、「小さい」ですね。ショップからの重要なお知らせロボットに役立つC#講座ショップのリニューアルにあたり、スタッフはそれぞれ得意なことを生かして営業日には持ち回りでブログを書くということになったのは皆様ご存知のとおりです。ASIMOにて開催されましたチロルチョコロボット大会8は無事終了しました。皆さんお疲れ様でした。後半時間が足りなくなってしまったのは申し訳ありませんでした。リザルト等は公式サイトをご参照いただきますと...ショップからの重要なお知らせ工場見学に行ってきました!こんにちは。今日は、昨日と打って変わって肌寒いお天気ですね。さむ~い冬が好きな私は、ちょっとうれしいです。SHOPコーポレートサイトホーム検索トップサイドバータイトルとURLをコピーしました。