アジアンタイヤのスタッドレス、NANKANG ESSN-1に履き替え

2013年の冬に初めて買ったアジアンタイヤ、NANKANG SV-1。それから4シーズン履きまして、もうスタッドレスタイヤというより、夏タイヤに近い状態だったので、新しくスタッドレスタイヤを新調することにしました。 で、次は国産タイヤに戻してみようかと考えてはいたんです。候補は新しく出てきたDUNLOPのWINTER MAXX02。 でもね、また冒険してみたくなって、アジアンタイヤを探してみたら、NANKANG ESSN-1というタイヤがゴムが柔らかくて効きがいいらしいので、またアジアンタイヤに挑戦です。

Img_20171209_113458

これ、4シーズ履いたSV-1。このタイヤ、あまり効きは良くなかったけど、高速安定性は夏タイヤ並。角が丸いからだと思うのだけど、高速でもヨレないし、まっすぐ進もうとするので、実は4シーズン目が終わったあと、そのまま夏タイヤとして履き続けてもいいかな、とも思いました。 でも、流石に夏タイヤに比べればグリップは弱いです。

Img_20171209_113411

これ、新しいESSN-1の表面。ゴムが柔らかい。国産スタッドレスと同じぐらい柔らかい。これだと効きそう。でも角があるし、乾燥路ではグリップなさそうな予感。 ま、スタッドレスは普通はこんなもんです。 で、硬度計で硬さを測ったことがあるので、今回は、夏タイヤのトーヨータイヤのPROXES、SV-1、ESSN-1の順番で硬さを測ってみます。

Img_20171209_112936

Img_20171209_112856

Img_20171209_112811

3回計った平均でいうと、順番に70,60,40ぐらいですかね。SV-1は夏タイヤ並に硬くなってました。春に測ったときは、60ちょいぐらいだったので、PROXESが固くなったように思えます。

Img_20171209_122409

さて、タイヤをホイールに取り付けてもらうために、今回もまた、春と同じ、TOMOタイヤサービスさんに来てもらいました。 12月のレースがキャンセルになって、この週末が空いていたのでラッキー。

Img_20171209_123239

ちなみに、この移動してやってくる機械を積んだクルマの中は、こんな感じになってます。 この後、まだ2件まわるそうです。 積まれていた廃タイヤはポルシェが履いていたミシュランの高そうなタイヤでした。 1つ前の出張先がポルシェだったんでしょう。

Img_20171209_125506

組み上がったタイヤのホイールにつけられたバランスのオモリ。やっぱりアジアンタイヤはバランスが悪いですねぇ。 いつもオモリがたくさん付きます。 4本のうち3本はたくさんオモリついてました。

Img_20171209_125537

ちなみに、これはPROXESの中で一番たくさんついているやつ。 この辺が国産とアジアンの違いです。
そんなわけで、無事、交換は終わりました。 昨日あたりから随分と冷えてきましたが、冬が早いような気がします。 また、しばらく走ったらESSN-1のレポートをしましょう。

| | コメント (0)

NEXUS 5のバッテリー交換

うちではNEXUS 5が夫婦のスマホになってます。で、最近、なんだかバッテリーの持ちが悪い。2台とも。ネットで調べてみると2年ぐらいでバッテリーがヘタってくるそうです。 そういえば10月で丁度2年。 というわけで、自分でバッテリー交換してみることにしました。 参考にしたのはこのHPです。

きのう、Amazonでバッテリーと工具がセットになっているのを1500円ぐらいで注文。先程、作業を開始して20分ほどで完了。 なんか、すげー、細かい。

P9245985

これが届いたバッテリーのセット、左側がバッテリー、右側には工具が入ってます。

P9245986

むかし、なにかのスマホをバラしたことがあるので、そのときの爪とか工具は少しばかりあるんですが、どうやら十字でないY字ドライバーがないと、ネジが外せないらしい。 なので、素直に工具付きを購入。

P9245987

フタを爪でこじ開けて剥がれたところ。フタの裏側にボタン電池のようなものが。 なんでボタン電池が? と不思議だったんですが、磁石でくっつくし、これ、振動モーターみたいです。

P9245994

フタにはアンテナ類がたくさん貼り付けてあって、端子がちょうど基板にあたるようになっていて、ケーブル類はないです。

P9245990

いちばんビビったのは、バッテリーを外すところ。粘着テープで張り付いているので、剥がすとき、バッテリーがちょっと曲がっていく。 大丈夫なのか? Li-poなのに、ドカーン!と燃えたりしないよね。

P9245991

青いほうが新しいバッテリー。端子が出てるのだけど、凄い小さい。ちゃんと充電できるのかな。

P9245993

バッテリーを入れ替えて、端子を元通りに繋いで、仮に電源入れてみる。一応立ち上がったし。電源は大丈夫みたい。

P9245995

蓋を締めて完了。 よかったよかった。ちゃんと動いているよ。

P9245996

