VisualStudioでUVC制御(上体垂直制御)を再生する

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 動くだけで理解した気分にちょっとなれる

[前回記事←](https://qiita.com/Ninagawa_Izumi/items/e5e8045e238fdeda9767)
# UVC制御を自分のPCで見てみたい

https://ai2001.ifdef.jp/

自転車に乗るロボットやスタスタと人間のように歩くロボットの動画を公開されている[Dr.Guero](https://ai2001.ifdef.jp/)さんをご存じでしょうか。
昨年、UVC(上体垂直制御)という転倒を予防する新しい二足歩行の計算方式を発表されており、なんとそのソースコードがオープンになっています。
[前回記事](https://qiita.com/Ninagawa_Izumi/items/e5e8045e238fdeda9767)でVisualStudioを使ったODEのデモの動作確認ができましたので、
今回はこのUVCのコードをODEで再生できるようにしてみたいと思います。

# 準備
- Visual Studio Comunity 2019 もしくは 2022
- ODEのDEMOファイル

こちらの２つは前回の記事で導入を解説していますのでまだの方はご参照ください。
ODEのバージョンや導入したディレクトリの場所については、[前回の記事](https://qiita.com/Ninagawa_Izumi/items/e5e8045e238fdeda9767)を前提に進めていきます。
Windowsを例に解説を進めますが、MacやLinuxでも少し読み替えることでおそらく導入できると思います。

# 動画解説を見た後にソースコードをダウンロード

まずこちらの動画解説で技術の概要をチェックしましょう。すごいです。

https://www.youtube.com/watch?v=wxH3vQOz3JA

次に以下のページから、ODE用の4つのファイルをDLして確保します

https://ai2001.ifdef.jp/uvc/code_Eng.html

「biped.cpp」「biped.h」「core.cpp」「core.h」の４つのDLが確認できればOKです。

# 再生までの近道手順

公式のデモファイルの一つをテンプレートとしてODEが実行できるベースを作成し、そこにUVC(上体垂直制御)のコードを適用していくという方法で実行可能なプロジェクト（ソリューション）を作成します。

ちなみにVisualStudioでは一つの開発物を「プロジェクト」と呼びます。プロジェクトの中には様々な関連ファイルが入ります。また、そのプロジェクトを複数束ねる概念を「ソリューション」と呼ぶようです。（[参考](https://docs.microsoft.com/ja-jp/visualstudio/get-started/tutorial-projects-solutions?view=vs-2022)）

### コピペでプロジェクトのベースを作る
ファインダーにて、
ローカルディスク(C:)→ode-0.16.2→build→vs2010を開きます。
（環境によってはローカルディスクという名前ではないかもしれませんが、C:であれば同じです。）

![Screenshot 2022-04-29 211752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/3e6bf5f9-f722-0d2c-105d-beff05469d01.png)

ここで
- demo.buggy.vcxproj
- demo.buggy.vcxproj.filters
- demo.buggy.vcxproj.user
の3つのファイルをコピペし、名前をそれぞれ
- demo.biped.vcxproj
- demo.biped.vcxproj.filters
- demo.biped.vcxproj.user
とします。

![Screenshot 2022-04-29 212615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a896bcaf-bff6-1b37-0ea9-9e1cb3061328.png)
↑こんな感じになります。

次に、「demo.buggy.vcxproj」をお使いのテキストエディタで開き、置換作業をします。
通常はメニューの「編集」→「置換」となります。ワードパットなどでも大丈夫です。

![Screenshot 2022-04-29 212858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/473d8162-aecf-170a-000b-c3994334db2f.png)

「buggy」の文字を「biped」に一括置換します。全部で9か所あります。保存して閉じます。
これでODEファイルのベースが整いました。

### コード本体のファイルを移動する
さきほど作成したプロジェクトが「biped.cpp」「biped.h」「core.cpp」「core.h」を認識できるようにファイルを移動します。
ファインダで
ローカルディスク(C:)→ode-0.16.2→ode→demoのディレクトリを開き、
その中に、「biped.cpp」「biped.h」「core.cpp」「core.h」をコピーします。
![Screenshot 2022-04-29 222625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/15008969-6e36-1b41-7ad5-8b5141fd30f9.png)
こんな感じになります。

### プロジェクトを開く
Visual Studioが開いていれば一度閉じ、あらためて起動します。
「プロジェクトやソリューションを開く」を選択し、先ほど作成した
ローカルディスク(C:)→ode-0.16.2→build→vs2010→demo_biped.vcxproj を開きます。

ソリューションエクスプローラーの画面が以下のようになっていれば成功なので次に進みましょう！
![Screenshot 2022-04-29 223100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/cfff1e48-850f-135d-35b9-5f42c2b41733.png)

もしこの画面が出ない場合にはメニューバーの「表示」→「ソリューションエクスプローラー」で開けます。
また、demo_bipedの下にdrawstuffやodeのフォルダがついていなかった場合には、最初からやりなおすとよいと思います。
それでも変わらない場合はファイルを追加することでうまくいくかもしれません。
demo_bipedの上で右クリック、「追加」→「既存の項目」として、
ローカルディスク(C:)→ode-0.16.2 の中にあるdrawstuffを追加してみてください。

### ソースコードをプロジェクトに追加する

![Screenshot 2022-04-29 224055.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/b5a65328-dd0b-5b7a-df28-a58731365d5d.png)
ソリューションエクスプローラーより
ode→demo→demo_buggy.cppを確認し、**demo_buggy.cppを右クリックメニューで削除**します。

次に、demoの上で右クリック→「追加」→「既存の項目を追加」として、
ローカルディスク(C:)→ode-0.16.2→ode→demoの中の「biped.cpp」「biped.h」「core.cpp」「core.h」を選んで追加します。

![Screenshot 2022-04-29 225429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/235d05be-0523-3f34-1fc7-8c3aeff69aea.png)
ソリューションエクスプローラーの中がこのような状態になっていればOKです。


### いったんビルドしてみる
メニューバーより「ビルド」→「ソリューションのビルド」を行います。
下の出力画面に以下のようなメッセージが出ればビルドは成功です。

![Screenshot 2022-04-29 225553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/ab29832e-a77a-6c1d-7a6a-a4d5b5d69a68.png)


### いったん実行してみる
メニューバーの「デバック」→「デバックの開始」もしくはメニューバーの緑の参画印を押すことで実行してみます。

![Screenshot 2022-04-29 225731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/1822d71c-f8db-a71b-3022-61243d34ed95.png)
上記のエラーが発生すればここまでのステップはすべて成功しています。
このエラーはコードで指定されているディレクトリのファイルにアクセスできないというものです。
コードを今回の環境にあわせることでエラーが出ないようにします。

### コードの修正
ソリューションエクスプローラーの「biped.cpp」をダブルクリックすると、
左側にスクリプトが表示されます。

646行目あたりに
c:/ode-0.13/drawstuff/textures
という箇所があるので、これを
c:/ode-0.16.2/drawstuff/textures
に書き換えます。ode-0.16.2を別の場所に置いた場合は、そのパスに書き換えます。
ctrl+s でコードの修正をセーブすることをお忘れなく。
これで修正が完了しました！

# いざ実行！

![Screenshot 2022-04-29 231518.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/94bbb485-280b-fa6a-d931-6b28de9f3036.png)

描画ウィンドウと、ターミナルの黒い画面が２枚出れば起動は大成功です！
お疲れさまでした。さっそく遊んでみましょう。

# 操作方法
描画ウィンドウをマウスドラッグすることで視点を自由に変更できます。

- 左クリック＋ドラッグ：上下左右カメラパン
- 右クリック＋ドラッグ：カメラ移動前後左右
- ホイール押下＋ドラッグ：カメラ移動上下左右

また、動作させるには**黒いウィンドウの「DrawStuff Messages」をフォーカス**し、
アルファベットを入力後にリターンキーを押してコマンドを送信します。
まずは**小文字のwを半角英字で入力した後、リターンキー**を押してみましょう。
ロボットが歩き始めるはずです。
シャツが青い状態であればUVCが効いているので、黄色の棒に当たっても安定して歩き続けます。

![Screenshot 2022-04-29 235836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/6ea3c33a-763c-38c3-a6ae-cbed20fd4025.png)

その他のコマンドは下記の通りです。

w : 歩行開始
u : UVC制御のオンオフ(赤シャツ:オフ、青シャツ：オン)
r : 初期化
q : 終了

k : 後ろからの衝撃？
j : 前からの衝撃？
p : 右手側からの衝撃？

UVC制御をオンオフしながら、衝撃を与えていろいろと様子を観察してみましょう！

※描画画面をフォーカスした状態でキー入力するとフリーズする可能性があるのでご注意ください。

# 次回
次回はコードの中のオブジェクトやパラメータを書き換えることでODEに親しんでいきたいと思います。

# ちなみに
ちなみに今回はDiscord上のプチイベントとして導入作業を行いました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/77cde34f-1c1a-de6f-3fe4-528cc2c80fc4.jpeg" width = 400>
そのアプリについての初心者だけが集まって試行錯誤しながら使い方を理解していくという内容です。
特に講師役を決めているわけではないですが、毎回なんらかの成果は出るという確率論的なイベントです。

先に導入を成功されていた[holypongさん](https://twitter.com/automo_emo)はじめ、みなさんのお知恵で楽しく成功させることができました。ご参加いただいたみなさんありがとうございました。
ドキュメントの少ない分野のソフトを扱うのはなかなかしんどいですが、この数名でやる方式だと、めんどくささをテーブルトークゲームのような楽しさに価値転換でき、なおかつ成功率もあがるのでお勧めです。

# 参考
下記のサイトを参考にさせていただいております。
当記事では2022年04月現在の状況で改めて試し、実際に動いた例をメモしていきます。

https://demura.net/tutorials

https://www.comp.sd.tmu.ac.jp/CcS2020/ode-install-jp.pdf

### 前回記事

https://qiita.com/Ninagawa_Izumi/items/e5e8045e238fdeda9767