浅葱輪業

Programming & Bicycle

【ハルヒル2025】本番編

1. はじめに

前回に引き続き、前日移動とレース当日の振り返りです。

相変わらずハルヒルは素晴らしい大会で、運営やボランティアの方のホスピタリティを感じた二日間でした。

2. 前日受付

いつも通りの輪行移動で高崎駅へ。前日受付は高崎駅前と榛名体育館のいずれかを選べますが、輪行で来る方で会場物販に興味がなければ、高崎駅前での受付がベターかと思います。

以前との変更点として、事前に下山袋が郵送されてくるのではなく、当日QRコードと引き換えに受け取る段取りになっていました。

受付で受け取った下山袋に荷物一式を詰めて、自分のエントリー番号にあった荷物入れに預けます。

今回は天気予報が良かったこともあり、下山荷物の中身は以下の通りとしました。

  • 冬用ジャージ
  • 冬用靴下
  • 冬用グローブ
  • 耳当て
  • ツールボトル

これらを一つの袋にまとめておいたので、スムーズに荷物を預けることができました。

3. 買い出し・夕食

テルチェックイン後、夕食と朝食の買い出しへ。

夕食はセブンで購入したセブンの「とみ田監修デカ豚ラーメンワシワシMAX」を食べました。このラーメン食べるのが久しぶりで涙が出るほど美味かったです…

あとは翌朝用にコーヒー600mlとおにぎり2個、炭酸水1リットル、ポカリ500mlを購入しました。

事前準備として、夜のうちにゼッケンをジャージに取付。

以前は参加賞としてゼッケンのボタン留めピンが付属していましたが、今回は普通の安全ピンに変更になっていました。以前の参加賞を持って行っていたので、両面テープと合わせて取り付けました。

いつものアビドスジャージ

他には特にすることもなかった+ホテルのWifiが重すぎたので入浴後19:30に就寝しました。

4. レース当日のタイムライン

当日の大まかなタイムラインは以下の通りです。

  • 3:30 起床、朝風呂、朝食
  • 4:30 ホテルに荷物を預けて、輪行解除
  • 5:40 会場到着
  • 6:00 仲間と駄弁ってから会場荷物預け
  • 6:30 スタート地点移動
  • 7:15 第四ウェーブスタート
  • 9:30 下山(移動)開始
  • 10:50 榛名体育館到着
  • 11:45 ホテル到着、荷物受け取り
  • 12:30 高崎駅

ウォーミングアップとして、会場までの上り区間で300W / 心拍数を170bpmまで上げておきました。会場到着が早かったこともあり、第四ウェーブの先頭付近でスタートすることができました。

5. レース振り返り

ハルヒルの後半激坂区間は苦手なので、初心者ゴールまではなんとかトレインに食らいつつタイムを稼ぐ作戦でスタート。

第四ウェーブ先頭付近からスタート、なぜか計測開始前からペースが上がりガンガン抜かれますが、明らかに着いていけるペースではなかったので見送ります。

計測区間開始後、ウェーブ全体のペースがあがります。初心者区間ゴールまでは時折5倍程度のペースが交ざりますが、まだ余裕があるのでついていきます。初心者ゴール時点で17:02と、作戦通り速いペースで進みます。平均心拍172bpmで結構しんどかったですが、まだ何とか余裕がある感じ。

榛名神社ゴールまでは平坦区間前では必ず前走者のドラフティングに入ることを意識しつつ、傾斜がキツい区間では踏みすぎないようペーシングします。榛名神社ゴール時点で35:08、平均心拍179bpmとかなりしんどくなって残りの激坂区間を前に踏み切れるか不安になります…

榛名神社後の激坂区間は誤魔化しようがないので、何とか平均ケイデンスを70rpm以上になるよう頑張ります。激坂区間を超えた後、男根岩以降までのゆるいカーブは内側のラインを意識します。ライン取りだけで何名かパスできたので、コースを頭に入れておくのは非常に重要と感じました。

