23来年のETロボコンにmrubyで参加しようと思ってるひとへ(2019年版)mrubyETロボコンはじめに同じタイトルで記事を書き始めてもう6年目になりました。月日が経つのは早いものですね。例年同様、ETロボコンに限らず汎用的に使える内容にしましたので、ETロボコン参加者以外のmrubyユーザーさんにも参考にしていただけると幸いです。今年一番のニュースはこれじゃないでしょうか。所属の出雲コアカレッジさんのサイトにも掲載されてます。🎊\(^o^)/👏『楽しくなければプログラミングではない』というブログエントリーも書かれています。CS大会の結果は残念がっていらっしゃいましたが、倒立ではmrubyは不利とずっと言われ続けていた中で世間の思い込みを裏切る実績を見せてくれたことに感謝したいです。今後の活躍が楽しみですね。九州北1)だったようです。中四国以外はすべてアドバンスト(非倒立系)でした。使用されたEV3RT用mrubymruby-toppers-ev3rt軽量Rubyフォーラムの中の人が作成したものです。SCSKさんのチーム(アドバンスト)が毎年使用されているようです。mruby-ev3rt私たちyamanekkoが作成しました。今年も中四国のチームが採用してくれました。今年はマルチタスクや、sharedmemoryを使用したタスク間のデータの受け渡しにも挑戦したそうです。関西のチームは不明です。1技術教育(ETロボコン限定の話題)教材についてETロボコンの技術教育は2回に分かれていて、去年までは2回目のみmruby対応していました。2018年度参加チームの方でしたら、地区を問わず配布可能ですので、ご興味のある方はご連絡ください。昨年度はC/C++と教室を分けて実施を計画していましたが(豪雨で中止)、今年の中四国地区は言語に依存しない形での教育の実施を試みました。春、夏の2回独自勉強会を実施しました。今年は地区内でmrubyチームが1つだけなこともあって、独自勉強会でのmrubyネタは控えました。4いちおうTOPPERSの中の人なこともあってRTOS(EV3RT)の話をしたり、SESSAMEの状態マシン図設計セミナー(恒久的なページがないので以前の開催のページにリンクしておきます)で好評な「モデルレビュー」の体験などを実施しました。私の時間はmrubyユーザーに限らず、参加者全員に知っておいてほしい内容にしました。昨年度(当時理由は書けなかったけど)予告していたものです。マーカーが灰色から青色へ変更に伴い、青ラインを識別する必要が出てきたため追加したものになります。5colorcolorメソッドはいちおう作っておきましたが、例えば、あなたが赤色だと思う色を読ませてもAPIは赤と返さない可能性があることに注意してください。これは、mrubyのメソッドの仕様ではなくて、内部で利用しているEV3RT、もっというとEV3RTが利用しているライブラリの仕様になります。レゴブロックの色判定ができる値になっているらしいという噂はありますが、ソースは未調査です。環境にもよりますが、コースの緑色は緑と判定されないケースが多いようです。一般的には、識別したい色だとするRGBの値の範囲を自分たちの測定結果を元に決めることが多いようですね。rgbRGBそれぞれの値を配列に入れて返します。rgb_partrgb_partというメソッドも追加しました。RGB全ての値が必要とは限らないよね?ということで、ほんの少しでも速度とメモリ使用量を減らすことができればうれしい人のために作ったものです。こちらも他のAPI同様にEV3RTの関数を内部で呼んでいるのですが、カラーセンサー自体がRGB全て取得して返す仕様になっています。そもそも論として、brightnessより時間がかかります。ここで、内部で利用しているライブラリがRGB全て取得してから返してくるのに、なぜmrubyのメソッドをわけたの?という疑問がでてくるかもしれません。mrubyでRGB3つの値を返そうとすると、arrayを利用する必要があります。Bのどれか一つだけなら、arrayではなく、普通に値として返すことができます。誤差の範囲かもしれませんが、読み書きにかかる時間短縮とメモリの節約を求める人のために作ったものです。詳細は後述しますが、EV3の場合はヒープやスタックの使用量はあまり気にする必要がありません。GCの対象物を減らすという意味では効果がないわけではありません。言うまでもないですが、2つ以上の値を使うならrgbの方を使いましょう。内部的に取得した値を保持したりしていないので、都度RGB全ての値を取得し直して、指定された値のみ返すということになってしまいます。serial受信APIの追加コミットログから察してもらえたと思いたいのですが、リモートスタート用に1文字受信できるAPIを追加しました。こちらも昨年度予告していたものです。速度を考慮して、リモートスタート目的に最適化するという意味で、1文字固定にしています。長い文字列を送りたい要望がありましたら実装するので、その旨お知らせください。複数タスクを作っているとデフォルト設定ではヒープが足らなくなることがあります。3.0Ruby3.0対応以外にもいろいろ変わりそうですが、おそらく4月の時点では公開されてないと思いますし、もし出ていたとしてもリリース直後だと思うので、来年度は使わなくて良いかなと思います。(CRubyとは関係なくmruby独自の変更点としては)内容的にも省メモリになる予定ですが、EV3にはほとんどメリットがないので...。2.1.02019年11月に2.1.0がリリースされました。私の方では動作検証できていないので、動かしてみて何かあれば4月ぐらいまでにはこちらに追記しておきます。そのまま使えると思いますが、もし、先に試してみて動かなかったという場合があったとしたら、引数の数チェックが厳しくなったので、(Ex.宣言では引数3個としているのに、2個しか使ってなかった場合など)これまで動作してたものがエラーになってる場合は考えられます。6minirakeはやめてRakeを使おう時間がなくて詳しくは追えていないのですが、(EV3向けではなくmruby全般として)minirakeでビルドできない(エラーが起きる)ケースが時々見受けらるようです。)以前はRuby(CRuby)をインストールしてもRakeがインストールされないバージョンが存在していたので、Rakeがインストールされていない環境でも動作できるようにするためにminirakeが存在していました。現時点ではメンテされているRuby(CRuby)にはRakeが同梱されていないバージョンが存在しなくなりました。Rakeがない環境は考慮しなくて良いでしょうと考えました。rakeという感じに書き換えます。mruby本体も先日更新されています。https://github.com/mruby/mruby/commit/de17f63b4567cad3b02f1f1f9386eaf8dd704bbe#diff-b67911656ef5d18c4ae36cb6741b7965どれを使う?以前はGitHubのリポジトリから最新をcloneしてくる方法を勧めていた時期もありますが、最近の状況を見ていると、使い慣れてない人はリリース版をおすすめします。2.1.0か、去年使っていて問題なかった場合は2.0.1を使い続けても良いかなと思います。mruby-ev3rtHRP3対応は春までにしておきますが、来年度向けに機能追加は今のところ予定はありません。あったら嬉しいAPIなどあったら教えてください。最後に今年はETロボコン教材の完全mruby化など実施してみましたが、非公開モノの制作はその情報がほしい人に届けられないというジレンマと戦わなければなりません。今年も初めて会う方からmrubyに関するお話を聞く機会に恵まれました。情報がほしいという声が多々あり、私自身もより多くの人に届くようにアウトプットしていくのが、私自身も含めてより多くの人が幸せになれるのではないかなと思います。EV3に関する情報も、ETロボコン参加者以外の方にも興味を持ってくれる人が増えてきました。公開できるモノの優先度を高く設定することにしました。いうと、ETロボコン向けのサポートは手薄になるの?と不安に感じられたかもしれません。今年1年間、いろいろ試しながら考えてきましたが、大丈夫そう(方針転換によってmrubyでETロボコンに参加してくれる人が困ることはないだろう)というのが私の結論です。ETロボコンに限らず、使ってみたいという方がいらしたら教えてください。ご意見、ご質問、ご要望等あればコメント欄、メール、Twitterなどでお知らせください。↩ルール上、参加者以外の方にお渡しできないので、参加者であることが証明しやすい方法として参加者MLの内容を提示しただけです。MLに登録できていない参加者の方はひとまずコメントください。upLoginユーザーは見つかりませんでした。