ロボット作ろう:シェーキー製作記
移動テストの動画を撮りました。
シェーキーにコマンドを送るには、パソコンからTeraTermで内蔵したネットタンサーのネットワークユニットに接続します。TeraTermはTCP接続にも対応しているので、こんなときには重宝します。
これは動画撮影のためにROLLTOコマンドでロボットを動かした様子です。
ロボットは最初 X=0 Y=0 においてあります。"ROLLTO 100 0"はX=100,Y=0へ移動しろというコマンドで、実行後、座標値と方向をタイプしてDONEを返します。この例では、99.6 0.0 0.0ですから、X=99.6、Y=0.0、方向0.0ということになります。このログは実際に動画でロボットに送ったコマンドです。動画とあわせてご覧ください。なお、座標の単位はcmです。
動画がこれです。床にテープで50cmごとに印がつけてあるので、移動精度の目安としてください。
気になる精度ですが、思った以上によいようです。実際のところ、数十回コマンドで動かしても大きくずれていくようなことは感じられませんでした。まあまあ目的の位置に素直に移動します。
近いうちにマップの作成機能の動画も撮ろうかと思っています。
ロボット作ろう:シェーキー製作記
以前、PSDの電圧出力を距離に変換する方法について投稿しました。その記事では変換式については説明しましたが、式の係数の求め方は、5球スーパーのトラッキング調整のように、近い距離、遠い距離で交互に調整していくという方法で、値は目の子で決めるようになっていました。
改めて考えてみると、未知のパラメータが二つの連立方程式なので、これを解けば一発で係数を決めることが出来るはずです。そこで、エクセルでこんな変換表を作ってみました。

おさらいをしておくと、浮動小数点での変換式は下記のようになっています。
距離(cm)=係数A / (電圧 + オフセットB)
つまり、PSDの電圧/距離のグラフを双曲線で近似しようという訳です。
PSDを動作させ、最近距離付近での電圧と距離の実測値と、最大距離の70%くらいでの距離と電圧の実測値を黄色のセルに入力すると、自動的にA,Bを計算し、変換式を完成させてくれます。PSDの種類は問いません。
実測するには写真のようにPSDをしっかり固定し、写真のようにPSDの最前面から対象物までの距離を測ります。

対象物は十分に大きなも白っぽい平面を用意します。写真ではノートパソコン用のトートを使っていますが、壁を使う手もあります。電圧はデジタルテスターで、距離はスチールメジャーなどで測定します。