男根岩で@kome_is_power さんに撮影頂きました。ありがとうございます!

男根岩後のスパートは気合で走り抜けて、51:16でゴールしました。

Stravaの記録

6.まとめ

というわけで、ハルヒル2025の振り返りでした。

冒頭にも書いた通り、ハルヒルは沿道での応援、金券が使えるゴール後の屋台など、非常にホスピタリティが高い大会ですので、また参加したいですね。

次回も今年のタイムを上回れるように、もう少し準備期間を確保した上で臨みたいと思います!

【ハルヒル2025】準備編

1. はじめに

2025年5月11日に開催された第13回榛名山ヒルクライムin高崎(通称ハルヒル)に参加してきました。

今回の目標を20代最後だった第7回大会のPRである51分58秒の更新と定めて、エントリーを決めた2/15から練習や準備に取り組んできました。

本記事は前半、準備にあたる内容です。

まず、練習開始前のパワーウェイトレシオは以下の通りです。

FTP:210W 体重:65kg PWR:3.23W/kg

昨年度から仕事が忙しくなった関係で走行距離も落ちており、順当にパワーは低下し体重は増えているという体たらくでした。ここから約3か月でパワーを上げつつ体重を絞る、ヒルクライムレースの基本通りの取り組みとなります。

目標としてはタイムから逆算して、ざっくりPWR:4W/kgを設定していました。

今回は練習だけではなく、食事についてもそれなりに意識して取り組んだのでその結果もまとめます。

2. 練習編

大きなタイムラインとしては、以下の練習に取り組みました。

良かった点

教科書の基本通り、前半でベースを作って徐々に負荷を上げていく練習ができたと思います。

特に、4月に入ってSSTに取り組み始めてからは目に見えて20分パワーが上がっていき、ヤビツ峠のタイムも毎回伸びていましたので、非常に有効でした。

毎回1分以上更新している

反省点

準備に取り組み始めるのが遅く、トレーニングボリュームを確保できなかったことが一番の反省点です。

仕事の都合上2月はほとんど乗れなかったのはやむなしですが、もう少し早めのエントリーと準備開始ができなかったのが悔やまれます。

まだまだ乗り込めばパフォーマンスが上がる感覚はあるので、ここでレース本番となるのが正直もったいない気持ちです。

3. 食事編

基本的にあすけん頼みです。(以上)

守りたい、この笑顔

ですが、工夫した点をいくつか。

  • PFCバランス確認のため、課金してあす筋ボディメイクコースにて開始
  • 平日の弁当は鶏むね肉やブロッコリーを中心に、タッパーに作り置き
  • 完全メシは完全なので、積極的に食べる

あすけんのUIは結構使いやすいと思います…しかし、毎回異なる食事メニューを入力するのは結構めんどくさいので、ある程度ローテーションを組んで食べていました。(朝:卵かけご飯、昼:自作弁当、夜:完全メシ+サラダチキン等)

まt、細かくわからない外食や飲み会などは、それっぽいメニューを入力するに留めておいたので、記録には結構誤差があります。しかし、ログボと一緒で心理的には継続することが一番大切なので、この運用は良かったと思っています。

4. 機材編

基本的にはいつもの子ですが、タイヤとチューブのみ新たな製品を投入しています。

  • フレーム:Canyon Ultimate SLX 
  • ホイール:Fulcrum Racing Zero Carbon 
  • タイヤ:Panaracer AGILEST FAST 
  • チューブ:Panaracer Purple Lite

今回初めてTPUを導入(しかもリムブレーキ・カーボンリム)しました。※ あくまで自己責任です。

結果的に、AGILEST FASTの足回りの良さと、TPUの軽さが相まって非常にフィーリングが良かったです。Panaracerの通常AGILESTはTLRで使用したことはありましたが、FASTは別次元でモノが良いと感じます。

で、本番使用で体重測定したところ6.81kgとなりました。