ところが、Qiの非接触充電ができない! 裏蓋にはQiのアンテナがあったけど、あの端子がハマっていないのだろうと、 端子のあったS字あたりをギューギュー押してたら、パチン! と音がしてハマった。 無事、非接触も充電できるようになりました。 さて、このバッテリーでうまくいくことが分かったので、もう1つ注文して、奥様のも交換です。

| | コメント (0)

MATLAB/SimulinkでETロボコンに出場する:調整が簡単なアーキテクチャ

ETロボコンという競技は、設計はもちろん大事ですが、実際にロボットでコースを走らなきゃいけないので、調整に時間が掛かります。 ここをどうやって簡単にするかも、最終的な仕上がりを決める重要ポイントの1つでして。 

これまで、いろんなモデルを見ていましたが、調整パラメータは、プログラムのソースコードに埋め込まれ、一緒にコンパイルされることが多かったです。 ところが、これが結構、手間がかかる手順でして。 ソースコード上のパラメタを書き換え、コンパイルし、ロボットとケーブルで繋いで、プログラムを転送して、プログラムを起動して、コースの調整したい場所まで歩いていって、実験する。 これを延々と繰り返すわけです。 たぶん数百回レベルの数で。

たとえば1回に掛かる時間を2分短縮すると、100回で200分、500回で1000分ほど時間が節約になるし、コースのまわりを歩き回る労力も減ります。1000分といえば、1日に2時間使って調整したとしたら、8日間は節約できます。

今回の巨匠チームは、調整方法に2つの方式を取り入れました。


1.静的シナリオ
  ソースコードと一緒に、調整パラメタを書いたファイルを用意し、コンパイル時に取り込まれる方式

2.動的シナリオ
  EXCELで調整パラメタを書き、それをツールを使って無線通信により、走行体プログラムに送り込む方式


静的シナリオは、プログラムと一体になっているので、いつ何時でも、安定してプログラムが動く利点があります。 対して動的シナリオは、動作中のプログラムに無線で送り込むので、走行体が遠く離れた場所にあってもすぐに書き換えられる利点があります。 ただ、大会本番ではBluetoothの電波がうまく届かないことがあり、これだけに頼ると、動的シナリオが転送できないので走れません! という事態になりかねません。
度重なる調整は動的シナリオでやり、固まってきたら静的シナリオにして、プログラムに埋め込むという手順が一番良さそうですが、巨匠チームは、大会ではどうだったのでしょうねぇ。


Scenario_2

全体の構成はこんな感じになります。競技者はEXCELのシートにシナリオを書きます。 コマンダーという通信アプリで、シートの1つを選んでBluetoothで送信します。 EV3内部では、今回開発したプログラムがBluetooth受信で、シナリオ1行1行を受け取りますが、動的シナリオのRECモードのときだけ動的シナリオバッファに溜めます。
シナリオ管理者は、動作モードが静的シナリオか動的シナリオかに応じて、どちらかのシナリオグループか順位シナリオを取り出して送り出します。 シナリオグループというのは、一連のシナリオを更に複数まとめあげる役割をしています。

最近のETロボコンでは、こういう動的なシナリオ編集システムを同時に開発しているチームを時々見かけます。 最初に見かけたのは、H社の研究所の人達が出てきたときだったでしょうかね。 よくもまあ、こんなに作り込んだもんだ、と関心しました。 EXCELのシナリオを書いてコマンダーで送る人、 走行体をコース上でセットする人、の二手に分かれて作業ができるので、コース回りの移動をしなくても済むし、トライ&エラーのターンアラウンドがとても短くなります。

次回は、これが実際に動かせるファイル一式をもってきましょう。 実際にやってみて実感するのが一番ですからね。

| | コメント (0)

MATLAB/SimulinkでETロボコンに出場する:拡張性が高いアーキテクチャ

ETロボコンって、設計して実装してテストすると、大概、途中で機能が足りないことが分かるもんです。このA方式より、こんなB方式のほうがいいんじゃね? なんてね。 なので、途中の機能アップの拡張性がないと、あとでグチャグチャに。 そこで、どこの段階が一番手が入るかというと、コースを区間に区切って、条件によって制御を切り替えて、次の区間に移って、の部分の条件(ジャッジ)と制御(アクション)  これについては、むかしむかしJudge & Actionアーキテクチャで解決したことがあるので、いまでもそれを流用してます。

Jaarch

図解するとこうなります。 

1. 茶色のシナリオ管理は「この条件が成立したら、この制御をやる」という1つのシナリオを取り出して、 青いジャッジグループに「こんな条件は成立したか?」 と発信します。誰となく指名することなしに。

2. そうすると、青いジャッジAからジャッジCの全員が、そのメッセージを受け取るわけですが、自分の知らない条件を判定しろと言われても無理。 そういうときは無視します。

3. ところが、ジャッジBは「この判定なら俺の役目だから判定してやろう」 と違う動きをして、もし、判定結果がOKなら、ジャッジグループに1個だけある、条件成立の旗を立てます。1個しかないですからね。

4. シナリオ管理は、条件成立の旗を見てて、なにも立たなければ、次のタイミングでもう一度同じことを繰り返します。 もし条件成立の旗が立っていたら、それを下ろしておいて、今度はアクショングループに「こんな制御して」と発信します。