先ほどの計算表の値は、実際に手持ちのGP2D12(GP2Y0A21の旧品番)を測定したものです。テストのセルに任意の距離での電圧を入れ、計算値と実測値をくらべたところ、おおむね0.5〜3cmくらいの誤差には入っているようでした。全体的に実際の距離より近めになるようです。また、近い方の距離の実測値がたとえば10cmだったとき、これを10.5cmなどと少し大きめに入力すると、距離の誤差が小さくなるという現象もみられました。
この計算式で別のGP2D12も試してみました。やはり個体差はあり、誤差は大きくなりますが、同じ計算式でも実用上は問題なさそうでした。
計算表のエクセルファイルはこれです。簡単ですがインストラクションも書いてあります。
「psd.xls」をダウンロード
浮動小数点の式だけではなく、mV入力でmm単位の距離を返す32bit整数版の式も同時に作れるようになっていますので、PIC16シリーズなど、浮動小数点演算が苦手のマイクロコントローラにも応用できます。
この計算表で作った変換式をプログラムに組み込んでおけば、距離が直接読めるので何かと便利です。
ただ、もともとPSDの測距結果は対象物によって精度はまちまちですから、この変換式も目安として使うべきでしょう。
ロボット作ろう:シェーキー製作記
シェーキーのソフトウェアもだんだん格好がついてくると、今までなあなあにしていた問題点が浮上してくるもので、最近はそれを潰すのに時間を割かれるようになりました。
その中でも致命的なのがAD変換でおかしな値を読み込むトラブルです。今回の投稿はこれの対策のお話です。
本機では、4ch分のAD変換値をDMAで周期的にメモリに展開し、アプリケーションからはこのメモリを参照することでアナログデータを取得するようにしています。これはSTM32ではポピュラーな手法のようです。
今回問題になったのは、リセット後AD変換の結果として非常に大きな値が読み込まれることがあるということです。本機ではAD変換の分解能を12ビットに設定しているので、最大値でも4095のはずですが、変換値が11342とか23044とかというありえない値になってしまうのです。しかもこの現象は再度リセットするまで継続し、また、リセットしても間が悪い(?)とまた同じ結果になってしまうというタチの悪いものです。
おかしな値になっても、読み込むたびに若干変動するのでAD変換はしているようですが、何が起こっているのでしょう。
デバッガから起動した場合よりも、USBケーブルをはずしてスタンドアロンで起動した場合に高い確率で発生します。
これはかなり具合が悪い。なにか未設定のビットでもあるのかと調べましたが見つからずじまい。結局試行錯誤の結果、下記のように初期化シーケンスを組むことで何とかすることができました。
初期化シーケンス
電源投入(パワーオンリセット)
1・サーボパルス発生
2・100msほど(forループで)待つ
3・AD(DMA転送設定)開始
4・USART設定
5・GPIO設定
6・SysTick割り込み設定
最初にサーボを初期化するのは、速やかにサーボパルスを発生し、電源投入時にサーボが暴れるのを防ぐためです。そのあと、100msほどおいてからAD変換の設定をします。対策前はこの時間遅れがなく、即座にADを初期化していました。これを入れただけで現時点では問題は再発していません。
なお、時間遅れの部分は
uint32_t ii;
for(ii=0; ii<1000000; ii++){
}
という時間つぶしループで実装しています。
トラブルが起こってないかどうかは、シェーキーにバッテリ電圧読み出しコマンド"CHKBATT"を送ればわかります。正常なら12Vくらいの数値が返ってきますが、初期化に失敗していると200Vとかの値が返ってきてびっくりします。
うーむ、原因がわからないので気分が悪いけど、まあしょうがないですね。現時点ではこれでいきましょう。
管理人のページ:
先日来、ちょっと毛色の変わったホームロボットの企画を進めています。机上プランの検討や予備実験を済ませ、主要部品を集める段になってコレに気づきました。
カメラのスペースがあまり取れなさそうなので、以前試用した超小型Wi-Fiカメラ、プラネックスのCS-W07G-CYを使うことにしたのですが、なんとデスコンになってしまったみたいです。ホームページでは「終息」となっています。
技術的な問題があったのか、安い割にあまり売れなくて打ち切られたか、はたまた盗撮などのトラブルがあったのか、そこら辺はわかりませんが、ともあれ、使いやすい部品がまたひとつなくなってしまったのは確かです。
残念。他のカメラを探さなくてはなりませんね。
ロボット作ろう:シェーキー製作記
組み込んだコマンドインタプリタを利用してオドメトリの校正作業を楽しんでいます。写真のようなゾンビ状態ですが。
移動系のコマンドは、元祖Shakey先輩に倣って下記のようになっています。
ROLL 距離(cm) 浮動小数点。プラスで前進、マイナスで後退
TURN 角度(degree) 浮動小数点。プラスで反時計回り、マイナスで時計回り
ROLLTO X座標 Y座標(cm)
TURNTO X座標 Y座標(cm)
TOのついているコマンドは、マップ座標系の特定の位置へ直線移動したり、その座標位置に向かって旋回したりするモノです。
校正作業は、コマンドのパラメータと実際の運動量を比較して、STM32F4に実装したオドメトリの係数を調整する訳ですが、どうもうまくいきません。改めてロボットの運動を観察すると直進でぐぐっと左に曲がってしまうことに気がつきました。1mほどの直進中、次第に左に曲がってゆき停止時には5度以上も左を向いています。しかもオドメトリではまっすぐ進んだことになっています。なんと! ベースだけでテストしていたときにはこんなことはなかったのに! これではだめですね。
本機の直進補正はこの投稿で書いたように、左右の駆動輪のトリップメーターを比較して、先へ行ってる方のモーターのPWMパルスを0にする、つまり瞬間的にパワーを切るという方法で行っています。単純ですが効果的な方法です。
駆動輪のインタラプタを二相に変更したばかりなので、もういちど波形観測やドライブサーバのソフトの確認をしてみましたが、これといって問題は見当たりません。
次に内部シリアルバスに直接パソコンからアクセスして左右トリップカウンタの値を連続的に読み出してみましたが、走行中常に両者の差は±1カウント以内です。
次に馬を入れて駆動輪を浮かせ、ホイールに黒いビニールテープでマークをつけて、停止位置がずれるかどうかを確認しました。これもOK、左右とも同じ位置で停止します。
となると、タイヤと路面のスリップが疑わしくなりますが、路面はフローリングの床でグリップはよく、駆動輪のタイヤがこれほど滑るとも思えません。
ではホイールに対してタイヤが滑っているのでしょうか? そこで、ホイールとタイヤにこの写真のようにビニールテープの切れ端で印を付け、走行実験をしてみました。
銀色の駆動輪下部の四角いマークがホイールのマーク、ちょっと見にくいですが、テープを長方形に切ったものを踏ませる形でタイヤに張り付け、これをタイヤ側のマークとしています。これを1m走行させた結果がこれです。
ご覧の通り、タイヤとホイールのマークがずれています。タイヤがおいていかれる形ですがら、当然左側の回転数が足りなくなり、車体は左を向いてしまいます。ここで滑っていたのですね。観察するとどこかでがくんとずれるのではなく、走行中次第にずれてゆくこともわかりました。そこで、タイヤとホイールの間に瞬間接着剤を流し込んで固定しました。
本機の駆動輪はアルミプーリーにOリングのタイヤをはめています。はめ込んだだけですが結構しっかりはまっていて、手でタイヤだけをまわそうとしても回るものではありません。まあこれで大丈夫だろうとタカをくくっていたのですが、重量が増えてくるとこれが回ってしまうのですね。大きなものはいろいろと大変です。
接着後は大きな問題もなく、なかなかの精度で動いています。
ロボット作ろう:シェーキー製作記
以前投稿したように、TrueSTUDIO Liteの最新バージョンはコードサイズの上限が32KBになりました。僕は以前ダウンロードした古い、コードサイズ制限なしのインストーラを持っているので、これをネットブックにインストールできるかどうか試してみました。
やはり、使い捨ての暗号を使って認証する際に、「もっと新しいバージョンがあるのでそちらを使え」というメッセージが出てアクティベートできません。現在使っている旧バージョンがクラッシュしたらおしまいです。早いとこ乗り換えを進めなくてはなりませんね。
STM32F4はFLASHもRAMもたっぷりあるので、H8やPICなんかのようにケチケチしないでコードがかけるのはありがたいことです。
もちろん、ホストとの通信もsprintfやsscanfを使っているので、大変に楽です。そのかわり、コードサイズもそれなりに大きくなりますね。
現在オドメトリでロボットの位置や進行方向の計算とコマンドインタプリタくらいの実装で、すでに38KBくらいになっています。math.h、stdio.h、stdlib.hをインクルードしています。これくらいになるとほとんどパソコンでソフトを作っているのと同じような感じでいけます。さすがSTM32F4、たいしたもんです。
なにか写真がないのは寂しいので、シェーキー頭部の後ろ側の写真を載せておきます。このケーブルは4芯の細いロボットケーブルです。しなやかで曲げ耐久があるのでこのような用途にはもってこいです。マルツパーツなどで5mの袋詰めにして販売しているので、アマチュアにも使いやすいものになっています。
ロボット作ろう:シェーキー製作記
近況報告です。
充電器の電源に電流計を追加し充電状態が分かるようにしました。こんなものです。
プラケースにACアダプタを入れ、1Aの電流計をつけました。通常充電では600mAくらい流れることが多いようです。充電終了時には50mAくらいになります。満充電で充電したままロボットの電源をONにすると400mAくらい流れます。
充電器をつないでおけば一日中動作したままにすることが出来るので、ソフトの開発作業はやりやすいです。
アンテナはこの写真のように胴体内部に搭載しました。真ん中あたりに見える黒い横棒がそれです。外装はプラスチックと木材なので、通信状態は問題ないようです。もっとも、このようにアンテナを寝かして実装すると指向性が出るのであまりよくはありません。
現在オドメトリのソフトをテストしています。制御系のソフトだと演算は整数化して行うことが多いのですが、三角関数が必要になるとそういう訳にもいかず、パソコンソフトのようにdoubleで演算する必要があります。これまでに作りためたソースコードをがたがたと組み合わせていくのですが、整数化している部分もあり浮動小数点の部分もありで意外と大変です。
旋回精度の調整はこのように行いました。この写真のように、シャーシにレーザーポインタを取り付け、壁にスポットを当てます。ここでロボットを360度旋回させたとき、同じ場所にスポットがくるようにパラメータを調整しました。
旋回角度の測定は難しいので、このようにすれば簡単です。
ロボット作ろう:シェーキー製作記
シェーキーにはロングレンジ測距用としてGP2Y0A710K、ミドルレンジ測距用としてGP2Y0A02YK、二つのシャープ製PSDを、カメラ上部のレンジファインダエンクロージャ内に、この写真のように搭載しています。
電源を独立してON/OFFできるようにしてあるので、切り替えて使用します。このPSDで周囲の環境を測定してマップを作成する予定です。となると、この測距センサの精度が問題になります。
まず、PSDには本質的に下記の誤差要因があります。
1・モノの角や本の背表紙が凸凹に並んでいる本棚など、平面でない物体との距離は正確に計測できない
2・平面でもポスターのように模様があると正確に計測できない場合がある
3・メッキ面や鏡など光を反射する物体は反射光がセンサに帰ってこないので測定できない
4・遠距離になるほど測定結果が正確でない
つまり、PSDで正確に測定できるのは、経験から、デバイスの測定最大距離の半分程度までで、単色の平面までの距離を測定する場合のようです。この条件だとかなり正確に距離を測ることが出来ます。
それ以外の誤差の要因としては、電気的なノイズが測定結果に混入することが考えられます。以前、PSDの消費電流を解析した結果から見ても、ちょっと心配です。早速センサ出力を測定して見ました。
100mV/Divです。波形が毛羽立っているのは、 DC-DCコンバータのスイッチングノイズです。デジタルオシロは極めて短い(数nsくらい)の信号も正直に拾い上げるのでこんな感じになります。このケバは相当高速のADでないと拾えないので、それほど気にする必要はありません。ただ、100us強のパルス幅、1000us強の周期で、100mVほどのパルス性のノイズが乗っているのはいただけません。これはADコンバータに捉えられ、誤ったデータをシステムに与える恐れがあります。障害物回避などの用途ならそれほど問題はありませんが、今回のようになるべく正確に距離を測定したい場合は何とかしたいところです。モチロン、ソフトウエアで対処する手もありますが、アナログな僕は、オーソドックスにノイズを「元から断つ」という方針で対策しました。
このノイズはここで投稿したパルス状の電流消費が影響しているのは明らかです。パルス幅、周期が同じです。これをなるべく少なくするには電源まわりのインピーダンスを下げればいい訳です。
そこで、各PSDの電源ラインに4700uFのコンデンサを入れました。こんな感じです。
なるべくPSDの近く(電気的に)入れました。その結果の出力がこんな感じです。
かなりパルス性のノイズがとれていると思います。
ただ、これでもまだ問題ありで、50Hzの電灯線ハムのような成分が乗っていることがわかりました。(写真を撮りそびれてしまいましたが)シェーキーではPSDの出力をシールドなしのロボットケーブルで50cm以上引っ張っています。あまり、外来ノイズに強い構成とも思えません。ただ、これは信号ラインのインピーダンスが高く、オシロのプローブを接続したことで乗るということも考えられるので、信号ラインにOPアンプによるボルテージフォロワを入れてみました。前の写真の下の方に見えているのがそれ用のOPアンプです。
しかし、この対策は全く効果なしでした。まあ、もうちょっと考えなくてはなりませんねえ。
この状態でSTM32F4 Discoveryで読み込むと、読み込むたびに数十mVもの差が出ることがあります。そこでとりあえず、20mS(50Hzのハムの周期)ほどの間に100回読み込んで平均を取るようにしてみました。これだと毎回の差はかなり小さくなります。つまり、ノイズの周波数成分がわかっているので、それをキャンセルするようにした訳ですね。電気的に対策したいものですが・・
うーむ、なんとなく釈然としない部分もあるのですが、とりあえず何とかなっています。近いうちにもう少し分析したレボートができればと思います。
花岡ちゃんのウィークエンド:アクエストークの実験
前回投稿したアクエストークのLSI、ATP3011F4-PUを入手し、テストしてみました。
最もシンプルな回路でのテストです。
スピーカーの駆動はトランジスタ1石です。D級動作なので、いわゆる小信号用やスイッチング用ならだいたいのものが使えます。ベース抵抗も数百Ωから数KΩくらいまでなら何でもかまいません。
パソコンとの接続にはレベルコンバータが必要です。僕は、単三電池4本を簡易電源として搭載した実験用レベルコンバータを自作して使っています。新たに作る人はこれなどを利用するとUSBで使えて便利でしょう。試作したものがこれです。
回路は手前のブレットボードに組みました。左奥の基板が電池内蔵のレベルコンバータで、今回はこれから安定化した3.3Vを供給しています。右奥の丸いスピーカーはタッパーウェアに組み込んだものです。裸では良い音がでないので、この程度でもかまいませんからスピーカーボックスに入れるようにしましょう。
テストはTeraTermで行いました。このデバイスはボーレートを自動設定するようになっているので、ボーレートは何でもかまいません。今回は38400bpsに設定しました。その他の設定は、パリティなし、ストップビット1、フロー制御なし、ローカルエコーあり、です。
これが動作させた様子です。

