TankチュートリアルのTrackControllerが動かなくなってしまった件について - #4 by nakaoka - Japanese (日本語) - Choreonoid Discourse

# TankチュートリアルのTrackControllerが動かなくなってしまった件について

Japanese (日本語)

kariya
August 1, 2020, 7:45am

1

休日に、さらに長文の内容ですみません。初めて質問します。
TrackControllerが動かなくなった経緯をお伝えする前に、まず各ソフトのバージョンを示します。
OS：Windows10、Choreonoid：Choreonoid-master(開発版で、OpenRTM-aistとAssimpのプラグインを追加しています)、VisualStudio 2019

今週の月曜日、仮想joystickを使ってTankチュートリアルを試しており、その時点ではTrackController.dllは動いていました。
そしてここ数日、直動機構を作ろうと、TrackControllerを模擬したコントローラを作っていたのですが、それが上手くいかず、devenv.exeにアプリケーションエラーが発生しました。（写真の添付方法を教えていただけましたら改めてエラーの写真を添付致します。）

そこで、Tankチュートリアルをもう一度動かしました。そのとき、joystickを押してもTank.bodyが前後左右どの方向にも動かないことが分かりました。もともと動かせないようでしたら申し訳ございませんが、このときサンプルで作られていたTankのプロジェクトでも前後左右に動かせなくなりました。

その後試したことは以下の通りです。

1.extディレクトリに保存した自作のプロジェクトディレクトリとsimplecontrollerディレクトリにできるdllファイルを削除してビルドし直す。
→TrackController.dllは動きませんでした。

2.Tankチュートリアルで作ったTrackController.cppとTrackController.dllを削除し、新しく作り直す。
→TrackController.dllは動きませんでした。

3.Tankチュートリアルのプロジェクトディレクトリとdllファイルを削除し全てを新しく作り直す。
→TrackController.dll以外は動きました。

4.プロジェクトディレクトリとdllファイル以外にも、ビルドしたときにファイルができると分かったのでTankTutorialとつくファイルを削除して新しく作り直す。
→TrackController.dll以外は動きました。

ただ、1~4の間で他のコントローラは動きましたが、ビルドの途中で勝手に落ちることがほとんどでした。5以外に一度だけ「’System.OutOfMemoryException’ の例外がスローされました。」と出て途中で終わってしまうことがありました。

5.TrackController.cppに似たSampleCrawlerJoystickController.cppのコードを、linkの名前だけ変更してTrackController.cppに書き換えました。SampleCrawlerJoystickController.cppを模擬したのは、このチュートリアルは動いていたからです。
→「‘System.OutOfMemoryException’ の例外がスローされました。」と表示され、ビルドが途中で終わってしまい、TrackController.dllも動きませんでした。

「‘System.OutOfMemoryException’ の例外がスローされました。」を調べてみると、プログラムを実行するためのメモリが不足していることが原因のようですが、コードを見てもどうすればよいのかわからず前に進めない状況です。
もし解決方法がお分かりでしたら、ご教示いただけると有難く存じます。
また、写真の添付方法についても教えていただけますでしょうか。そうしましたら、devenv.exeのエラー写真を添付いたします。

最後にエラーの全文を載せました。
System.OutOfMemoryException: 種類 ‘System.OutOfMemoryException’ の例外がスローされました。場所 Microsoft.VisualStudio.Text.Formatting.Implementation.FormattedTextSourceFactoryService.Create(ITextSnapshot sourceTextSnapshot, ITextSnapshot visualBufferSnapshot, Int32 tabSize, Double baseIndentation, Double wordWrapWidth, Double maxAutoIndent, Boolean useDisplayMode, IClassifier aggregateClassifier, ITextAndAdornmentSequencer sequencer, IClassificationFormatMap classificationFormatMap, Boolean isViewWrapEnabled) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.PreLayout(LayoutLineCache lineCache) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.PerformLayout(ITextSnapshot newSnapshot, ITextSnapshot newVisualSnapshot, SnapshotPoint anchorPosition, Double verticalDistance, ViewRelativePosition relativeTo, Double effectiveViewportWidth, Double effectiveViewportHeight, Boolean preserveViewportTop, Nullable<
2000
code>1 cancel) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.PerformLayout(ITextSnapshot newSnapshot, ITextSnapshot newVisualSnapshot) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.AdvanceSnapshot(TextSnapshotChangedEventArgs e) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.AdvanceSnapshotOnUIThread(TextSnapshotChangedEventArgs e) 場所 Microsoft.VisualStudio.Text.Editor.Implementation.WpfTextView.OnVisualBufferChanged(Object sender, TextContentChangedEventArgs e) 場所 Microsoft.VisualStudio.Text.Utilities.GuardedOperations.RaiseEvent[TArgs](Object sender, EventHandler1 eventHandlers, TArgs args) — 直前に例外がスローされた場所からのスタック トレースの終わり — 場所 Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)

