浅葱輪業

Programming & Bicycle

【ピスト・シングルスピード用パワーメーター】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ロボコンに参加される皆さん、どうかご安全に。

Bash on WindowsでPDFファイルからベクタ画像を取得する

ETロボコンの競技規約から、マップ画像を抜き出したくなったのでメモ。

pdftkを使用してPDF画像を1ページごとに分割。

# sudo apt-get install pdftk
$ cd work
$ pdftk hoge.pdf burst
$ ls
doc_data.txt  pg_0007.pdf  pg_0014.pdf  pg_0021.pdf  pg_0028.pdf  pg_0035.pdf  pg_0042.pdf  pg_0049.pdf
pg_0001.pdf   pg_0008.pdf  pg_0015.pdf  pg_0022.pdf  pg_0029.pdf  pg_0036.pdf  pg_0043.pdf  pg_0050.pdf
pg_0002.pdf   pg_0009.pdf  pg_0016.pdf  pg_0023.pdf  pg_0030.pdf  pg_0037.pdf  pg_0044.pdf  pg_0051.pdf
pg_0003.pdf   pg_0010.pdf  pg_0017.pdf  pg_0024.pdf  pg_0031.pdf  pg_0038.pdf  pg_0045.pdf  pg_0052.pdf
pg_0004.pdf   pg_0011.pdf  pg_0018.pdf  pg_0025.pdf  pg_0032.pdf  pg_0039.pdf  pg_0046.pdf  pg_0053.pdf
pg_0005.pdf   pg_0012.pdf  pg_0019.pdf  pg_0026.pdf  pg_0033.pdf  pg_0040.pdf  pg_0047.pdf  pg_0054.pdf
pg_0006.pdf   pg_0013.pdf  pg_0020.pdf  pg_0027.pdf  pg_0034.pdf  pg_0041.pdf  pg_0048.pdf

あとは該当ページをInkscapeで編集して、保存。

富士五湖巡りライド

以前より計画していた富士五湖ライドを実行に移すときが来た…

富士山ライドは去年の9月に自走で富士スカイラインを攻略して以来二回目のチャレンジ。 

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

ただし、最寄り駅から輪行マン。

今回のプランは輪行富士駅まで移動して、富士五湖を巡りつつ山中湖で一泊、道志みちを下って帰宅というプラン。

というわけで、

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

こしらえた。

富士駅からゆるゆると20kmほど走って、白糸の滝。

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

ビンディングシューズからビーチサンダルに履き替えて、いざ滝の麓へ。

なるほど滝じゃねーの。

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

人は結構いたけど、水しぶきが飛んでるからかなり涼しかった。清涼清涼。

コンビニ補給を挟みつつ、朝霧高原を目指したけど、桜まつりをやってたみたいで渋滞が凄かった。だらだらと緩い斜度の道を上る。

そんなこんなで道の駅朝霧高原

f:id:tk-r:20160509231340j:plainf:id:tk-r:20160509231700j:plain

ここで食べたアイスクリームが美味すぎた!ただ流石に少し寒かったかな。

残りの上りも片づけて、食事処で昼食。

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

胡麻うどん。

それなりのアップダウンを挟みつつも本栖湖精進湖、西湖、河口湖と回っていく。

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

この日は天気が最高で、常に右手に富士山が見えていた。ただし風はそれなりに強く、途中で先頭を交代しながら登って行った。

あと、GWだからだろうけど普段運転していないような自動車が目立っていた気がする。対向車線であわや接触、みたいなタイミングも見た。

安全運転でさらに走行。

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

 本日のゴール、山中湖。湖畔にはサイクリングロードが整備されていたので、ゆったり流しながらクールダウン(この看板を探してた)。

近所のコインランドリーで洗濯物を回しつつ、夕飯。

・・

・・・

 

 

翌朝。朝6時に目が覚めて…

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

宿から見た富士山。快晴すぎる。

 

山中湖畔から道志みちに入って、2kmほど上ったあとは延々とダウンヒル

途中で吊り橋を発見したので撮影タイム。

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

そのあと宮ケ瀬湖を抜けて伊勢原に降りて、だらだら走って帰宅。

GWを利用して初めての泊りがけライドに挑戦したけど、全工程を通して好天に恵まれてラッキーだった。2日間の総走行距離は190km。

 

日本最高標高を誇る富士山。

次はヒルクライムも交えてぜひ挑戦したい。

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