誤差±100gはありそう

5. 結果

目標としていた4倍には届きませんでしたが、結果的に当時とほぼ変わらないと思われるPWRまで引き上げることができました。

FTP:238W 体重:60.5kg PWR:3.93W/kg

StravaのFitness & Freshnessはこんな感じです。

 

準備編はここまで、以降は本番編(前日移動+レース当日)に続きます。

 

【ピスト・シングルスピード用パワーメーター】XCADEY XPOWER CRANKSET 144BCD レビュー

シングルスピードにパワーメーターを搭載したい!

今年に入ってからシングルスピードバイクを一台組んで楽しく乗り回していましたが、パワーが計測できないため、TSS管理に抜けが出てしまうのが気になっていました。

f:id:tk-r:20211003203721j:plain

というわけで、シングルスピードバイクに搭載可能なパワーメーターを検討してみました。

まず、自転車用として、現在市場に出回っているパワーメーターは大きく分けて三種類です。

  • ペダル型
  • ハブ型
  • クランク型

ペダル型であれば流行りのAssioma等が候補に挙がりますが、このバイクではSPDペダルを使いたいので候補から外れました。

ハブ型もピストバイクに使用される120mm幅のモデルは非常に限られますので、消去法でクランク型が第一候補になりました。

 

中華パワーメーター入門

クランク型やパワーメーターを探していたところ、中国XCADEY社のHPにBCD144タイプのクランク一体型パワーメーターがありました。

xcadey.com

本モデルではないですが、Google検索を掛けるとXCADEY社のパワーメーターに関する不具合がそれなりにヒットします…

若干の不安があったのと、日本から購入する方法が公式通販(Paypal利用不可)しかないため、購入のハードルを越えられずにいました。

 

購入~開封~組付

ある日、日課のAliExpress巡りをしていた際に、ふと気になって本モデルのBCD110モデルを扱っているAliexpressのセラーに問い合わせてみました。

f:id:tk-r:20211003211005p:plain

f:id:tk-r:20211003211008p:plain

問い合わせの結果、BCD144モデルも販売可能ということで、ワクチン二回目を打った勢いもあり注文してみました。

ja.aliexpress.com

 

コロナの影響で混載便が遅れに遅れて、 8/30に注文、受け取りが9/30と丸1か月掛かっての到着となりました。

f:id:tk-r:20211003204636j:plain

到着時点で外箱はボコボコですが中華通販を利用するときはデフォなので気にしません。

f:id:tk-r:20211003204840j:plain

 

f:id:tk-r:20211003204856j:plain

中身は下記の通りでした。

  • クランク一式
  • 充電ケーブル
  • スペーサー
  • パワーメーターとクランクを固定するボルトの予備
  • ほとんど役に立たない取扱説明書

チェーンリングボルトは付属しないため、別途購入が必要です。

 

f:id:tk-r:20211003205119j:plain

裏面のパワーメーター固定ボルトはゆるゆるだったのでシマノグリスを塗布の上再度固定しておきました。

f:id:tk-r:20211003205220j:plain

公式サイトには530g(without chainring)と書かれてますが、BCD144モデルは実際は639gと少し重めです。(BCD110モデルは軽そう)

若干気になるのが充電端子がむき出しになっていることで、汚れがついたときや充電前には清掃するのが望ましいかと思います。

f:id:tk-r:20211003205707j:plain

充電端子の横にLEDが埋め込まれており、充電時にはオレンジ、起動時には青色で点滅します。

また、クランク部分の玉押しで固定力を調整する仕組みですが、開封時点でグリス塗布無し&限界まで締めこまれていたのでラスペネをぶち込んで外しました。

f:id:tk-r:20211003211254j:plain

シマノBBを使用する場合、付属のスペーサーを両側挟んで丁度よい感じでした。

 

実走・ログデータ

