태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Welcome to youlsa's home!

3편을 이제서야 씁니다. 2편 쓴 후 거의 1년 다 되어 가네요. 죄송합니다.-_-


숀리 엑스 바이크의 크랭크에 감아놓은 케이던스 센서의 신호를 받아서 파워값을 환산하여 PC로 쏘아주도록 하는 프로그램을 작성해서 한동안 개인적으로 써왔습니다...만 너무 대충 만들어서 소스가 너무 더럽고 정리가 귀찮아 차일피일 미루게 되었습니다.


그러던 중 우연히 비슷한 일을 해주는 프로젝트를 발견해서(vpower) 여기에 엑스바이크 관련 작업을 조금 추가하여 좀 더 깔끔하게 다듬었습니다.


vpower 프로젝트의 원래 페이지는 이곳입니다.

https://github.com/dhague/vpower


엑스바이크 관련 파일들을 맘대로 추가하기 위해 프로젝트를 아래의 위치로 포크해왔습니다.

https://github.com/youlsa/vpower


포크 이후 작업한 내용들은 이렇습니다.

1. 엑스바이크의 부하곡선 그래프 공식을 적용한 계산 루틴 추가. (XBikePowerCalculator 모듈)

2. 속도 센서가 아닌 케이던스 센서를 사용하도록 수정.



준비물

아래와 같은 준비물이 필요합니다.


좌측으로부터...

1. ANT+ 동글

2. 마이크로 SD카드 (8기가면 충분)

3. 라즈베리파이 2 (또는 3)

4. 라즈베리파이 케이스(없어도 됨)


사진에 없는 것들로는..

5. 전원 어댑터 (핸드폰 충전기 써도 됩니다)

6. 케이던스 센서

7. 키보드, 마우스, HDMI 케이블, 모니터 (이것들은 SD 작업할 때에만 필요함)



SD 카드 만들기

[정말 보시려면 클릭!]



조립

완성된 SD 카드를 라즈베리파이에 꽂고 케이스를 조립하고 ANT+ 동글을 꽂아주면 완성입니다.



숀리 엑스바이크 주변에 라즈베리파이를 두고 전원을 켭니다.


어댑터를 연결해서 전원을 넣으면 잠시의 부팅 시간을 거친 후, 바로 주변에서 날아오는 케이던스 센서의 ANT+ 신호를 받아서 파워값으로 변환한 후 ANT+로 다시 쏘기 시작합니다. 부팅 되고 전원 내려질때까지 이 일만 합니다.



즈위프트를 실행하고 페어링 화면에서 ANT+ 파워미터를 찾도록 하면 아래와 같이 파워미터로 검색이 됩니다.



이제 숀리 엑스 바이크 실내 자전거로 Zwift게임을 신나게 즐기면 됩니다. ^^



추가사항
1. 숀리 엑스 바이크의 부하 조절 노브를 10단 중에 8단에 맞춰놓고 써야 정확한 파워값이 나옵니다.


2. 원래는 케이던스 센서의 ANT+ ID값을 페어링 시켜주는 과정이 필요한데, 그냥 귀찮아서 주변의 모든 케이던스 센서의 신호를 모두 받도록 했습니다. 따라서 1개 이상의 케이던스 센서가 주변에 있으면 파워값이 이상한 값이 나옵니다. 숀리 엑스 바이크 인근에는 딱 1개의 케이던스 센서만 동작하고 있도록 주의 바랍니다.


3. ANT+ 동글은 일반적으로 시중에 판매하는 ANT+ 동글은 모두 동작합니다만, 가민 Vector2와 함께 온 가민 ANT+ 동글은 동작을 안합니다. 제품 ID가 한 글자 차이가 나기 때문이라 약간만 수정하면 되는데... 귀찮아서..


4.마이크로 SD 카드를 만드는 과정이 조금 복잡해 보이는데요, 디스크 이미지를 올려놓으면 편리하게 이용이 가능하실것 같다는 생각이 들었습니다. 하지만, 파티션이 여러개이고 디스크 이미지의 전체 용량이 어마어마해서 올리기 어려울 것 같습니다. 방법을 찾아보도록 하겠습니다.