5. アクションDからアクションFは、それぞれ同じメッセージを受け取るわけですが、「おれ、そんなこと言われても知らない」という人もいれば、「それできるわ、やるね!」という人もいます。 普通、それは一人だけ。

6. そして制御が実行され、また次のタイミングになって、シナリオ管理は次のシナリオを取り出して、同じことを続けるわけです。


さて、ここで新しく条件判定を追加したいとします。ジャッジGはその他のジャッジと同じ形をしているんですが、誰も判定してくれない新しい条件判定ができます。 これをジャッジグループに追加します。 あとは何も構造を変更することなしに機能拡張が完了。 これがジャッジ & アクションアーキテクチャです。 水中ロボットのハコフグちゃんにも、ETロボコンで作った仕組みそのままを移植して、水中ロボット用のジャッジとアクションに入れ替えました。 また、シナリオを図で作成できる仕組みも、中身を入れ替えて再利用。 意外と、いろんな場面で使える仕組みです。

それで、今回の巨匠チームにも、もちろん、このアーキテクチャを使いました。それをSimulinkで作るにはどうするか?ということです。 しかし、もともと、BricRoboで作るように考えた構造なので、Simulinkでも特に難しくもなく。

Ja2

前回も出てきた心臓部の部分、ここに3色で囲んだ部分が、説明のシナリオ管理、ジャッジグループ、アクショングループに相当します。

Judge

ジャッジグループの中身はこんな感じになってます。1つの線が分かれて複数につながる、という書き方はデーターフロー的な設計の良いところです。BricRoboも同じですけどね。シミュレーションができないだけで。

Action

アクショングループもこんな感じになってます。ただ、ここでは実際の制御をするわけでなく、シャシー側に用意されている制御ブロックに対して、さらに制御命令を出す、という構造になってますが、アーキテクチャ的には一緒です。

いつも、テキスト言語を先に書き出して、大きな構造を見つけられなくて、困っている人も多いんじゃないですかね。図形言語は形が綺麗だと、大抵、筋がいいので、慣れると楽です。


MATLAB/SimulinkでETロボコンに出場する:はじめに
MATLAB/SimulinkでETロボコンに出場する:Unityと繋ぐ
MATLAB/SimulinkでETロボコンに出場する:シナリオで振る舞う心臓部
MATLAB/SimulinkでETロボコンに出場する:拡張性が高いアーキテクチャ

| | コメント (0)

MATLAB/SimulinkでETロボコンに出場する:シナリオで振る舞う心臓部

大体ですねぇ、ETロボコンに出場するシステムを見ていると、多かれ少なかれ、走るコースを区間に分けたり、難所を渡っていくシーンを分割したりして、分割した1つの区間について、どのようなアクションを実施したり、どんなジャッジが成立したら、次の区間へ遷移するか、という仕組みが入っているわけです。 そりゃモデルシート見ると明らか。 昔、水中ロボコンに出場したハコフグちゃんにも、2010年あたりにETロボコン用に開発した仕組みが移植され、それでシナリオ通りにロボットを動かしていました。 

Driver

もちろん、この巨匠チームのMATLAB/Simulinkモデルにも、その部分があります。 いろんなことができるのは、この心臓部があるからでして。それが、ここです。 大きく4つの部分に分かれています。 左下の肌色の部分、これがステートマシン図です。 はい、図そのもの。 MATLAB/Simulinkとこれまで言ってますが、Stateflowという状態遷移のブロックが作れるアドインも一緒に使ってます。 Simulinkは四角いブロックの左からデータが入ってきて、ブロックの中で演算して、右側から出ていく、というデータフロー的な設計しかできません。 状態を表すところはStateflowのChartというブロックを使って設計します。中にはステートマシン図が入っていて、Chartの外から入ってきた信号を値として参照したりイベントとして扱ったりし、それによってい状態遷移を起こしたり演算したりして、その過程でデータが変化したりイベントが発生したりして、Chartの外に信号として出ていきます。 この入出力の信号とSimulinkのブロックを繋げて、Simulinkブロックの振る舞いを変えていくという方式。 なるほどねぇ。 みんなステートマシン図って書くことはあるけど、 その振る舞いをどうやって他と結びつけるか、まではあまり考えていないと思うんですよ。 いい勉強になるわ。

Chart

このChartを開くと、さらに2つのChartが入ってます。左側がロボット全体の状態を制御します。右側は実行するシナリオを1つ1つ駆動します。 この2つのChartが同時に並列動作していて、左側で人間がボタン操作すると走行を開始したり止めたり、シナリををBluetoothで受信したり、いろいろ操作します。 その状態遷移の過程でイベントが発生し、右側のChartに伝えられ、シナリオ実行を開始したり止めたりします。 このステートマシン図、そのまま動くのがStateflowのいいところ。 シミュレーション中に開くと、現在アクティブな状態は青線で囲まれて、遷移している様子が見れます。 すげー。 ステートマシン図って、書いたことはあっても、実際に動いている様子って、見たことある人は少ないでしょ。 見たことないと、このステートマシン図みても、タダの図であって、実際に動くようにするには、C言語のSwitch文とかで実装してやらないとダメとか思ってるでしょ。 ざんね~ん。このまま動きます。