シングルスピードバイクにはサイクルコンピュータをつけてないので、Garmin ForeAthlete745とペアリングして計測しました。ペアリングの手順は他のパワーメーターと変わりません。

f:id:tk-r:20211003214329j:plain

f:id:tk-r:20211003211932j:plain

走行時のフィーリングとしては、従来装着していたMICHE Pistard 2.0 Crankと体感できる違いはありませんでした。

 

走行後にログデータを確認したところ、パワー・左右バランス・ケイデンスが問題なく記録されていました。

複数のパワーメーターで比較をしていないので、数値の正当性は何とも言えませんが、明らかにおかしいスパイクなどの値はありません。

他のパワーメーターを基準に校正したい場合には、Androidのアプリから比率を変更することも可能です。(アプリ自体はiPhone版もあります)

 

まとめ

ネット上の不具合報告に若干ビビりつつも購入した本製品ですが、特に大きな問題もなく普通に使えています。

気になるのはむき出しの充電端子を含む今後の耐久性ですが、何か問題が発生したら記事を更新したいと思います。(頼むから壊れないでくれ…)

 

ja.aliexpress.com

ZwiftでFTP Builderをやってみた話

はじめに

今年は全然乗れていませんでした…

年初は海外出張に出ていたため、冬場のトレーニング量が不足していた上に、富士ヒルハルヒルの二大目標レースが中止(or延期)となったことでモチベーションも上がらず。追い打ちでハチャメチャ案件に連続でアサインされたりもしました。

4倍弱あったFTPも、明らかに下がっている実感がありました。(辛いので測定はせず)

しかし、幸いにも業務がひと段落して、人権のある時間に帰宅できるようになったため、ZwiftのトレーニングプランであるFTP Builderに取り組んでみました。

FTP Builder

2020/9/18~2020/10/30までの6週間で完走、14784kcalを消費しました。が、走った以上に飲んで食べてたので体重は微増しました…

f:id:tk-r:20201108133021p:plain

Zwiftのトレーニングプランは開始と終了の日時が指定されるため、トレーニングを念頭に置いたスケジュールを立てる必要があります。平日にZwiftでメニューをこなして、土日は天気次第で実走というのが基本的な流れになるかと思います。

前半はFoundationやTempoなど、こんな緩くて強くなるんかと不安になる楽勝メニューが続きます。Stravaで管理している疲労度もそれほど上がらず、土日も実走orZwiftレースに出場する余裕がありました。

しかし、メニューの強度は少しずつ高くなっていき、4週目のIntermittentを境に、FTPを要求するメニューが出てきます。週末に実走をするか天気予報と睨めっこしながら、適宜休息日を入れつつメニューを消化していきました。

後半である5週目/6週目のThreshthold Developmentでは、60rpmから110rpmまでの幅広いケイデンスFTP相当のパワーを出力することになります。これがかなりキツかったですね…

FTP計測

というわけで6週間のFTP Builderを終えて、本当にやりたくなかったですけZwiftのメニューからFTP Test(Shorter)でFTP計測を行いました。Shortなのは本当にやりたくなかったからです。

f:id:tk-r:20201108141509j:plain

スクリーンショットの心拍数(189bpm)を見ると、限界まで追い込めていることがわかります。ウルトラキツかった…

結果としては以下の通りです。

測定 FTP(W) 体重(kg) PWR(W/kg)
前回(5月) 245 62 3.95
今回 255 62.4 4.08

FTPが10W上がり、4倍クラブの仲間入りをすることができました。

まとめ

今回はFTP Builderに取り組むことでFTPの向上を達成することができました。このプランは体に掛かる負荷を少しずつ上げていく、よく考えられたメニューだと思います。

その後、良く練習に行く峠で、昨年の富士ヒル直前に出した自己ベストを更新しました。(8:00→7:50)

f:id:tk-r:20201108145005j:plain

Zwiftのトレーニングプランの感触はだいたい分かったので、次回は別のプラン(TT Tune-upとか?)にも取り組んでみたいと思います。