5. 숀리 엑스 바이크가 아닌 다른 종류의 실내 자전거에 대해서도 속도-파워 데이타를 추출해서 보내주시면 해당 내용을 추가할수 있을 것 같습니다.


(덧붙임) 앗? 그러고보니, 엑스 바이크에는 속도와 칼로리 등등을 보여주는 화면이 있네요. 이거 뜯어서 배선 빼면 케이던스 센서 없이도 똑같이 구현이 될거 같습니다??? 왜 그 생각을 안해봤지???


(덧붙임2) 가정용 헬스 자전거에 케이던스나 파워 데이타를 ANT+/BLE로 전송해주는 기능을 포함한 자전거가 나올법도 한데 없는 것 같습니다. 요즘엔 스마트워치도 많이 쓰고 Zwift같은 게임도 갈수록 늘어가는데다, 무엇보다 건강에 대한 관심들이 높아져 가니 이쪽 수요가 분명히 있을텐데 말입니다. 혹시 헬스 자전거 업체 관계자 분께서 보신다면 저렴하고 좋은 제품 좀 하나 만들어주시면 진심 감사드리겠습니다.

Comment +3

  • 몽몽 2018.02.07 15:47 신고

    즈위프트에 관심이 생겨 헬스사이클에 적용할수 있나 싶어서 찾아보고 있었는데 먼저 시도하신 분이 있네요...
    저에겐 프로그래밍 재능이 없어 어려운글이었지만 재밌게 잘봤습니다

  • 두울 2018.04.09 19:17 신고

    즈위프트 해보려고 독학중인데 준비물로 속도계.자전거.스마트로라.동글...모두 가격에 대략200만원쯤 되어서 집에 있는 실내자전거로 연결할수 없을까 생각하다 검색해들어 왔는데...ㅎㅎ 고수가 계셨군요....전문영역이라 잘 모르겠지만 재밌게 보았습니다..^^

  • 블링 2018.05.07 11:38 신고

    실내자전거로 즈위프트하려고 계속 알아보고 있었습니다. 위의 방법을 어떻게든 터득해서 저도 집에서 타고 싶어요 감사합니다.