じゃ、シミュレーション中に動いているのを録画してみましょう。分かりやすくするために、Chartのアニメーション速度は低速にしてあります。左側はステートマシン図、右上はUnity、右下はダッシュボード。シミュレーションを開始すると左側に青い囲みが現れて、状態遷移が起こっているのがわかります。シナリオが進むと右上のEV3の尻尾が降りてきます。 ここで動かないようにロックしているのをほどいて(尻尾が降りてくるまで手で抑えることができないので) タッチセンサーのボタンを押すと、尻尾が上がり始めて走行体が走り始めます。 すぐに中止(BACK)ボタンを押して止めます。 LEFTボタンを押すと動的シナリオモードになり、そのときDOWNボタンを押すとBluetoothからの受信待ちになります。 ENTERは受信したのをすぐにスタートするわけですが、なにも受信してないので動きません。RIGHTボタンを押すと、静的シナリオモードになり、コンパイル時に取り込まれたシナリオを実行するモードになります。 なんか、MATLABって凄いわ。

あと、最初の図にもどりますが、真ん中のScenarioCtlGrpが静的シナリオを保持していたり、受信した動的シナリオをバッファに溜めたりして、1回駆動するたびに、シナリオを1行、送り出します。 右上のJudgeCtlは、センサーから入ってきた情報を元に、条件を判定して、成立したかどうかを教えてくれます。 右下のActionCtrlはシナリオの1行で実施するアクション=処理を分類して、操作する内容を送り出します。 この4つ全体でDriverというブロックなのは、人間が自動車のインパネを見ながら、判断して、ハンドルとアクセルを操作する、というモデルに似せています。 実際に自動車を走らせる部分は、DriverのとなりにあるChassisブロックが担当。

こんな具合に、このモデルは動いているわけで、心臓部なわけです。 そういや、久々のモデル審査で、ステートマシン図で書け! というお題に、「それ、アクティビティ図でいいんじゃね?」的なモデルシートがたくさんありましたよねぇ。無理矢理感満載(笑)


MATLAB/SimulinkでETロボコンに出場する:はじめに
MATLAB/SimulinkでETロボコンに出場する:Unityと繋ぐ
MATLAB/SimulinkでETロボコンに出場する:シナリオで振る舞う心臓部
MATLAB/SimulinkでETロボコンに出場する:拡張性が高いアーキテクチャ

| | コメント (0)

ミーレの食器洗い機を交換しました

1999年のリフォーム時に、Mieleの食器洗い機を入れました。それからかれこれ18年が経ち、これまで不具合は発生してなかったのですが。 いや、正確には不具合は去年あたりに発生しまして。 長年、洗っていると、内部のプラスチックの部品がだんだんと痩せてきます。 そして、ネジが痩せるとポロッと落ちてきます。

Img_20170617_111904

この金属の棒は、庫内の上部についていて、くるくる回ってシャワーを出します。そのネジの部分が一番右側のやつ。だんだんとやせ細ってきてポトリ。そこでサイズをノギスで測って、3Dプリンタで出力したのが真ん中の2つ。しばらくこれで動いていたんだけど、しばらくするとまた押してきたので、今度はネジをやめて、しっかり挟み込んで接着するタイプにして補修。 これでもう大丈夫だと思っていたんですが。修理に来ていた人は、3Dプリンタで部品を作ったのにビックリしてましたけど。

先日、食器洗い機を回していたら、急に漏電ブレーカーが落ちました。漏電ブレーカーが落ちるなんて初めてのこと。変だなぁと、再度、食器洗い機を動かしたんですが、なんか変なんですね。 洗いが進まないというか。 どうやらダイアルが回って次の行程に進まなくなったようです。

そこで、ミーレに修理に来てもらいました。 ついでに調子が悪かったミーレの洗濯機も診てもらうことに。 実は1年ほど前から、洗濯機がときどき、ドカン!ドカン! と大きな音を立てるようになりまして。 一応、洗濯はできているので、そのままにしてあったんですけど、せっかく修理に来てくれるので。

Img_20170907_122529

そしたらですねぇ、洗濯にはダンパーがついているですって。 ほら、ご覧の通り、車のダンパーそっくりでしょ。 これがスカスカになると、振動が止められなくなって、中のドラムが暴れて、ドカンドカン、になると。 この部品代が10800円。 すっかり良くなりました。

さて、肝心の食器洗い機。こちらのほうが問題で。調べてみると、外側の容器の溶接がだめになって、水漏れが発生し、その水が受け皿に溜まって、溢れて漏電。 というのが今回起こった現象みたいです。 流石に外側の枠は交換部品にないので、全交換。つまり買い替えとなりました。 Mieleでは機材は同じ値段でどこも扱っているので、値引きはできないのだけど、今回の修理の出張費とか技術費とか、新しい食器洗い機の取り付けに掛かる費用を全部無料にして、純粋に機材の代金だけにおまけしてくれるとのこと。

