bicicalc作りました

6月 16th, 2009 by key

TCX計算機として開発を進めていたpythonのユーティリティ、ようやくまとまってきたのでgithubに放流しました。

基本的にpythonライブラリとしての位置づけで、CUIすらオマケという状態なのでいろいろ不便かと思いますが、テスト、デバッグ、開発に協力してくれる方募集です。

■動作要件

私の手元ではMacOSX 10.5, py25, py25-lxml(from MacPorts), Garmin Edge 705 v2.70で動作確認をしていますが、以下の環境を満たせば動作すると思います。Linuxなどであれば楽に動くはず。

  • Python 2.5以降 (Python 3000で動くか不明)
  • python-lxml

■サポートしているファイルフォーマット

現在サポートしているファイルはGarmin TCXファイルのみです。将来的に、PowerTap, Polarのデータにも対応予定です。

■実装されている機能

以下を実装しています。

計算)
o Activity
+ Duration (sec or hh:mm:ss format)
+ Distance
+ Total Ascent
+ Average HR, Speed/Pace, Cadence
o Power
+ Normalized Power
+ Average Power
+ Variability Index
+ Intensity Factor
+ Training Stress Score
+ Work
+ Mean Maximal Power

コンバータ)
o TCX to CSV
o TCX to KML
o Power / Leg Velocity
o Course Profile

■簡単な使い方

アクティビティサマリの計算。

斜度の計算がぶっ壊れてる…。

% ./bicicalc.py ../Garmin/History/2009-06-04-15-17-27.tcx

Duration:		01:14:12
Total Distance:		27.86km
Total Ascent:		345.27m
Average Power:		137.86W
Normalized Power:	176.00W
Variability Index:	1.285
Work:			578.441kJ

		Min	Max	Average
HeartRate(bpm):	64	176	127
Cadence(rpm):	0	111	56
Speed(km/h):	0	64	24
Power(W):	0	906	137
Grade:		-434.7%	230.9%	0.2%

FTPを指定(–ftpオプション)するとIF, TSSなどを計算します。

% ./bicicalc.py --ftp=230 ../Garmin/History/2009-06-04-15-17-27.tcx

Duration:		01:14:12
Total Distance:		27.86km
Total Ascent:		345.27m
Average Power:		137.86W
Normalized Power:	176.00W
Intensity Factor:	0.765
Training Stress Score:	72.414
Variability Index:	1.285
Work:			578.441kJ

		Min	Max	Average
HeartRate(bpm):	64	176	127
Cadence(rpm):	0	111	56
Speed(km/h):	0	64	24
Power(W):	0	906	137
Grade:		-434.7%	230.9%	0.2%

MMPの計算。

% ./g_mmp.py ../Garmin/History/2009-06-04-15-17-27.tcx
== 5 seconds Mean Maximal Power ==

Average Watts:	705.00W
Max Power:	732W
Work:		3526J
(略)
== 15 minutes Mean Maximal Power ==

Average Watts:	165.00W
Max Power:	732W
Work:		147949J

任意秒のMMP計算。–mmp-secondオプションを付ける。

% ./g_mmp.py --mmp-second=15 ../Garmin/History/2009-06-04-15-17-27.tcx
== 15 seconds Mean Maximal Power ==

Average Watts:	636.00W
Max Power:	732W
Work:		9545J

分単位でMMP計算するには–mmp-minuteオプションを付ける。

% ./g_mmp.py --mmp-minute=5 ../Garmin/History/2009-06-04-15-17-27.tcx
== 5 minutes Mean Maximal Power ==

Average Watts:	223.00W
Max Power:	479W
Work:		68063J

CSVへ変換。

% ./bicicalc.py --dump-csv ../Garmin/History/2009-03-15-04-00-01.tcx

KMLへ変換。変換した物をGoogle Mapsに食べさせることも可能。
リンクのサンプル表示イメージのサンプル

% ./bicicalc.py --dump-kml ../Garmin/History/2009-03-15-04-00-01.tcx

power / legspeedの出力。クランク長を入力する。

% ./bicicalc.py --dump-power-legspd --crank-len=172.5 ../Garmin/History/2009-03-15-04-00-01.tcx

チャートにプロットするとこうなる。
power/leg speed distribution

コースプロファイルを出力する。

% ./bicicalc.py --dump-profile ../Garmin/History/2009-03-15-04-00-01.tcx

チャートにプロットするとこうなる。
gunma_profile

ユーザプロファイルの出力。

% ./g_userprofile.py ../Garmin/Profile/UserProfile.tcx
UserProfile
BirthDate:	1978-01-13
Gender:		Male
Weight:		64.0kg
MaximumHR:	198
GearWeight:	8.00kg
FTP:		230Watts

			Low	High
HeartRate Zone 1:	99	119
HeartRate Zone 2:	119	139
HeartRate Zone 3:	139	158
HeartRate Zone 4:	158	178
HeartRate Zone 5:	178	198

			Low	High
Power Zone 1:		58	127
Power Zone 2:		129	173
Power Zone 3:		175	207
Power Zone 4:		209	241
Power Zone 5:		244	276
Power Zone 6:		278	345
Power Zone 7:		347	460

■プログラム内部的なこと

TCXをパースしてpythonの辞書に詰め込んでいます(辞書の形式はbicicalc独自)。

内部データは基本的にこの辞書のみで、辞書を操作するための関数群を複数実装しており、コマンドラインユーティリティはファイルをパースする、関数を通してフィルタする、整形して表示する機能を有しています。

なので、他のファイルフォーマット(例えばPowerTapとかPolarとか)から辞書へ変換するコードを追加することで、実装済みの計算関数を利用することが可能です。

■最後に

このツールがサイクリストの役に立つことを祈ります。楽しんで!

タグ: , ,

0 Responses to “bicicalc作りました”

Feed for this Entry Trackback Address
  1. コメントはまだありません

コメントをどうぞ