열악한 환경에서 로라 좀 한번 조용히 제대로 타보자고 알아보던 중 찾게 된 무접촉 무소음 로라 STAC Zero. (https://www.clien.net/service/board/cm_bike/11625759 ) "소음도 없고, 타이어도 안닳고"(ZERO NOISE. ZERO TIRE WEAR. )라는 신박한 문구에 넘어가서 주문했습니다.


회사 동료들 2명과 함께 3개를 주문해서 오늘 도착했네요. 저는 이미 파워미터가 있으니 $349짜리 베이스 버전을, 동료 2명은 파미가 없어서 $479짜리 파워미터 버전을 주문했습니다.



일단 3줄 요약..

1. 정말 조용함. (다만, 지금까지 내 자전거가 이렇게 시끄러운 물건이었다니..)

2. 휠에 무게 추를 달면 실제 라이딩 느낌, 안달면 고정로라 느낌. (열라 귀찮음)

3. 스마트 콘트롤 업글 킷이 나오면 바로 사즈아~



CleverTraining.com에서 주문을 했는데(https://www.clevertraining.com/stac-zero-cycling-trainer ), 진정 무서운건 배송비가 무려 $129.99라는거..  하지만, 문의를 해보니 1대를 구입하나 3대를 구입하나 배송비가 동일하다고 합니다. 그래서 원래 1대만 주문했다가 잽싸게 취소하고 동료들 의견을 취합해서 3대를 주문. DC Rainmaker의 할인 코드( DCR10BTF )를 적용하면 10% 할인이 됩니다. 5일 정도 걸려 배송 받았는데, 관세 문것까지 모두 계산을 해보니 결국 베이스 버전은 43만원, 파워미터 버전은 60만원 정도에 구입한 셈이 되었습니다. (Made in Canada라서 한미 FTA의 혜택은 못봅니다.)


웅장한 박스가 3개.. 한개는 구석에 살짝..







베이스(기본) 버전입니다. 심플합니다. 좌측의 상자에는 전용 QR, 렌치, 스페이서, 메뉴얼 등등이 들어있습니다.






아래는 파워미터 버전입니다. 베이스 버전과는 다르게 자석 옆에 뭔가 조금 더 붙어 있는게 보입니다. ANT+와 BLE로 동시에 파워값을 쏴줍니다.


재미있는건, 베이스 버전을 사서 쓰다가 파워미터 버전으로 업글하고 싶으면 $149.99짜리 업그레이드 키트를 사서 설치하면 됩니다. (https://www.staczero.com/upgrade ) 로라의 구조 자체가 무척 단순하고 무식해서 렌치 2개만 풀어서 저항 부분만 교체하면 파워미터 버전이 됩니다. 이건 올해안에 나올 예정인 스마트 콘트롤 업그레이드 키트(즈위프트에서 지형에 따라 부하가 올라갔다 내려갔다 하게 해주는 기능)에도 동일하게 적용된다고 합니다. 나오면 사고싶네요.





알량한 매뉴얼.. 예전에 써봤던 엘리트 쿠보 고정로라나 미노우라 하이브리드 로라, 와후 키커 등의 경우에는 자전거를 거치할 때 뭔가 철컥 철컥 제자리 잡아주기가 편안한데요, 이 Stac Zero는 그런 면에서 뭔가 조금 손이 더 갑니다. 물론 기껏 1분 내외의 불편입니다만, 북미 특유의 투박한 디자인과 기능 구현이 좀 마음에 안드시는 분들도 많으실 듯 합니다.




자전거의 거치는 이렇게 양쪽에서 노브를 돌려 클램프로 자전거의 QR을 꽉 잡아 거치하게 되는데요, 안정적으로 거치가 되기는 하는데, 정확한 위치를 잡는건 조금 번거로울수 있습니다. 몇번 연습을 해보니 한쪽 노브는 고정해놓고 다른 한쪽으로만 조이고 풀고 하면 조금 편하겠더라구요.






자전거를 거치하고 나면 마그네틱 저항 유닛의 위치가 림의 브레이크 부분에 오도록 간격을 잡아줘야 합니다. 함께 제공되는 스페이서를 이용하면 쉽습니다. 사진상의 림 윗쪽에 보이는 것과 같이 U자 모양의 스페이서를 꽂아놓고 자석들을 거기에 맞춰 조여준 다음 QR을 채워 고정시키고 스페이서를 빼주면 됩니다.

700c 휠을 기준으로 위치가 잡혀 있는데, 더 작은 휠이라면 우하단에 보이는 렌치 2개만 풀고 위치를 옮기면 됩니다. 정말 단순합니다.



이건 해도 되고 안해도 되는건데요, 휠에 함께 제공되는 무게추(?)를 달면 조금 더 실제 자전거 주행 느낌에 가깝게 로라를 탈 수 있습니다. 이 로라가 처음 나올때에는 커다랗고 무식한 쇳덩이 2개로 이루어진 추를 함께 줬었는데요, 버전업을 거쳐서 사진과 같이 허브를 조여주고 스포크에 벨크로로 잡아주는 형태로 진화했네요. 실제 설치를 해보니 설치했다 풀었다 하기 어렵지는 않은데 귀찮습니다.


이 추를 안달면 엘리트 쿠보 플루이드 같은 고정로라의 느낌이 납니다. 발에 힘줄때만 돌고 바로 멈추려고 하는 딱 그런.. 하지만, 추를 달면 휠 전체가 일종의 플라이 휠이 되어버려서 관성으로 계속 돌아 페달질이 한결 수월합니다.

파워값은 추를 달지 않았을때 좀 더 높게 나오는거 같습니다. 자꾸 멈추려고 해서 죽기 살기로 밟아야 하니 당연한건지도요. ^^



시험 삼아 즈위프트(Zwift) 런던맵을 딱 20km 달려봤습니다. 휠의 속도의 제곱으로 저항이 늘어난다고 합니다. 달리다보니 생각보다 굉장히 저항이 강하네요. 어쩌면 몸이 퇴화된건지도요.. ㅠ_ㅠ


가장 중요한 소음.. 소음은 정말 없긴 합니다. DC Rainmaker가 로라 소리보다 가민 소리가 더 크다고 한게 허언이 아니네요. (https://www.dcrainmaker.com/2016/06/stac-zero-trainer.html )


자전거가 허공에 떠서 뒷바퀴만 뱅글뱅글 도는 셈이라 로라 자체의 소리는 없어 구동계의 소리만 나는 셈인데요, 상대적으로 자전거 자체에서 나는 소리가 굉장히 거슬립니다. 제 자전거의 정비 상태가 상당히 안좋다는걸 느끼게 되었습니다. 페달질 할때마다 헤드셋 삐걱거리고, 스프라켓 몇단에선가 막 체인 긁히고, 뭔가 핸들도 막 한쪽으로 치우치는거 같고, 이곳저곳 막 찌끄덕 거리고.. 로라가 조용하니 자전거의 정비 상태가 굉장히 신경이 쓰인다는 단점 아닌 단점이 있습니다. ^^



한가지 특이한 점은, 저항으로 인해 림이 상당히 뜨거워 집니다. 뭐 당연한거긴 하지만, 열심히 달리다 멈춰서 무심코 잡으면 깜짝 놀랄 정도는 되니 조심해야 합니다.



이 로라의 저항의 느낌은 영상으로 보시면 쉽게 알수 있습니다. 살짝 브레이크를 잡으며 달리고 있는거 같은 느낌이라고 표현하는게 비슷한거 같습니다. 이론상으론 별로 신기할게 없는데 실제 보면 굉장히 신기합니다. 휠을 잡아주는게 없는데 휠이 멈추려고 한다니.. 기차의 브레이크와 같은 원리인데 자전거에 적용된걸 보니 참 신기합니다.







지금까지는 방안에서 놀이방 매트 2겹 + 골고무판 1겹 + 일반 로라매트 1겹 + 조각매트 2겹.. 이렇게 6겹을 깔고도 옆집, 아랫집, 마누라님 무서워하며 로라질을 했었는데요, 이 STAC Zero는 일반 로라매트 1겹과 골고무판 1겹만 깔고도 뭔가 "나는 내 주변에 아무런 피해도 끼치지 않아!!!"라는 자신감을 가질 수 있어서 좋습니다. 이 낡은 아파트는 층간소음으로 송사가 자주 발생하는 아파트인데, 이 정도라면 괜찮다는 생각에 마음이 편안합니다. ^^






(추가) 열흘간 사용기



무접촉 무소음이라고 하는 STAC Zero를 배송 받아 써본지 벌써 열흘이 넘어 갑니다.

그동안에 주로 Zwift를 통해 워크아웃들을 해보면서 이리저리 써봤는데요, 간단한 사용 소감과 문제점 등등을 정리해볼까 합니다.



일단, 단점 및 문제점들부터....


1. 투박한 만듬새.

전체적으로 그리 정교한 물건이 아니라 정말 투박하고 그렇습니다.

자전거 거치해서 워크아웃 하고서 다시 자전거를 빼는데 QR 물리는 부위가 함께 빠집니다. 살펴보니 고정 볼트가 빠져있습니다. ㅋㅋㅋㅋ

이 정도는 다시 조여주면 되니 뭐 큰 문제는 아닙니다.





다리를 펼쳐 본체와 만나는 부분에 레그 쉴드가 붙어 있는데, 이게 좀 약하네요. 몇번 사용하니 쑥 파여 버립니다. 그나마도 그 전 버전엔 아예 이것도 없이 쇠와 쇠가 바로 만나고 있었다고 합니다. 그래도 외관상의 문제를 제외하면 별 문제는 없다고 그러고요. 터프한 양반들.. -_-

제가 가지고 있는 버전이 레그 쉴드를 처음 적용한 버전이라 그런거 같다며 새 버전을 보내줬습니다. 사실 이건 다른 문의 때문에 메일을 보냈는데, 답장에서 이 부분 확인해보라고 그래서 발견한겁니다.






2. 림 정렬 필수.

하루는 열심히 달리다 보니 갑자기 저항이 뚝 떨어지는 기분이 들고 조금 후에 고무 타는 냄새와 함께 타이어가 펑크가 납니다. ㅋㅋㅋㅋㅋ

림 정렬이 잘 안된 휠셋인데 림이 자석을 계속 조금씩 때리다가 결국 자석이 휙 돌면서 바퀴와 마찰을 일으키며 타이어의 사이드월을 긁어 펑크가 난겁니다.


림 정렬을 잘 하고 자석의 위치를 고정하는 스프링핀이 제 위치에 제대로 있으면 일어나지 않을 일입니다. 제 경우에는 스프링핀이 좀 뻑뻑하고 림 정렬 잘 안되어있고 그런 일들이 겹쳐서 벌어진 일입니다. 림 정렬 하고나니 이젠 괜찮습니다. 뻑뻑했던 스프링핀은 새로 보내줘서 해결되었습니다.





여기까지는 단점이었고요, 이제부터는 장점.


1. 고객지원이 빠릅니다.

메일을 보내 몇가지 문제점들(스페이서가 부러짐, 스프링핀 이상)을 문의하니 몇시간 내에 답장이 오고, 몇번의 메일 교환 끝에 DHL로 과하다 싶을 정도의 예비부품들이 공수되어 옵니다. 답변도 시원하게 잘 해주고요.





2. 식구들이 로라 타는지 모릅니다.

PC가 있는 방에 필요할때마다 로라 펼쳐서 즈위프트를 하는데요, 방문을 닫아놓으면 집안 식구들이 로라 돌리는지 모릅니다. 진동도 거의 없어서 로라 매트 하나와 혹시나 해서 깔아놓은 골고무판 한겹만 해도 아무런 문제가 없습니다. 소리를 내는건 구동계뿐이라 드레일러 셋업을 자주 하게 됩니다만.. ^^


암튼, Zwift가 이제야 재미있습니다. 예전에 와후 키커나 미노우라 하이브리드 로라 탈 때에는 소음(특히 다운힐)과 진동때문에 식구들과 옆집, 아랫집에 눈치가 보여서 맘껏 즐기지 못하고 기껏 30분 이상 로라를 굴리지 못했었는데요, 소음과 진동이 대폭 줄어드니 이게 어마어마하게 스트레스를 줄여줘서 이제야 즈위프트를 제대로 즐기게 되었습니다.


한가지 재미있는 점은, 즈위프트 하다보면 이거 스마트 로라도 아닌데 가상 업힐이 너무 힘듭니다. 평지에 비해 저항이 바뀌는것도 아니고 아무것도 변한게 없는데도 업힐만 만나면 뭐 이리 힘든건지..

역시 업힐은 물리적 문제가 아닌 멘탈의 문제가 맞는거 같습니다. ^^



소음과 진동이 문제이신 저같은 유부님들께 STAC Zero를 적극 추천드리고 싶습니다.

Comment +0

속도-파워 그래프를 얻었으니 이제 실내 자전거의 속도를 얻어내려면 어떻게 해야 하는지 알아보겠습니다.



일단 자전거에서 뭔가 속도를 얻어내는 센서에는 2가지가 있습니다. 첫번째는 바퀴에 부착되어 현재 자전거의 속도를 계산해내는 속도(speed) 센서이고요, 다른 하나는 페달에 부착하여 현재 페달의 회전수를 알아내는 케이던스(cadence) 센서입니다.


아래가 스피드 센서.




이게 케이던스 센서.



보통 헬스케어/피트니스 제품들에서는 ANT+라는 무선 프로토콜을 사용합니다. 근래 많이 쓰이는 BLE와 유사한 면이 많은 저전력 프로토콜인데요, 역사는 생각보다 오래 되었습니다. 각종 심박계나 자전거 센서들, 런닝용 발걸음 센서, 저울, 산소측정기 등도 사실상 거의 모두 ANT+ 프로토콜을 사용합니다. 근래에는 ANT+와 BLE를 동시에 지원하는 경우도 나오기는 합니다만, 여전히 대세는 ANT+ 프로토콜입니다.


이 프로토콜의 홈페이지는 이곳입니다. https://www.thisisant.com/



ANT+ 프로토콜을 지원하는 디바이스들은 보통 Garmin 등의 헬스케어 전문기업의 기기들이나 Sony 휴대폰 등 의외로 많은 제품들이 제공합니다.


하지만, PC에서 쓰기 위해서는 별도의 USB 동글을 이용해야 합니다.

ANT+ USB 동글은 아래와 같이 생겼습니다.



PC를 사용하면 좋겠지만, 실내 자전거에 붙여 사용해야 하는 용도이기 때문에 라즈베리 파이를 사용해봅니다.


기본적으로 많이 사용하는 OS인 Raspbian을 설치하고 ANT+를 꽂습니다.






lsusb 정보를 봅니다. Vendor ID가 0fcf이고 PID가 1009인걸 알 수 있습니다.




해당 USB 동글을 인식시키기 위해 /etc/udev/rules.d/garmin-ant2.rules 파일을 추가해서 아래의 내용을 추가합니다.


SUBSYSTEM=="usb", ATTRS{idVendor}=="0fcf", ATTRS{idProduct}=="1009", RUN+="/sbin/modprobe usbserial vendor=0x0fcf product=0x1008", MODE="0666", OWNER="pi", GROUP="root"



이 과정을 거친 후, 해당 ANT+ 동글을 꽂으면 /dev/ttyUSB0 으로 잡히게 됩니다.



이제 소프트웨어를 준비합니다.

먼저 python용 ANT+ 라이브러리를 설치합니다.



git clone https://github.com/baderj/python-ant.git

sudo python setup.py install


이렇게 하면 설치됩니다.




이제 코딩만 하면 됩니다.



두 센서의 프로파일 문서를 얻어봅니다. https://www.thisisant.com/developer/resources/downloads/#documents_tab 이곳에서 "ANT+ Device Profile - Bicycle Speed and Cadence" 문서를 받아봅니다.


속도 센서와 케이던스 센서, 두 센서의 프로파일을 비교하며 살펴보니 두 센서 모두 1회전당 1회의 펄스가 나오는게 원칙인데, 몇회에 걸쳐 누적된 수치를 한번에 보내주기도 하는 등 행동 양태에 따른 차이점은 거의 없습니다. 두 센서의 송출 데이타상의 차이점은 Device Type이 속도 센서는 0x7B이고, 케이던스 센서는 0x7A인 점이 다를 뿐입니다.


한가지 더 꼽아보자면, 센서의 데이타 수집 주기가 4Hz 내외라서 1초에 4회 정도씩 수집하도록 되어 있는데, 속도 센서는 8118/32768초에 한번씩, 케이던스 센서는 8102/32768초에 한번씩 데이타를 수집하는 것이 기본입니다.


두 센서 모두 Roll-over time은 64초, 65536회전입니다. 이 처리도 필요합니다.


실내 자전거에는 바퀴가 따로 없이 바퀴의 회전수가 곧 페달의 회전수이기 때문에 둘 중에 아무 센서나 사용해도 상관이 없습니다. 가격도 2가지 센서 거의 동일합니다. 다만, 원래 페달의 크랭크에 설치하기로 되어 있는 케이던스 센서가 좀 더 부착이 쉬우므로 이것을 사용하기로 합니다.



센서에서 펄스가 올 때마다 지난번 펄스의 시간과 대조하여 해당 구간의 델타 속도를 계산해낼 수 있습니다. 제대로 현재 속도를 표시하기 위해서는 델타 속도의 변화 추세를 미분하여 평탄화 작업을 해줘야 하지만, 우리의 목적은 어차피 역시나 해당 델타에서의 파워값만 얻어내어 무책임하게(?) 쏴주면 그 다음에는 속도계에서 알아서 할테니 굳이 복잡한 계산은 생략해도 별 지장 없습니다.


소스는 맨 아래에 있습니다. 페달을 돌려보니 아래와 같은 속도와 파워값 결과가 나옵니다.


대략 데이타의 적절성을 살펴보면..

REVO=21일때, 속도가 18.78mile/h일때에 149.29W가 나옵니다.

REVO=44일때, 속도가 34.27mile/h일때에 452.55W가 나오는걸 보니 몸이(허벅지가^^) 기억하는 파워값과 크게 다르지 않은 파워값을 얻어내는걸 알수 있습니다.






페달을 밟는 속도에 따른 파워값을 얻어낼 수 있으니 이제는 이걸 Zwift 게임에 쏘아주면 됩니다. 이 부분은 다음번에...






소스보기


Comment +3

  • y9pp9 2017.08.03 15:32 신고

    안녕하세요?
    설악그란폰도로 검색해서 들어왔다가 흥미로운 글을 읽고 답글 남깁니다.
    혹시 다음단계 성공하셨는지요?
    라즈베리파이에서 파워값을 zwift로 어떻게 쏘셨는지도 알려주시면 감사드리겠습니다
    즐거운하루되세요!

    • 그간 좀 바빠서 결론 글을 못올렸네요. Bluetooth BLE 루틴을 이용해서 파워미터 데이타를 쏘도록 했습니다. 조만간 작성해서 올리겠습니다.

  • 당당 2017.09.27 00:50 신고

    제가 찾던 글이네요!! 3편 기대합니다~



Zwift라는 게임이 있습니다. 일반 로라나 스마트 로라에 자전거를 올려서 페달을 밟으면 전 세계인들과 경쟁하게 되는 온라인 자전거 게임입니다. 작년부터 큰 인기를 끌고 있어서 한동안 와후 키커라는 비싼 스마트 로라를 사서 꽤 즐겁게 즐겼었는데요, 로라를 집안 사정으로 팔아버리게 되면서 마땅히 Zwift를 즐길 방법이 없어졌습니다.


집안을 둘러봐도 그나마 제일 비슷하게 생긴게 아내가 다이어트를 위해 얻어온 헬스 자전거, 숀리 엑스 바이크라고 하는 이름을 가진 십몇만원 한다는 실내용 자전거입니다. 하지만, 아무런 센서류가 없기 때문에 이대로는 Zwift 플레이가 불가능합니다.






때마침, 올해 시즌에 쓰려고 새로 산 페달형 파워미터인 가민 벡터2가 도착했습니다. 파워값만 제대로 나오면 Zwift 플레이에 아무 문제가 없다는데 착안하여 일단 이걸 끼워서 Zwift를 돌려봤습니다. 잘 됩니다. 싸이클에 비해 페달이 너무 앞쪽에 있어 힘 싣기 어렵고 그런 어려움들은 좀 있지만, 어쨌든 Zwift를 즐길 수 있습니다. ㅋㅋㅋ






스마트 로라와 같이 지형에 따라 자동으로 부하를 넣었다 뺐다 하지는 못하지만, 까짓거 손으로 조절하면 됩니다. 업힐 만나면 단수를 올려주고, 평지 만나면 내려주고 등등... ^^








전체적으로 할만 합니다만.... 십몇만원짜리 자전거에 백몇만원짜리 파워미터라니 뭔가 너무 언밸런스합니다.


그래서, 여러가지 방법을 생각을 해봤는데요, 자전거 센서들 중에 아무래도 가장 싼 축에 속하는 케이던스 센서나 속도 센서를 이용해서 파워값을 연산해서 얻어내어 Zwift 클라이언트에 쏴주면 파워미터가 없어도 별 상관 없이 게임을 즐길 수 있을 것 같습니다. 실제로도 Zwift에서도 인증 받은 로라나 트레이너 기기들은 속도 센서만 붙여도 vPower라고 하는 가상 파워 계산 루틴을 통해 게임을 즐길 수 있게 해줍니다.


물론 비싸거나 유명한 기종들만 대상이고, 이런 숀리 엑스 바이크 같은 변방의 헬스 바이크를 등록해줄리는 만무합니다.




그래서, 일단 이 실내 자전거의 부하 그래프를 얻어보기로 했습니다. 속도 센서와 파워미터를 모두 자전거에 달고 열심히 페달을 밟아 (속도 : 파워) 데이타를 얻어냅니다. 아주 느린 속도에서부터 아주 빠른 속도까지 대략 10초 정도 간격으로 LAP을 나눠가며 자전거를 돌립니다. 가장 많이 쓰이는 파워 구간인 100W~400W 까지 모두 고르게 나오도록 하려면 자전거의 부하 스위치를 8에 두어야 하네요. (10단 중 8단이니 꽤 힘듭니다만, 원래 자전거는 고통으로 타는겁니다^^)









데이타를 정렬해서 그래프로 그려봅니다. 가로가 속도(mi/h), 세로가 파워(W)입니다. 부하 그래프를 구할 때에는 이상하게들 km단위가 아닌 마일 단위를 쓰네요. 그래서 저도 역시 한번 그렇게 해봅니다.


그래프의 모양새는 아주 정밀하지는 않지만 어느 정도 괜찮은 부하 그래프를 얻을 수 있을 것처럼 생겼습니다.


요즘 딥 러닝이 핫하다고 하니 한창 이야기들이 많은 Tensorflow를 써서 간단하게 선형 회귀 분석을 해봅니다. 아래의 식을 이용합니다. x가 속도, y는 파워.


y = a*x + W



분석하니 아래와 같은 값들이 나옵니다.

W = -88.4703598, a = 13.56646538, LOSS=594.065


그래프로 그려보면 아래와 같습니다. 괜찮네요, Tensorflow.







사실, 위의 그래프 정도만 해도 쓸만은 한데, 한가지 눈에 띄는 점은 bias 값이 지나치게 크다는 겁니다. (여기서는 W) 이대로 쓰면 페달을 돌리지 않아도 마이너스 파워가 나오는 결과를 초래하게 됩니다.


그래서, 0점의 데이타 (0mi/h : 0W) 를 추가해서 그래프가 0점을 지나도록 해줘서 어떤 형태의 그래프를 얻어야 하는지 한번 살펴봅니다. 대략 아래와 같은 모양이 나와야 할 것 갈습니다.


가만 보니 뭔가 지수함수적으로 생겼으니 수식을 아래와 같이 바꿔줍니다.


y = W + a*x + b*x^2 + c*x^3



Loss 함수를 그래프의 값과 실제의 값과의 차이분들을 모아 그 면적을 구하도록 해서 해당 값을 손실 값으로 간주하도록 하고, 이 손실이 최대한 적은 쪽으로 학습을 하도록 합니다. 아주 세밀세밀하게...


소스는 아래와 같습니다.


[ 소스 보기 ]




Tensorflow에게 10만회 정도 학습을 시키니 어느 정도 쓸만한 괜찮은 인자들을 뱉어냅니다.


아래 화면에 찍힌 값들을 이용해 최종 결정된 수식은..

y = 0.00259981 + 0.03980412 * x + 0.46587375 * x^2 + (-0.00238126) * x^3


이젠 속도만 알면 파워값을 얻을 수 있습니다!!!!!  ^^






참고로, 아래의 그래프들은 학습 횟수에 따라 그래프의 모양을 찾아가는 과정입니다. 좌상단으로부터 책 읽는 순서로 각각 1회, 2만회, 4만회, 6만회, 8만회, 10만회째에 해당하는 그래프입니다. 실용적으로는 2만회 정도만 해도 어느 정도 충분한 것 같습니다.





부하 그래프를 얻어서 속도에 따른 파워값을 계산해낼 수 있게 되었습니다. 이제 이렇게 얻은 파워값을 어떻게 Zwift한테 쏘아줄지 고민해보도록 하겠습니다. 지금까진 비교적 손쉬웠는데 이제부터는 머리 아프네요.

Comment +2

  • 겨울이 되어서 헬스바이크로 즈위프트 할 방법이 없을까 찾아보다가, 제가 막연히 생각했던것을 구현하려는 글을 보니 감탄이 나옵니다. y = a*x + W 이 수식은 파워 구하는 공식인가요?

    • 그냥 부하-파워 그래프의 모양을 보고 가정해서 넣어본 공식입니다. 하지만 전 구간을 놓고 보면 그래프가 곡선이라 그 다음 공식으로 바꿔서 추정해봤습니다. y = W + a*x + b*x^2 + c*x^3

티스토리 툴바