Img_20170915_105423

これがいままで働いていた食器洗い機。幅が45cm。前面開きでたくさん食器が入り、洗いも綺麗で、これまでよく働いてくれました。 これがないと、食器洗いの手伝いをしなきゃいけないし、なるべく洗い物を少なくするために、料理が偏ったりして、この2週間、交換されるまで不便だったんですよ。

Img_20170915_110641

これが、今回取り付ける、新しい食器洗い機。前回のはダイアルでゼンマイのようにジージーいって回っていくタイプでしたが、今回からマイコン式になってます。 あのダイアル式でも良かったのにな。わかりやすいし。

Img_20170915_114651

交換作業は1時間ほどでおわり、あっという間に元通り。前面の青いパネルもはめ込まれて、何事もなかったかのようにたたずんでます。 いいですよ、食器洗い機。食事が作るのでさえ大変なのに、その後の洗い物が待ってるなんて、奥様、大変ですって。

| | コメント (0)

MATLAB/SimulinkでETロボコンに出場する:Unityと繋ぐ

今回のMATLAB/SimulinkでETロボコンの出場する、という課題で発掘したネタはたくさんあるんですが、面白いものの1つに、プラントモデルにUnityを採用するにはどうするか? です。 物理モデルを作るツールに、MATLABファミリーにはSimScapeというツールがあるのは知ってるんですが、これがまた高い!29.5万円なり。 オマケに、SimScapeって、厳密で部分的な物理シュミレーションをするにはいいんだろうけど、ETロボコンでコース走ります、という規模のシミュレーションに使えるのかどうかが不明。 

そんな中、ETロボコン東京地区Unity部が、UnityでETロボコン競技会場を見事に再現しているのをみて、もしかして、これでバーチャルな大会できるんじゃね? だったら、検証するためにコース走るぐらいなんて、丁度いいでしょ。 Unityでプラントモデル作るわ。

まー、それにしても、みんなMATLABも初めてだけど、Unityも初めてでして。知らないこと一杯で、どれだけGoogle検索に頼ったことだか。MATLABを調べていると、M言語から.NETアセンブリを簡単に呼び出せることが判明。そしたら、もう、C#でUnityと繋ぐライブラリ「UdpRelay」を作って、UnityもC#でスクリプトを書くのは分かったから、繋げるのは簡単。UdpRelayはその名の通り、ネットのUDP接続でお互い対向する形で通信するライブラリです。Unityの最小最大のステップ幅を0.001秒=1ミリ秒に制限して、Simulinkのシミュレーション時間も1ミリ秒にして、Simulinkからパケットにモーター制御値を入れてUnityへ送り、Unityはそれを受け取ってモーター回して、ジャイロとカラーセンサー値を算出してパケットに詰め込んでSimulinkへ送り返す。これを延々と繰り返します。仕掛けは簡単。

Unity_4

ざっくり図解すると、こんな感じ。3次元座標で頭の中がグリグリ回って大変でしたわ。モーターを回すのも実物のモータートルクを使わないと立たないし。カラーセンサーのRGB値は、カラーセンサーの向いている方向にあるコース上の絵柄を読み取ったり、コースでない物体に当たったときは、その表面の色から算出したり。ソナーも似たような方法。もっとベクトルを勉強しておけばよかったと後悔しきり。 大きさは1を1m、重さは1を1kgとして作り込んでいくと、見事に立つんですねぇ。 あと、反発係数はバウンドさせてみて適当な値にして、摩擦はネットで調べた値を元に、なんとなくな値を設定。

このシミュレーターのお陰で、レプリカコースを広げなくても手軽に実験できるし、EV3セットがなくても全員が試せる。実際に開発現場で起きている、試作機がまだ出来上がってこないとか、試作機台数が少なくて順番待ちとか、そういう問題の解決に同じ手法が使えるという実証実験みたいなもんです。 そして、接続がIPということは、このシミュレーターが地球の裏にあっても、接続して動くということ。 もし相手がUnityでなくて、世界に1台しかない超スーパーコンピューターであったとしても、同じ方式で実現できる、という利点があります。まさかね。

ただ、1つ、現状に欠点がありまして。シミュレーションスピードが遅いんです。シミュレーション内の1秒間を進めるのに、実際には7-8秒掛かる。このまったりとした時間がもったいない。ゆっくり時間が進むので、観察が楽という面もありますが、失敗を何回も微調整して繰り返す場合、ちょっと時間がもったいないかな。 でも、実機でパラメータをイジって、コンパイルして、EV3へ転送して、アプリ起動して、走行体をもって場所に移動して、スタートする。 よりかぜんぜん楽ですが。 時間を短縮しようと、EV3側からプラントモデルにアクセスするのは4ms周期だから、Unity側も4ms周期で動かして同期すれば、速度は4倍になる。 なんて試してみましたけど、1ミリ秒刻みでないと立たないんですわ。 途中の経過が大事なんですね。

Next2018