System.OutOfMemoryException: 種類 ‘System.OutOfMemoryException’ の例外がスローされました。場所 Microsoft.VisualStudio.Editor.Implementation.TextDocData.OnTextBufferChanging(Object sender, TextContentChangingEventArgs args) 場所 Microsoft.VisualStudio.Text.Implementation.BaseBuffer.RaiseChangingEvent(TextContentChangingEventArgs args) — 直前に例外がスローされた場所からのスタック トレースの終わり — 場所 Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)

nakaoka
August 3, 2020, 2:47pm

2

すみません、ご投稿の内容をみた限りでは、ビルドをVisualStudio2019で行われていて、エラーはビルド中にVisualStudioの中で表示されているのですよね。実際のエラーもコンパイルエラーやリンクエラーではなくて、VisualStudio本体のシステム的なエラーにみえます。だとするとこれはChoreonoidの問題と言うよりはVisual Studioの問題のようにみえるのですが、いかがでしょうか。なぜVisualStudioがそうなってしまったのかは私には分かりませんが･･･。

今回Tankチュートリアルを実行しなおしてみました。チュートリアルに従って自分でファイルを作成する場合は大丈夫かと思うのですが、sample/tutorial/Tank以下に予め入れているチュートリアルのファイルについては、古いバージョンのChoreonoid用になっている部分がいくつかあり、部分的に修正が必要でした。修正をしたところ、Ubuntu 20.04でもWindows10でも動作することが確認できました。TrackControllerとジョイスティックでTankモデルを走行させることもできています。

なお画像は投稿フォーム上部のボタン群の中にある「アップロード」ボタン（上向き矢印のアイコンがついたボタン）でアップできます。ただし「エラーの写真」というのが「エラーメッセージの写真」でしたら、それは画像でアップするより（既にやっていただいたように）テキストでアップしていただく方がよいかと思います。

kariya
August 4, 2020, 12:25am

3

中岡さん

お答えいただき、ありがとうございます。
私もVisual Studioが原因だと考えていますが、もし同じ状況の方がいましたらと思い質問した次第です。
まだ始めたばかりですので、一度インストールし直してみます。それ以降は、こちらでもう少し考えてみます。
ありがとうございました。

nakaoka
August 4, 2020, 1:42am

4
2000

ビルドのやり直しについて、buildディレクトリを作り直して、そこでCMakeもまっさらな状態から実行し直すと、うまくいくことがあります。Visual Studioのプロジェクトについてファイルを消したり追加したりしていると、プロジェクトの整合性が崩れて、うまくビルドできなくなってしまうことがあるようですので（過去にそのような状況を何回か経験しました）。ですのでVisualStudioをインストールし直す前に、これを試していただくとよいかもしれません。

nakaoka
August 4, 2020, 1:44am

5

sample/tutorial/Tank以下に予め入れているチュートリアルのファイルについては、古いバージョンのChoreonoid用になっている部分がいくつかあり、部分的に修正が必要でした。

これについて、具体的には以下の修正をしています。

github.com/choreonoid/choreonoid

#### Fix the files of the Tank tutorial to work correctly

committed 02:29PM - 03 Aug 20 UTC

s-nakaoka

+30 -52

Tankモデルについてチュートリアル作成後に改修した部分があり、それを反映できていなかったのですが、反映するようにしました。またコントローラモジュールのファイルパス指定がポータブルでなかったのですが、そこも修正しました。

kariya
August 4, 2020, 2:57am

6

中岡さん

承知しました。buildディレクトリを作り直すことも試してみます。