OGK Kabuto AERO-V1 レビュー

f:id:tk-r:20190416204125j:plain

アイウェアなしで運用できるエアロヘルメット

前作AERO-R1は周りでも使ってる人がいて、付属のシールドを使用することでアイウェアが不要になることが絶賛されていました。自分も泊りがけのツーリングの際にはアイウェアとは別に普段の眼鏡もケースごとパッキングしているので、これらをひとまとめにできるのは魅力的です。

ただし、エアロ性能とのトレードオフで、夏場は非常に暑いという致命的な欠点があるとのことで、自分での購入には至っていませんでした。

とはいえ旧ZENARDも3年が経過して、ヘルメット買い替えだなあと悩んでいたところ、昨年のサイクルモードで発表されたのが本作AERO-V1です。

公式の引用だと、

エアロフォルムによる空力性能と、スムーズなエアフローを実現した快適エアロモデル。

ということで、エアインテークがAERO-R1より増えて熱の籠りを抑えているとのこと。AERO-R1と同様にARS-3シールドを使用可能ということで、発売を心待ちにしていました。 

一般流通は6月以降ですが、破損交換登録店では先行して4月に入荷するとの前情報が流れていました。Twitterを眺めていたところ、

 とのことだったので新宿に行く用事のついでにIYHしてきました。

新宿店では4人目の購入者だったそうです。

AERO-R1とは異なり、標準ではシールドは付属しません。Y'sRoadではシールドアップグレードキャンペーンということで、6/16までにARS-3シールドを同時購入すると10%OFFとのことだったで、調光シールドもセットで購入しました。

 

重量

本体(S/M):220g

f:id:tk-r:20190416190515j:plain

調光シールド:28g

f:id:tk-r:20190416190519j:plain

どちらも公称値ジャストでした。

インプレ

早速90km程度のサイクリングに使用してみたので、インプレをまとめたいと思います。比較対象は3年ほど使用した旧ZENARDになります。

装着感

割と上々で、バイザーをつけると「ちょっと重いかな」という程度。心配していた眼鏡との干渉もありません。

今の季節(4月上旬)の気温だと、熱がこもるような暑さは全く感じませんが、こちらは引き続き使用して様子を見たいと思います。

空力

エアロ効果は意外と体感できます。特に顕著なのが30km/h以上で巡行しているときに首を横に向けた際で、頭の周辺の空気の流れが変わって抵抗が増えるのがハッキリとわかります。

重量はZENARDから重くなってますが、高速巡行中に正面を向いているときには「なんとなく」首に掛かる負担が小さいような気がします。

気になった点

本ヘルメットを購入する人のほとんとがセットで購入すると思われるARS-3シールドですが、シールド装着時に内部で光が反射しているのが気になりました。

今回購入したのは調光モデルですが、店頭で試着した際にはクリア系よりミラー系カラーの方が反射光が激しいように感じました。気になる方は一度実物を確認してみることをお勧めします。

総評

普段使用している眼鏡を着用したまま使用できるシールドが秀逸なモデルです。

エアロ効果も体感できますし、眼鏡ユーザーは選択肢としてかなりオススメできます。6月の富士ヒルは平坦区間も考慮して、ZENARDではなくAERO-V1で出場する予定です。

眼鏡ユーザーとしては、空力に魅力を感じず20g程度の重量増を許容できるなら、より安価な同社のVITTも選択肢としてはアリかと思います。

www.ogkkabuto.co.jp

Rust on EV3RTの構築手順(ETロボコンにRustで参加しようと思っている方向け)

この記事はETロボコン&EV3 Advent Calendar 2018 - Qiitaの22日目の記事です。
来年のETロボコンにRustで参加する人のために、プロジェクトをビルドして実機で動作させる手順を記載します。
本記事は、以下の環境で検証しています。

EV3RT開発環境のインストール