シミュレーションが自由にできるとなると、再現が難しいことも楽々でして。例えば、タイヤを大きくした走行体が9mm厚の板を走るのは、どれぐらい簡単か、とか。 階段の板の厚みを12mmに変更したら、どれぐらい難しくなるか、とか。 コースの図面にしても、試しにレイアウトしてみて画像が得られたら、張り替えるだけでOK。 なんか凄いね、来年の検討なんて楽勝ですわ。


MATLAB/SimulinkでETロボコンに出場する:はじめに
MATLAB/SimulinkでETロボコンに出場する:Unityと繋ぐ
MATLAB/SimulinkでETロボコンに出場する:シナリオで振る舞う心臓部
MATLAB/SimulinkでETロボコンに出場する:拡張性が高いアーキテクチャ

| | コメント (0)

MATLAB/SimulinkでETロボコンに出場する:はじめに

今年もうちの会社からETロボコンに2チームが出場しまして。1つは新人だけで構成されたチーム「爆速」(名前のとおり爆速で走るのが目標だったけど、結果のほうはどうだったのかね) もう1つは中堅で構成したチーム「巨匠・石山岩尾」(名前の由来はメンバーの苗字を1文字ずつ繋げてみたら、結構、強そうだったとか) 東京地区大会に出場しましたが、チャンピオンシップ大会には進めませんでした。

で、この巨匠チーム。真の目的は、MATLAB/Simulinkで開発してETロボコンに出場して、勝てるぐらいのMATLAB/Smulinkスキルを身につけようぜ! というものでした。で、モデルシートには「大会が終わったら、モデル公開します」と書いてあるし。 が、さすがに中堅どころで業務が忙しくて、そこまで手が回らないので、代わりにここで公開することします。 一応、MATLAB/Simulink技術者を養成するというのが、いまのお仕事の1つなので。

で、開発するに当って、いくつかの要求というか目標がありまして、

1.ぜんぶMATLAB\Simulinkを使って開発する
2.シミュレーションを活用して、開発効率を上げる
3.モデルからコード生成してターゲット開発環境に載せる一連の作業手順を確立する
4.機能拡張を容易にするアーキテクチャにする
5.調整が簡単なアーキテクチャにする


まあ、とくに1-3番あたりはMATLAB/Simulinkで出来るんだよね?という重要事項。4-5番は、このツールを使わなくたって大事なこと。 ですかね。

なんせ、一人前のソフトを揃えるとシミュレーションできるまでが110万円(つまり1-2番ができる) さらにコード生成までできるセットは一人前が240万円もかかります。 スッゲー高いソフトですから、なかなか買えるもんではありません。が、太っ腹の会社。6セット分を買ってくれましたわ!
なので、モデルを公開したところで、MATLAB+Simulink+Stateflowを持っていないと、開いてみることができませんので、HTMLでエクスポートしたファイルをZIPで固めたのを用意しました。 このファイルを解凍して、IshiyamaGanbi2.html ファイルをブラウザで開けば、ブロックをクリックしながら階層構造を開いて、モデルを読むことができます。


「IshiyamaGanbi2.zip」をダウンロード


開くと、トップモデルはこんなふうに見えるはずです。四角いブロックをクリックすると開いて、さらに詳細が見えます。

Modelall


このモデル、ざっと説明すると、下に3個並んでいるのが、EV3に乗っかる部分で、EV3のセンサーとアクチュエータは左右にRealInDev、RealOutDevとして分離されてます。これは、真ん中のTargetModelの入出力をシミュレーターにつなぎ替えてシミュレーションするためです。 上のPlantModelがシミュレーションするための部分。この図の接続はシミュレーションするときの配線で、EV3に載せるコード生成をするときは、バツで示した結線を赤線の方につなぎ替えます。 右上のDashboardというのは、シミュレーションする際に、EV3の前面ボタンを操作したり、走行中のデータを観測したりするダッシュボードが入ってます。 左側にZ-1というDelayが入ってますが、これが一工夫でして、Simulinkってシミュレーションするとき、すべての信号の流れを1つの関数にするみたいで、ループになっていると、無限に関数が終わらない「代数ループ」という状態になるのを防ぐためのもの。

Sim

シミュレーションのプラントモデル、つまり真ん中のTargetModelがセンサーを読んで演算してアクチュエータに出力した結果、走行体に何らかの物理的変化が起こるわけですが、これをどうするか? 最初は簡単な平面のなんちゃってプラントモデルを作ってTargetModelの論理的な確認は出来ていましたが、スタートしてゴールして難所を越えてパーフェクト! という一連の確認をするには本格的な物理シュミレーションが必要なわけで。 そこで、東京地区の人達がUnityを使って実物そっくりのコースに走行体を走らせているのを見て、Unityなら真面目に本物そっくりの大きさ、重さ、トルク、とかでUnityモデルを作ってあげたら、立って走ることも出来るんじゃね? という予測からUnityを使うことにしました。 そのシミュレーションの様子がこれ。


真面目に作ると、ちゃんと立つのが出来るんですわ。Unityって凄い。 そんなわけで、巨匠チームが実機を使って調整を始めたのが、大会1週間前。おいおい、ほんとにそんなんで大丈夫なのかね。