接続し、電源を投入したら、"?"をタイプします。これでボーレートをチェックするようで、同期するとプロンプト">"を表示します。この操作はパワーオンリセットやスリープからの復帰後1度だけ必要です。
続いて"konnnichiwa"(こんにちわ)などと喋らせたい内容をローマ字で入力しリターンキーを打つと喋ります。発声が終了するとプロンプトを返し、次の言葉を待ち受けます。
前のデバイス同様、喋れないデータのときはうんともすんともいいません。喋らないときは"aiueo"などの簡単なデータで試してみてください。
音量はそれなり。ポケットラジオくらいです。肝心の音質はちょっとカサカサいう感じです。オーディオ評論のジャーゴンでいえば「シャリってる感じ」ですかね。ただ、音声合成としての品質は十分で聞き取りやすい音声だと思います。
3.3V、8Ωのスピーカーでの消費電流は、待機時0.6mA(同期させるまでは3mA)、発声時80mA程度です。スピーカーを16Ωとか32Ωにすれば、もう少し消費電流を減らせると思います。反対にトランジスタをICが1Aくらいのモノにかえれば、もう少し音量がとれるでしょう。もっとも、音量を求めるなら、アンプを別付けにする方が消費電流も抑えることが出来るので、合理的だと思います。
待機電流が少なくて、とてもいいですね。電池動作で面白いものが作れそうです。
最後に、気がついたことをいくつか。
■一度に送れるデータサイズは127バイト(MicroTalkの半分くらい)
枕草子なら「春はあけぼの、ようよう白くなりゆく山際、すこしあかりて、紫立ちたる雲の白くたなびきたる。夏は夜」くらいまでです。それ以上の台詞を喋らせたいときは、分割して送信する必要があります。
■ボーレートを固定したいときはPMOD0をLにすると9600bpsに固定される
組み込み機器にはこの方が確実でいいかもしれません。
■ローマ字で記述されたデータは確認しにくい
ホストのマイコンにデータを埋め込んだりする場合には、日本語文字コードで悩まなくてよいのですが、データの確認はちょっと厄介です。ホストがパソコンで大量のスピーチデータが必要な場合は、スピーチデータにひらがな表記の使えるMicroTalkの方がいいかもしれません。
以前、アクエストークでしゃべるLSI,、MicroTalkというデバイスでTTS装置を試作しましたが、もっと簡単に作れるデバイスがアクエスト社から発売になりました。秋月で購入できます。
このATP3011F4-PUというデバイスは、以前アクエスト社がMTM07に出展していたものと酷似しています。MicroTalkが0.5mmピッチのQFP100と、アマチュアに優しくないパッケージなのに対して、DIP28Pなので、普通のユニバーサル基板やブレットボードに簡単に載せられます。また、クロック内蔵だったり、スピーカーをトランジスタ1石で駆動できたりと使いやすさもアップしてます。その上、MicroTalkが2400円なのに、こちらはたった850円とお財布にもやさしい仕様になっています。
性能面はどれほど違うのでしょうか?近いうちに購入して調べてみたいと思います。
ロボット作ろう:シェーキー製作記
今回はシェーキーの電源周りの話です。
シェーキーは12V8AHのシールドバッテリーですべての電源をまかないます。モノは数年前に購入したこれです。このバッテリーはUPSなどの低放電向けのモノで、10時間率で8AH、つまり、0.8Aの電流を取り出して10時間保つということになります。セルモーターのような大電流の引き出しには向きませんが、自己放電が少ないので、いつの間にかバッテリーが完全放電していたというようなトラブルがありません。場合によっては数ヶ月もほったらかしにされる僕の実験用ロボットにはおあつらえむきです。
問題は一般的な鉛蓄電池に比べ、引き出せる電流が小さいことです。このサイズの鉛蓄電池なら、10A以上の放電が可能ですが、このバッテリーではおそらく数A程度が実用範囲ではないでしょうか。
移動していないときのシェーキーの消費電流は0.6A程度になりますから、何ら問題はありません。問題は移動中です。モーター2個とPSD14個分の電力が追加になります。おそらくトータルで平均2Aくらいの電流は必要になると思いますが、いままでこのバッテリーを使って移動ベースのテストをしてきた感じからすると、それくらいの電流は問題なく引き出せるものと見込んでいます。
さて、シェーキーの電源周りの回路ですが、こんな風にしました。
バッテリーから各種電源を作っている様子が分かると思います。DC-DCコンバータはコーセルのものを使っています。結構なお値段ですが、電子回路の電源はケチらない方針なのは以前の投稿で書いた通りです。不安定な電源のせいで原因不明のトラブルに見舞われるのは本当に嫌なものですからね。
バッテリーの充電回路ですが、ごらんの通り電源用ショットキーダイオードと3Ω/5wのセメント抵抗で、ごくごく簡単にすませています。充電用の電源には15V3AのACアダプターを使いました。
この回路では、バッテリーの充電終了電圧を15V、放電終了電圧を10Vとして、充電の全行程で最大の充電電流が0.2Cくらいになるよう常数を決めています。この方式では充電開始時に最も充電電流が大きく、充電が進むにつれ次第に電流は低下します。あまり効率のいい方法ではありません。完全放電からの充電にはおそらく12時間以上かかるのではないかと思います。急速充電はできません。
しかし、この回路は充電終了電圧に近づくにつれて充電電流が減り、最終的には数十mAになりますから、ACアダプタを常時接続したままにしておいても危険がないという特徴もあります。また、アダプタを接続したままでロボットをONにすることも出来るので、プログラムの開発中はケーブルをつないで充電状態にしておき、動かすときにだけケーブルを外すという使い方が出来ます。民生機器のような使いやすい性能を抵抗1本で実現しているわけですね。
実験用ロボットのように、常時電源を入れておきたい用途にはもってこいです。また、回路が単純なので故障しにくいのも特徴です。アマチュアの機械には向いているとおもいます。
ただし! こんな簡単な回路で充電できるのはシールドバッテリーだけです。ニカドやリポは専用の充電器を使うのが無難です。また、セメント抵抗はかなり発熱するので、部品やケーブルのレイアウトには注意が必要です。
ロボット作ろう:シェーキー製作記
以前の投稿にあるように、シェーキーのメインボードであるSTM32F4 Discoveryの開発は、atollic TrueSTUDIOのLite版で行っています。現在のバージョンは2.3.0ですが、3.0.0がリリースされたということで早速サイトをのぞいてみると… どうも様子が変です。これまでコードサイズの制限はなかったのですが、このバージョンからは32KBのサイズ制限がかかっています。その代わり、制限の多かったデバッグ機能がすべて使えるようになったようです。
うーん、このプロセッサはコード食いで、サーボや通信系を組み込んだくらいのテストプログラムで10KBほどのサイズになってしまいます。コマンドインタプリタやオドメトリを組み込んだ本番のプログラムは、32KB以内に収まりそうもありません。これは困りました。
まあ、ただで使っているのだからあまり文句もいえません。だいぶ使い込んだことだし、正規版を買おうかということで値段を再確認したら、なんと$2295! 最初のバージョンをインストールしたときに確認した価格は$500くらい。ずいぶん値上がりしています。よく読むと12ヶ月のサポートとアップグレード付きだそうですが、個人でホビー用に導入するのは無理ですね。販売方法も国別のディストリビューターから見積もりを取る必要があるそうで、クレジットカードで簡単に支払う訳にもいかないようです。ちなみに日本のディストリビューターはこの会社です。お値段の記載はありません。
プロフェッショナル向けというポリシーを明確に打ち出したのでしょうが、ホビーストとしては梯子を外された気分です。とりあえず現行バージョンはコードサイズ制限がないので、これを使い続けるのも手ですが、再インストールが必要になったときにちゃんと認証が出来るかどうかは不透明です。
やっぱり早めに他の開発環境に乗り換えるべきでしょうか。
ロボット作ろう:シェーキー製作記
先週完成したシェーキーにアクセサリ部品の追加やマーキングを施しました。
正面パネルにツマミとトグルスイッチがありますが、これらはプラ棒とプラナットで作ったダミーです。
猫との比較でおおよそのサイズの検討がつくでしょうか。60年代のコンピュータ機器らしい雰囲気が出ていると思います。
別アングルの写真です。
シェーキー顔の特徴である二眼レフのような目がキュートですね。
胴体内部の電気部品の組み込みも終了しました。あとはソフトですね。基本的には、以前パソコンでテストしたオドメトリによる自己位置推定とマップの作成機能などを、内蔵のSTM32F4に移植する予定です。21世紀ですからね。
マップの作成機能はこのブログに投稿していませんが、スキャナ式レンジセンサを手に入れたときに、Shakey先輩式のマップ作成をテストしてあります。センサの精度が気になりますが、シェーキーでもなんとかなるのではないでしょうか。
ロボット作ろう:シェーキー製作記
この週末はなんとか天気が保ったので、塗装を終わらせました。
この写真は、塗装前の部品です。
これだけあるとベランダで作業するのはかなり大変ですが、事前に作業工程を作っておいたので、5時間ほどで一通り作業を終えることが出来ました。塗料はタミヤのアクリル系スプレーです。途中で塗料が切れるのを恐れるあまり、ちょっと買いすぎてしまいました。
ところでShakey先輩の頭のお皿ですが… いままで、プラスチックの円盤の外周に導線をまわしたループアンテナかなと思っていたのですが、いろいろな写真を見ると、どうもこの円盤は金属製のようで、となると、ループアンテナ説は怪しくなります。
この金属円盤の真ん中にホイップアンテナがついていることや、大きな面積があることなどから考えると、グランドプレーン(仮想グランド)と見るのが妥当ではないでしょうか。円盤の下の胴体には消費電流が半端でない当時のデジタル回路が詰まっているとなれば、高周波ノイズも相応に厳しいのは想像に難くありません。ここに仮想グランドをおくことでこのノイズをシールドし、アンテナに飛び込むノイズの低減をはかったのではないでしょうか。だとすると、円盤のふちが赤くなっているのは、ループアンテナの導線ではなく、単なる危険防止用のカバリングということになります。
ともあれ、これを模型で作るには意外と難しい。円盤は、サークルカッターのエクステンションを買って、0.5mmのプラ板を直径200mmに切り取り、これを2枚重ねました。問題はふちの赤い部分です。いろいろ考えた末、ダイソーで赤いビニールコートされた2φの針金を購入し、円盤のふちにそって丁寧に曲げ、瞬間接着剤で要所を接着しました。こんな感じです。
苦労はするもので、組み立てるとなかなかそれらしくなります。
この模型は、1968年にラジオリンクが搭載された状態を模型化したので、よく見る写真と比べてみます。
ちょっとばかり馬面だったかなというのが正直な感想です。でも頭部のフレームを作り直すのは大変なので、これは我慢することにしましょう。ただ、首がいくら何でも華奢すぎるようです。プラ板でカバーを作ってボリュームを出すようにしましょう。それに頭部フレームにはもっと構造体や部品がついてごちゃごちゃしているようです。模型はちょっとあっさりしすぎているみたいですね。
せっかくここまで作ったのですから、このへんの手直しはしたいと思います。
ロボット作ろう:シェーキー製作記
先だっての週末は胴体フレームの塗装をしようと思っていたのですが、天候が悪く、色は乗せられないので下地処理だけを行いました。
それと、ベース部分の仕上げとして、PSDの配線と、床下機器のダミーを製作しました。
この写真は本家Shakeyのベース部分です。
ベースの下には、電車のようにいくつかのボックスやパネルがぶら下がっています。僕の模型ではこれは省略するつもりだったのですが、イキオイがついてしまいましたので、やっぱりそれらしく製作することにしました。
本物では左側(ロボットの前方)の四角い箱の後ろに駆動モーターがあり、この箱の中に駆動用タイミングベルトのスプロケットホイールとエンコーダが入っているようです。右側(ロボットの後方)のパンチングパネルの中には何か発熱するモノが収まっているようですが、モータードライバでしょうか? 電源でしょうか? ちょっとわかりません。
今回は写真を参考に2mmのプラ板で作りました。本当に見かけだけです。
ベースにぶら下げるとこうなります。
それらしい感じには仕上がっていると思います。
PSDは配線はちゃんとハーネスを製作して引き回しました。簡易圧着工具で、PSDに採用されているPHコネクターの圧着も出来るので、きれいに配線をまとめることが出来ます。ハウジングと接点は秋葉の「ねじの西川」で購入しましたが、マルツなどでも通販できるようです。
せっかく床下機器を取り付けたのですから、ハーネスが暴れて見た目が悪くならないよう、卵ラグと太めの単芯線で作ったコーチングクリップでシャーシにまとめました。
ロボット作ろう:シェーキー製作記
今回作った部品はこれ
ボディサイドのベンチレータグリルです。1.2mmプラ板を丹念に切り出して作りました。たまにはこういう作業もいいものです。制作したグリルは本物のこの部分です。
もともとセミスケールなので、ここら辺はもっとシンプルにしても良さそうなもんですが、作り進むうちにノッてきてしまいました。この調子ではまたまた完成が延びてしまうのでは…
ノッたついでにフロントパネルの最上部のディテールの加工もしました。いろいろな写真を見比べると、この部分は引き出し式の回路モジュールになっているようなので、Pカッターでモジュールの境目を入れました。大スケールモデルなのでちょっとオーバーめのスジボリにしてあります。
写真を撮ってみましたが、プラの地肌ではわかりにくいので、本物の写真を。
写真で帯状のグレーの部分は、モジュールを引き出す取っ手のようで、少し出っ張っているようです。また、右から二番目の大きなパネルは、きちんと収まってないように見えます。他の写真では出っ張っていないので、写真を撮ったときにたまたまそうだったのではないかと思います。
ロボット作ろう:シェーキー製作記
今回は駆動輪の分解能を改善する話です。Shakey先輩の性能に少しでも近づこうということで、チャレンジしました。
シェーキーの駆動輪にはこことここの投稿にあるように1回転100パルスのエンコーダがついています。これは反射型のインタラプタ1個で構成されていますが、これを90度ほど位相のずれたところにもう1個追加し、分解能を倍にします。新しいセンサ基板はこうなりました。
左側にあるのが今までのセンサ、取り付けてあるのが新しいセンサ基板です。見てわかるようにインタラプタが2個になっています。このインタラプタはシャープのインタラプタにプラスチックのレンズを被せたもので、5〜6年も前に秋月で買ったものです。今はもうありません。普通のインタラプタに比べて検出領域が狭いようで、細いパターンでも感度よくとらえます。普通のものだと信号の振幅がもっと小さくなります。本機では信号をADで読んでいるのでどちらでも使えますが、在庫整理のつもりで使っています。
ホイール裏側のエンコーダパターンとの関係はこんな感じ、インタラプタの一つが黒、もう一つが白の上に(なるべく!)乗るようになっています。(わかりにくいですが)
新しいセンサの信号はこんな感じです。
位相は90度ほどずれています。チャンネル1のインタラプタの方の信号が少し小さいみたいですね。負荷抵抗を調整してレベルをそろえておいた方がいいでしょう。
この信号をADで読み込んで二値化したのがこれです。マイコンの空きポートに出力してオシロで確認しました。基板は2mmピッチのユニバーサルなのでインタラプタ間の距離の微調整が出来ません。これが精一杯です。きれいな2相クロックとはいえませんが、実用上は問題ないでしょう。
これで分解能は200カウント/回転になりました。さらに、回転方向も識別することができます。もっとも、このモーターとギアボックスでは1カウント単位で厳密に制御するのは困難ですが、計測精度は間違いなくよくなっているので、オドメトリの総合的な性能はあがると思います。
もちろんドライブサーバのソフトも直しました。昔のインターフェイスを引っ張りだして、体内シリアルバスをパソコンに接続、Teratermでテストと調整を行いました。手打ちコマンドで動かしてみた感じでは、改造前より確かに精度が出ているようです。小さな旋回を何回も繰り返したのちオドメトリ上の原点に戻すと、今まではそれと見てとれるほどのずれが出がちでしたが、それがあまり感じられなくなりました。
ロボット作ろう:シェーキー製作記
僕のシェーキーも格好がついてきたところで、元祖Shakeyがどんな性能だったのかを確認しておきましょう。本来ならこれはプロジェクトを始める前にやっておくべきですが、さあやるぞでイキナリ英語のペーパーと格闘しなければならないのではモチベーション上がりませんよねえ。
今回はSRIのShakeyのページの下の方、ずらりと並んでいるペーパーを流し読みして、機械のスペックを探りました。その前に、Shakeyを紹介したフィルムがYouTubeにあがってましたのでご紹介します。長いし画質もよくないのですが、動くShakeyを見ることができる唯一のフィルムではないかと思います。これのオリジナルは前出のページにあるRealVideoファイルです。
"Take five"のリズムが心地よいですねえ。所々で聞こえる「ピロロ」という音は、jazzのアドリブではなく、ロボットとの通信に使われるFSKモデムの信号音のようです。
このフィルムのShakeyは頭が前方についている「後期タイプ」です。1967年の完成時には頭がロボットの旋回中心に取り付けられていました。レンジファインダーの計測結果をロボット座標上に持ち込みやすいようにするためだと思われます。しかし、画像認識での環境マッピングの研究が始まると、自分の足下が見えないのが問題となり、前部に移動したようです。
まずは外形諸元です。昔の投稿にあるように、この模型は写真から寸法を割り出し、1/3スケールで作ったつもりです。ペーパーには残念ながら図面はありませんでしたが、いくつか数字を拾うことが出来ました。それらが下記の数字です。
●駆動輪は直径8インチ(203mm)
●ベースの地上高は10インチ(254mm)
●アーム収納部(ベースと胴体の隙間)4インチ(101mm)
●胴体部分は標準の19インチラック(パネル取り付けねじ間が482mm)
これをもとに模型の寸法をあたると、ほぼ近い数字になっています。一番誤差が大きいのがベースの地上高で、一割ほど大きめになっていました。これはキャスターのサイズに合わせたためで、本当はもう少し低くしたかった部分です。セミスケールモデルとしては、いい線いっているのではないかと思います。
次は駆動部です。下記の諸元が読み取れました。
●ステッピングモーター(200ステップ/1回転)
●シャフトエンコーダ(50スリット4相 200パルス/1回転)
●減速比 1/4(タイミングベルト)
●距離分解能 1/32インチ(0.8mm)
結構距離分解能が高いですね。モーターにはステップ数と同じ分解能のシャフトエンコーダがあり、制御ロジックでクローズドループ制御されています。そのためだと思いますが、フィルムを見ると停止時にすこし行きつ戻りつしているのが見て取れます。駆動輪のトレッドも広いので旋回の精度も相当なものだと思われます。模型の精度も見直した方がいいかもしれません。
最後にレンジファインダーです。前の投稿でカメラの下の部分が投光部ではないかと書きました。上の箱が回転鏡と受光部と踏んだのですが、これは逆でした。箱の中に平行光線の投光部があり、その光を回転鏡でスキャンして、大きな開口部から投射、物体に当った際の反射光をカメラの下の受光部でキャッチしているようです。回転鏡がどの角度のときに光をキャッチしたかがわかれば、物体との距離がわかります。回転鏡は同期モーターで一定速度で回転しているので、基準位置からの時間で回転角度がわかるようになっています。
このレンジファインダーは0.5フィートから28フィート(15cm~8.4m)まで計測可能で、近距離(数フィート)では±0.2フィート以下(6cm)、最大距離付近では±1~2フィート(30~60cm)程度の精度があるそうです。今回採用したPSDのペアは、最大距離では見劣りするものの、これくらいの精度は期待できるのではないかと思います。
今回ペーパーにざっと目を通してみて、改めて注目したのが初期のペーパーに見られるアームについての記述です。これが開発前のイメージスケッチ、立派なアームがついているでしょう?
このアームはリトラクタブルで、使わないときには胴体とベースの間に収納されるようになっています。図面や見積もりもあり、それらによると開発費は6500ドルの予定でした。1ドル360円の時代ですから日本円にすると当時としては結構な金額です。アメリカでもそう安い金額ではなかったのではないでしょうか。そのせいか開発は見送られ、フィルムでご覧の通り、箱を押すための簡単なバーがベース部分に増設されました。
アームのついたShakey、ぜひとも見たかったですね。
ロボット作ろう:シェーキー製作記
胴体部分の塗装前に、一度基板や配線を組み立てることにしました。塗装後は胴体の木部は傷がつきやすいので、穴あけや切断などの加工がないようにするためです。
胴体内部におさめるのは、ネットタンサーの基板、電源、STM32F4 Discoveryを搭載した制御ボードです。それぞれの基板は2mmのハードボートの両面に固定し、ボードごと胴体から引っぱりだせるようになっています。基板はこの写真のように取り付けました。
丸い基板がネットタンサーのネットワークユニットで、その周りにはバッテリーの12Vから各種電源を作成するDC-DCコンバータ基板を配しています。電源の内訳は、ネットワークユニットと制御ボードやサーバーボード用の5V2A、PSD用の5V2.4A、サーボモーター用の6V1.5Aの3種類です。サーボ用の電源を除いて、コーセルのDC-DCコンバータモジュールを使っています。ちょっとお高いですが、電源はケチらない方がいいと思います。サーボの電源は手持ちのこれを利用しました。6Vの適当なコンバータが見当たらなかったことと、それほど電源の品質を問われないからです。シリーズレギュレータなので効率が悪いんですが、モーターの動いている時間はごくわずか、ほとんどの時間はサーボパルスを止めているのであまり問題はないと思います。この場合の消費電流はサーボ2個で30mAくらいなもの、DC-DCコンバータでも無負荷でこれくらいの電流は流れています。(秋月のこれならもっとよかったかもしれないですね。最近気がつきました。)
バッテリーはこんな風に搭載します。
まだ、反対側の制御ボード未配線ですが、電源ボード周りのワイヤリングの様子です。
いままでコネクタにはピンヘッダを使っていたのですが、さすがに今回は日圧のVHとXHを使いました。会社には専用の圧着工具があるので、ハーネスをきちんと設計すれば会社で作るという手もあるんですが、本件のように思いつきでやってる場合は現場で作れる方がいいですね。という訳で、エンジニアのPA-21を購入しました。もう30年も前のこと、モレックスのコネクタを電工ペンチで圧着加工しましたがイマイチという結果で、それ以来この手の簡易工具はちょっと敬遠していたんですが… これはあたりです。専用工具のように一発で加工はできませんが、それでも20秒もあれば芯線と被覆をしっかりカシメられます。
移動ベースに胴体をはめ込んだ様子です。現在ははめ込んだだけ、摩擦で止まっています。胴体を持ち上げても移動ベースは落ちません。写真の右側が後ろで、胴体の下にアルミパネルを設け、電源スイッチと充電ジャックを取り付けてあります。