Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
どうも高校生活最後のロボカップに向けて頑張ってる高ⅡのEaterです。
CAN通信で結構痛い目にあったので何かの役に立たないかとCAN通信が成功するまでの軌跡をまとめてみようと思った次第です。
CAN通信は車載ネットワークの一つで、いわゆるバス型の通信です。マルチマスターでIDを使って通信相手を特定するのが特徴でしょうか。I2Cと違いIDはデバイスに固有というわけではなくプログラムでIDを読んで受信するかどうかを判断する感じですね。詳しい仕様はインターネットで調べてください。
CAN通信は多数のマイコンで通信するのに大変便利な仕様なわけですがなにせ初めて使ったので通信に成功するまでかなり時間がかかりました。その過程での間違いポイントを下にまとめます。
・CANトランシーバーの電源電圧を間違えた
我々はmcp2551をCANトランシーバとして使用しています。これは電源電圧5V程度で動作します。使用していたマイコンはstm32f1シリーズで電源電圧は3.3V。しょうもない話ですが、両方の電源電圧を3.3Vに設定してしまいトランシーバが電圧不足で動きませんでしたorz。何事においてもですが動作電圧は必ず確認しましょう。
・終端抵抗を忘れた
CAN通信には終端抵抗というものが必要です。120Ω抵抗を両端にそれぞれつけなければならないのですがすっかりそれを失念。しょうもないですね。
・RS抵抗の抵抗値ミス(?)
mcp2551にはRSピンにRS抵抗というものをつけます。データシートに書かれていることがよく分からなくていまいち抵抗値の設定法がよく分からなかったのですが、とりあえずもともと10kΩだったのを2.2kΩに替えてみました。
ここまで修正を加えるととりあえず1対1の通信はできるようになりました。しかしそれでも二つのマイコンからデータを送信してもう一つのマイコンがその二つからのデータを受信しようとすると片方からのデータしか受信できませんでした。次からはそれに対する対策をまとめます。
・UARTのボーレートを上げる
この時のテストは受信割り込みが入ったら受け取ったIDとデータを配列に保存してUARTでFT232RLを経由してPCに送信、というプログラムで行っていたのですが、もしかするとUARTを送信する間に割り込みが入ってせっかく受信したデータが上書きされているのかもしれないと考え、UARTの通信速度を上げてみました。
・バッファをID別に複数用意する
上の対策をもってしても受信できませんでした。そこでいっそID別にバッファを用意してたとえ上書きされても別のIDからのデータと競合しないようにしました。
結果、主にバッファを増やしたことが功を奏して二つのマイコンからのデータを両方受信できました。ちなみにですが、一つだけF4マイコンでなんでか通信できないなぁと思っていたら通信速度の設定ミスというオチ。お粗末さまでした。
結論 : 実装するときは、仕様をちゃんと把握してまとめてから実装しましょう。
P.S.
デバッグのことは常に考えておきましょう。すべてのノードのマイコンにデバッグ用LEDをつけておくと後々幸せになれます。
通信が成功する前提でデバッグ用LEDを一つのマイコンにだけ実装するとか愚の骨頂です。
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
どうも、昨日初めて「バルス!」に参加しましたEaterです。
なんであんなにはやってるんでしょうね。まぎれて違うことつぶやいている方もいらっしゃるのが謎!
さて、本題に入りますが
とうとうレスキューロボットの足回りが形になりました!
内部にLiPoバッテリーが格納され、底部のふたから出し入れをします。スイッチは元電源とモータ用電源です。
まだモータぐらいしか目に見えて動くものがないんですけどやっぱり形になるのはうれしいものですね。
ですがしかし
実は今現在どこにもパイロットランプがないんです!!超音波センサのLEDで起動確認しているような状態なんです!
別にUI用の基板別で用意するからいいや~、なんて思ってたんですけど、UI基板をつなげる以前のテスト(それぞれの機能、基板ごとのテストとか)で結構困るというのがよく分かりました。
せめて一つのマイコンにつき一つのLEDとボタンがつながってるといろいろやりやすいんじゃないかと思います(当たり前だ)。
京都ノードは2月7日、あと1か月切ってますが全力を尽くす所存であります(`・ω・´)キリッ
・・・チーム名でももめてまだエントリー出してないんですけどね
ではではノシ
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
こんばんは、最近更新したばっかりのEaterです。
26日に年内最後の活動があって(2人しかいなかったけど!)、そこでそれなりな進捗があったので報告しておきます。
ここしばらくの間、我々はCAN通信ができないという問題に悩まされていました。できないなら飛ばしてほかの部分のコードを書くという手があれば足踏み状態にはならなかったのかもしれません。
しかし残念なことに分散して別々に動作しているF1マイコンたち(今回のロボットはいくつかのマイコンでセンサーの読み取りや駆動等を分担しています)には液晶やLEDがついておらず、それぞれが正しく動作しているのかを確認するためにはデバッグ用の基板にCAN通信でデータを送らなければならなかったのです。
で、CAN通信と格闘すること1月くらい。最終日にようやく成功しました。
原因はいくらかのつまらないミスでした。
原因その1:MCP2551の電源に誤って3.3Vを供給していた。正しくは5Vです。
原因その2:終端抵抗を忘れていた。両端に120Ωほど必要です。
原因その3:STLinkをつなぎっぱなしにしてリセットがかかったまんまだった。これが一番つまらないミスだと思います。ダメ、絶対。
原因その4(?):Rsにつなぐ抵抗値。これを変えると動作モードが変わるそうです。データシートをよく読む必要がありそうです。
こういうミスは気付くとしょうもないのですがなかなか気づかなかったのが悔しいです。まぁ気付けたので精神的にはまだ安定して新年を迎えることができそうです。それではいいお年を!
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
お久しぶりです、Eaterです。
最近勉強がつらいです。地球の自転速度が1/2になればいいななんてよく考えます。そうすれば自分の持ち時間が2倍です!
…どうせ授業も宿題も倍増するんでしょうけど。
さて、久方ぶりの進捗報告です。主にハードウェア面での進捗を。
まずはこれから。せっかく3Dプリンターを買ったのでサーボモータの固定具を作りました。ええ、3Dプリンターを買ったのです。Bonsai lab。こういうところで便利ですね。結構失敗もするんですけど。
これをどこに取り付けるかというと…
ここです。何をやる装置なのかいまいち分かりませんが被災者救助機構です。なぜだかよく分かりませんが今年から被災者がボール状になったので、今までのはさむタイプでははさめなくなってこんな形になりました。
今のところの作戦では、壁を利用して何とかこの機構の上(右の写真でボールが乗っているところ)に被災者を乗せてサーボモータで持ち上げるつもりです。
こちらはレスキューロボット本体です。本来なら両側にキャタピラがついているのですが作業中で取り外されたところしか撮影できませんでした。これの上にさらに先ほどの装置やら制御基板やらその他もろもろがさらに乗ります。中の空洞は電池を入れるところです。下に扉をつけて取り出しやすくしてみました。
ロボットに塩化ビニルを使うという新たな試みです。結構便利です。透明なのもいいですし何より圧入を利用した設計が楽です。MDFのようにすぐゆるむこともなく、ジュラルミンほどシビアな設計を求められることもありません。欠点はCNCフライス盤で切削したときに削りかすがすごく飛び散ることでしょうか。
そしてカメラです。塩化ビニルと3Dプリンターを利用してレンズをカメラモジュールに固定しています。3Dプリンター便利です。
このカメラはライントレースに使うつもりです。交差点にある緑色を簡単に識別する方法を考えた結果、ここにたどり着きました。なんか京滋奈ブロックのローカルルールが意味深なんですけどね…。
今回の報告はこれまで。…制御のほう?え、知らないですね。善処します。1月の間にプログラムのテストができるよう、それまでに動作確認や組み立てを終わらせたいと思っています(遅い)。
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
60thレスキュープロジェクトチームのチームリーダーことmpolr-polarです。
今回の機体は今までの仕様とは違ったものになります。
というのも、そもそもライントレースで後輪駆動かつ2輪の足回りでライントレースをするとき、速度は出るが、4輪駆動や履帯に比べたら精度が劣るのではないかという疑問があったのです。
なので、今回はebayさんからレゴのキャタピラセットみたいなやつ(履板*100 + 起動輪*4 + 転輪*6)を購入し、履帯部分の試作もしてみました。
少々揺れるのが厄介ですが、とても細かい振動なので、フィルタリング次第でどうにでもなるだろうと思われます。
そして、側面の超音波センサを履帯モジュール部分に組み込むことで、車体のスペースをできるだけ確保しました。
また、使うモーターはギヤードモーターですが、今まで使ってた380K300ではなく、もうちょっと小さなロータリーエンコーダー付きのものを使用します。
モーターが小さくなる分、車体の横幅を狭くできる利点が生まれるのと同時に、機体の重量をできるだけ軽くすることもできます。
また、ロータリーエンコーダーが付いているので、以前よりも正確な制御が可能です。
さて、レスキューAのルール改変ですが、厄介なことに交差点に緑のマーカーが設置されることがあり、そのマーカーがある場所によってどっちに曲がる、なかったら直進みたいなルールになりました。
前回、ラインセンサを使って交差点を認識するのにとても苦戦したので、いっそ線じゃなくて平面で見てやろうということで、ラインセンサとしてカメラを採用しました。
それに伴って、カメラを制御できて手を出しやすいRaspberry Pi 2を使います。(本当はもっといいLinuxボード使いたいんだけどね)
また、フレームレートを安定させたいということで、CAN通信を採用します。センサごとにマイコンを割り振って分担作業させることで処理速度向上を図ります。
(画像を追加する予定・・・)
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion),
お知らせ,
クラブ全般 タグ:
Robocup junior
こんばんは、Eaterです。
今日はロボカップジュニア京都ノード大会が伏見工業高校で開催されました。
われわれロボット研究部は選手として、またはスタッフとしてこの大会に参加しました。自分を含めた60期4人はTeam ScorpionとしてレスキューAセカンダリに出場しました。61期はPerseusとしてサッカーBオープンに、62期はAquariusとしてレスキューAプライマリに出場。
いやぁレスキューコース思ったよりも簡単でしたね、身構えて損した感じです。まぁレスキューに関してはノード大会に3チームしかエントリーしていなかったので通過は確実で、ほぼ練習会って雰囲気なので当然でしょうけど。
さて、京都ノードの結果発表!
62期Aquarius:欠場! 電源周りのエラーで一度も競技を行いませんでした。
61期Perseus:1位! 相手が来なかった没収試合とかもあったけどすごいことには変わりないですね。
60期Team Scorpion:2位! ただし3チーム中の模様。いや、微妙ですね。準優勝にしてブービー賞、つまり真ん中。というか1位と差が開きすぎてるので真ん中とも言えません。精進しないと。
以上、結果発表でした。京滋奈ブロック大会は3月15日に伏見工業高校で開催される模様です。
…ちなみに
Scorpion:さそり座 Perseus:ペルセウス座 Aquarius:みずがめ座 です。
Filed under:
60期レスキュー班(現the Reticle 旧Scorpion)
今年のレスキューAセカンダリの結果を報告ですが、お世辞にもいい結果だったとは言えないような結果でした。
点数、順位までは詳しくお伝えすることはできませんが、参考程度にどのような様子だったかというと、
たまにラインを無視して反れる、壁にぶち当たってもそのまま進もうとするなど、プログラム側に問題があります。
さらに、障害物まで辿りつけず、獲得した点数は減速バンプ・ギャップのクリアのみと非常に残念なものでした。
来年度の大会までにプログラムの改良や機体の配線の悪さ・メンテナンスのやりにくさを改善した形状に変更する予定です。
お疲れ様でした。