とまあ、シミュレーションの威力を堪能できたわけですが、モデルやシミュレーションについての掘り下げた話は、おいおい追加しておこうと思います。 いやー、MATLABって凄いわ。


MATLAB/SimulinkでETロボコンに出場する:はじめに
MATLAB/SimulinkでETロボコンに出場する:Unityと繋ぐ
MATLAB/SimulinkでETロボコンに出場する:シナリオで振る舞う心臓部
MATLAB/SimulinkでETロボコンに出場する:拡張性が高いアーキテクチャ

| | コメント (0)

C350eに試乗しました

今回は試乗といっても車検の代車として1週間。C350eのeはプラグインハイブリッドの意味です。ただし、充電するときは200Vで4時間だそうで、うちには200Vのコンセントが外にないので、実質、ハイブリッドとしての試乗です。
入れ替えたとき、バッテリーはほぼ空っぽだったので、チャージモードで20数キロ走って、バッテリーに79%まで充電。チャージモードはずっとエンジンが回っていて、エンジン回転と減速時の回生ブレーキで充電するみたいです。

Img_20170521_103909

さて、じっくり観察。まずは充電するときのケーブルは、トランクの左側の側面のフタを開けると入っています。

P5215501

プラグの計上は、普通の200Vのタイプ。家にコンセントがあったら充電してみるんだけど、ちょっと見当たらないんだよねぇ。

P5215503

動力用のバッテリーがこの辺に詰まっていると思われます。トランクの底が1段高くなってる。かなり使い勝手は悪そう。昔、レクサスのGSだったか、あれもハイブリッドはこんなふうになっていたような。ただ、底が少し高いだけなので、ゴルフバックとかは積めそう(ゴルフしないけど)

P5215504

内装は最近のやつですが、こうして光を浴びると、銀の縁取りがキラキラして、じつはちょっと運転しずらいんだな、これが。

P5215506

車検証から分かるのは、後ろのほうが重いです。エンジンはガソリン2L、車重が1830kgでカブリオレぐらい重い。ノーマルガソリンと比べたら200kgぐらい重いんじゃないかな。

P5215508

右ハンドルですが、中央のトンネルが大きいので、左足の置く場所が狭いです。ここにモーターが入ってるんじゃね? と思ってたんですが、営業さんいわく、ガソリン車でも同じぐらいのトンネルですと。

P5215510

機能がだんだん増えて、マニュアルは昔のガラケーぐらいある。面白いのはオープンソースを使っているらしく、自分のソースコードを公開する義務があるから、それが8cmCDでマニュアルに混じってた。面倒くさいから中身みなかったけど、どの辺に使ってるんですかね。

さて、実際に乗ってみての印象は、ランフラットタイヤなのにゴツゴツ感はなし。ただ、全体的に車両の揺れは大きい。 79%のバッテリー残量で15kmぐらいはモーターだけで走れました。そのときの動力性能は普通に2Lのクルマみたいな感じ。でもEVですからアクセルの反応はいいし、トルク一杯。時速100km超えてもへっちゃら。

バッテリー残量がなくなると普通のハイブリッドモードになるんですが、時速100km超えていても、エンジンが止まったり動いたり。エンジンが回り始めるとき、回転数をとっても上手に合わせます。 そのとき、ショックはまったくないですが、「ピシュン!」という音がします。セルなんだかクラッチなんだか分かりませんが。

アクセル全開、エンジンも掛かりますけど、エンジン音が大きくないので、速いんだかよく分かりません。しかし、体感からすると結構速いです。 アクセスのレスポンスが速いのがいいですわねぇ。 モーターのお陰だ。

難点を上げるとすると、減速時にブレーキ+回生ブレーキ+エンジンブレーキの3つが同時に掛かった状態から、エンジンがストン!と止まるとき、急に減速感がなくなってブレーキが抜けたような感じになります。 昔のプリウスってこんなのだったなぁ。 ブレーキ+回生ブレーキか、回生ブレーキ+エンジンブレーキのときは大丈夫なんですが、3つ重なるとダメです。

あと、停止時から走り始めると、モーターで走り始めて、途中でエンジンがかかって、同調し始めるんですが。アクセルの踏み方によっては、エンジンのトルク感だけになって、一瞬、期待した加速感でなくなるときがあります。

まあ、PHVとして気になったのはこの2点ですかねぇ。 あとはよく出来てます。

Img_20170523_212416

1週間借りて、134km、走りました。この間の平均燃費がが12.6km。 うちので同じ使い方だと9kmぐらいだと思われるので、燃費が3割増しぐらいですか。 15km/Lぐらい出ると凄いんですけど、期待したほどではなかったです。 もちろんPHVなので、家で充電してたら、凄い燃費になるのでしょうが、こればっかりはねぇ。豆でないと。

次はディーゼルで同じことをやってみたいですね。GLEクーペとか面白そうなんだけど。

| | コメント (0)

ADSLを廃止してAterm MR04LNモバイルルーター化計画