qiita.com
こちらの記事を参考に、EV3RTの環境を構築します。

Rustのインストール

Rustのツールチェイン管理ツールであるrustupをインストールして、必要なコンパイラを追加します。

$ curl https://sh.rustup.rs -sSf | sh
$ rustup default nightly
$ rustup target add armv5te-unknown-linux-gnueabi

Rust on EV3RT SDKのインストール

hrp2をダウンロードしたディレクトリに移動して、Rustのサンプルプロジェクトのリポジトリをダウンロード及び解凍します。

$ pwd
/mnt/c/Users/hogehoge/Documents/hrp2
$ wget https://github.com/TK-R/ev3rt-hrp2-sdk-rust/archive/0.1.zip
$ unzip 0.1.zip
$ cd ev3rt-hrp2-sdk-rust-0.1/workspace

サンプルプログラムの確認

ダウンロードしたリポジトリは下記の構成となっています。

$ tree rust-sample
rust-sample/
├── Cargo.lock
├── Cargo.toml
├── Makefile.inc
├── app.c
├── app.cfg
├── app.h
├── balancer.c
├── balancer.h
├── balancer_param.c
├── balancer_private.h
├── src
│   ├── ev3
│   │   ├── balancer.rs
│   │   ├── battery.rs
│   │   ├── button.rs
│   │   ├── ev3rt.rs
│   │   ├── lcd.rs
│   │   ├── led.rs
│   │   ├── mod.rs
│   │   ├── motor.rs
│   │   └── sensor.rs
│   ├── lib.rs
│   └── sample.rs
....

この中で、lib.rsがプログラムのエントリポイントであり、balancer~のソースコードが公式から提供されている倒立振子ライブラリとなります。
先日の記事で紹介したように、FFIを持ちいて呼び出すことで、C言語のライブラリを資産として活用しつつ、
呼び出し側は安全なRustによって記述することができています。

ソースコードのビルドとインストール

続いて上記のソースコードをビルド、インストールします。
EV3とBluetoothで接続した状態で、以下のコマンドを実行します。

$ make app=rust-sample
$ ll
total 484
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:37 ./
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:21 ../
-rwxrwxrwx 1 tk-r tk-r   4516 Dec 20 23:06 Makefile*
-rwxrwxrwx 1 tk-r tk-r 485832 Dec 20 23:42 app*
drwxrwxrwx 1 tk-r tk-r   4096 Dec 20 23:42 rust-sample/

出力されたappがEV3RTで実行可能なアプリケーションとなりますので、Bluetooth/USBなどの方法でSDカードにコピーします。
β7-2の環境でコピーするなら、Bluetoothが一番簡単かと思います。
ビルドしたプロジェクトを実行するには、センサとモータを以下の通りに接続します。

  • Lモータ : PortC
  • Rモータ : PortB
  • 尻尾モータ : PortA
  • タッチセンサ : Port1
  • ジャイロセンサ : Port4

起動後、タッチセンサを操作すると倒立振子で直進します。
www.youtube.com

動きました。

最後に

この記事が、ETロボコンにRustで参加する方の手助けになれば幸いです。

RustをEV3RT上で動かす話

はじめに

この記事は、ETロボコン&EV3 Advent Calendar 2018 - Qiitaの16日目の記事です。
昨年はEV3RTとC++ETロボコンに参加していましたが、今年はRustをEV3RTで動作させる実験をしたので、その話を書きます。

ETロボコンにおけるRustの利点

Rustは「速度、平行性、安全性を言語使用として保証するC/C++に代わるシステムプログラミングに適したプログラミング言語」を目指しています。

Rust (プログラミング言語) - Wikipedia