ときどき富士山の家の方に行くわけですが、もちろんネット環境がないと話にならないのでADSLを引いてます。 しかし、山の中だから光回線はムリで、ずっとADSL。 速度的にはそんなに不満はないけれど、掛かる費用を計算してみると、固定電話+ADSLで4400円ぐらい。 それにパソコン通信時代から契約しているNiftyのADSL契約が2000円。 もうNiftyはこのブログぐらいしか利用してないしなぁ。 メールみないし。

そこで、このネット環境をモバイルルーター化して費用削減にトライすることにしました。 いまモバイルルーターは1万円ほどで手に入るし、格安SIMを使えば2千円ほどで契約できるだろうから、月々4千円ほどの節約、1年で4.8万円なり。 ということで、まずはモバイルルーターの選定から。

Img_20170506_085752

ネットでいろいろ評判を見ているとNECのAtermシリーズが良さそう。けっこう昔からやってる製品だし、マニュアルでは外部からのアクセスが出来るよう、ポートマッピングとか機能があるし。 ほとんど無人で動いてもらうわけだから、1に安定動作、2に外部アクセス機能 がないと候補除外です。 今回はクレドール付きのAterm MR04LNにしてみました。

そして、次に格安SIMをどこにするか? 検索しているとu-mobileという会社のLTE使い放題が2500円ほどで手に入ることが判明。 さっそくAmazonで注文して入手。 ここにいてもAmazonが届くから生活に不便はないから。

とどいたSIMをセットしてネットで開通手続きしてすぐに使い始めました。調子は上々。 そして、外から見れるようにDDNSをなんとかしなきゃいけないわけですが、いま使っているIO-DATAのルータには、IO-DATAのDDNSが無料で使える機能がついていたので、それを利用していたのだけど、 モバイルルーターのLAN側にそれを繋いでDDNSの登録を掛けると、IO-DATAのルーターとモバイルルーターとの間のIPアドレス、つまりローカルIPを登録してしまってダメでした。 まあ、ルーターのWAN側のIPアドレスを登録しにいくんでしょうねぇ。

そこで、つぎの手段としては、フリーのDDNSを提供しているサイトを利用。 いくつか試してみたけど、MyDNSが一番手軽で良さそう。 DDNSへの登録もHTTPでページアクセスするだけで、自動的にアクセスしてきたグローバルIPを登録してくれるし。 ところが、どう頑張っても外から見えない。 変だなぁとモバイルルーターの設定とか登録されているDDNSのIPアドレスとか見てたら、 このu-mobileのサービスは、モバイルルーターに割り当てられるWAN側のIPアドレスがローカルIPっぽいです。 モバイルルーターの情報表示で見えるIPアドレスと、MyDNSで登録されるIPアドレスが違う。  そうなんです。 ここで初めてu-mobileのIPアドレスがローカルだと気づいたわけで。 ネットで検索してみると、最近の格安SIMはローカルIPが割り当てられるのが普通で、グローバルIPは稀だそうな。 そうなんだぁ。 スマホにはOCNモバイルONEを使ってたし、 会社のモバイルルーターはY!mobileだし、そんなこと気づきませんでした。

試しに、スマホに挿してあるOCNモバイルONEのSIMはをモバイルルーターに挿してMyDNSに登録すると、IPアドレスが一致して、URLでモバイルルーターまで届いて、カメラにアクセスすることができました。 ああ、u-mobileは1ヶ月つかって解約だわ。

そんなわけで、モバイルルーターについてきたOCNモバイルONEの通信専用SIMを使って、10GB/月のコースを開通手続きして、このブログも書いているわけです。 通信速度も空いているときは下りが5Mほどでるので、ADSLの2Mよりマシ。 でも、この辺の携帯電話のアンテナが少ないんでしょう。GWで観光客が近所の遊園地とかにたくさんやってくると、LTEでつながるのが難しくなって3Gに落ちちゃうし、速度も1M以下に下がるし。

このAterm MR04LNはSIMが2枚刺さるので、u-mobileとOCNモバイルONEの2枚を切り替えながら、回線速度とか見てたんですけど。 u-mobileのほうが3日目ぐらいから全然だめになってきて、OCNモバイルONEの下りが5Mぐらい出ているときでも、u-mobileだと100Kも出ない状況。 これ、最初だけ速くしといて、あとから遅くするような仕掛けがしてあるとか? 解約しようにもu-mobileのページですら満足に表示できない状況でして。 頭にきてOCNモバイルONEのSIMで繋ぎ直して、すんなり解約。 どうなっとるんですかねぇ。

Img_20170506_080907

そして、解約したらSIMを送り返せという面倒さ。 SIMなんて使い捨てじゃないんだっけ? というわけで、厚紙に両面テープで貼り付けて、送り返そうとしているところであります。

さて、DDNSのほうは完全には解決していなくて、モバイルルーターに割り当てられたグローバルIPが変わったら、MyDNSに登録し直さないといけません。 いま、その仕掛けが用意出来ていないわけですが、余っているRaspberry piを持ってきて、1時間に1回ぐらい登録しなおすスクリプトを組んで対応しようかと思っている次第です。


| | コメント (2)

«トーヨータイヤ PROXES CF2の印象