Rustはコンパイル基盤にLLVMを用いており、EV3のCPU(ARM)に対応しています。後述するアプローチで、C言語の関数と同様にEV3RT上で実行することができます。
個人的に、以下に示すRustの長所は、ETロボコンに適用するにあたり非常に有用であると感じています。

  • モダンな言語が備えていてほしい機能を有している(Pattern Maching / Traits 等)
  • C/C++と同等の実行速度であり、リアルタイムOSであるEV3RT上で実行できる
  • C/C++や他言語と連携が可能な仕組みがあり、公式APIを含む資産を活用できる
  • 標準環境で単体テストを実行できる(cargo test)
  • Bare-metalまたはRTOS上で動作させるための標準ライブラリを使用しない設定ができる(no-std)

今回の記事ではRustそのものの有用性については割愛しますが、ETロボコンC/C++の置き換えを検討するに値すると感じています。

RustをEV3RT上で実行するためのアプローチ

以下の方式で、Rustで書いたコードをEV3RT上で実行することができました。

EV3用バイナリの出力方法

前述の通り、RustはEV3のCPUであるARM向けにバイナリを出力することができます。(target=armv5te)
ビルドオプションを使用することで、EV3RTのappバイナリとリンク可能なオブジェクトファイルを出力することができます。

$ cargo rustc --target armv5te-unknown-linux-gnueabi -- -C panic=abort  -O 

targetがarmv5te-unknown-linux-gnueabi となっていますが、-Oオプションを用いるとオブジェクトファイルを出力することができます。
また、ソースコード内で#![no_std]宣言を行うことにより、OSの機能を使用しないバイナリとなるため、EV3RTとリンクさせて動作させることができます。
標準ライブラリーの不使用

エントリポイント

FFIにより、lib.rsに以下の用に記述した関数を、C言語の関数のように呼び出させることができます。

#[no_mangle]
pub extern "C" fn main_task(_exinf: i32) {
	// Rustのエントリポイント
}

この関数をEV3RTのタスクとして起動するためのapp.cfgファイルは以下の通りです。

INCLUDE("app_common.cfg");
#include "app.h"

DOMAIN(TDOM_APP) {
	CRE_TSK(MAIN_TASK, { TA_ACT, 0, main_task, TMIN_APP_TPRI + 1, STACK_SIZE, NULL });
}

ATT_MOD("app.o");
ATT_MOD("rust.o");

EV3RT APIの呼出し

FFIの機能を用いて、EV3RTが提供するセンサやモータの操作関数をRustから呼び出すことができます。
以下のコードで、カラーセンサの値を読み出すことが可能です。

#[repr(C)]
#[derive(Default, Debug)]
pub struct RGBRaw {
	pub red: u16,
	pub green: u16,
	pub blue: u16,
}

pub fn color_sensor_get_rgb_raw(port: &SensorPort, rgb_raw: &mut RGBRaw) {
	let port = get_sensor_port(&port);
	unsafe {
		ev3_color_sensor_get_rgb_raw(port, &mut *rgb_raw);
	}
}

extern "C" {
	fn ev3_color_sensor_get_rgb_raw(port: u8, raw: *mut RGBRaw) -> i32;
}

サンプルプロジェクトのビルド

以上をまとめて、EV3RTのディレクトリに放り込める形のソース一式を作成しました。
github.com
以下のデバイスについて、動作検証を行いました。
ev3rt\hrp2\sdk に含まれるファイルを、上記リポジトリのファイルで置き換えてください。
あとはETロボコン参加者の皆さんにはお馴染みのコマンドでビルドできます。

$ cd sdk_rust/workspace/
$ make app=rust-sample

f:id:tk-r:20181214000255j:plain
デデーン

上記のリポジトリのソースファイルでは、以下のデバイスを検証した際のコードを含めています。

  • モータ(L / M)
  • カラーセンサ
  • 超音波センサ
  • ジャイロセンサ
  • タッチセンサ
  • 本体機能( LCD / LED / Button / Battery)

本記事の検証は以下の環境で実施しました。

最後に

この記事を読んで、少しでもRustに興味を持ってもらえればと思います。
それでは、来年ETロボコンに参加される皆さん、どうかご安全に。