ARCS6のコンパイルと実行/How to Compile and Execute ARCS6 FRONT PAGE
最終更新日:2022/02/06

ディレクトリ構造とコンパイル&実行方法

ARCS6ではVer5.1以前と異なり,下記のようにロボットごとにディレクトリが分かれて,さらにその下層に制御系ごとにディレクトリが分かれる構造になっています。

gitでバージョン管理・複数ロボット・複数制御系で使いやすくするために,REV.200618からディレクトリ構造が大幅に変わりました。 例えば,新しいロボット&新しい制御系を追加したいときは,一例として,robotディレクトリの配下に,

のようにディレクトリを追加していきます。 これですべてのロボットで同じライブラリを共有しつつ実験装置特有の制御系やドライバ等々は分けられて,研究室内のコードをgitで管理可能です。 機密保持的にマズいロボットの場合では,そのロボのディレクトリを退避&削除してから push すればおk。

コンパイル&実行するときは,

cd ./ARCS6/robot/AlphonseIII/ArkDestructionCtrl
make
./ARCS

のようにして所望の制御系コードのところまで移動してからメイクします。

コンパイル&実行の各種モード

ARCS6にはいくつかのコンパイルのモードがあります。 下記の general/BaseCtrl の部分は適宜読み替えて下さい。

依存関係をチェック&構成する場合

該当ロボットの該当制御系のコードまで移動してメイク デップ。

cd ./ARCS6/robot/general/BaseCtrl
make dep

ヘッダファイルの依存関係を調べて,依存関係ファイル Makefile.depが生成されます。 ライブラリに何か追加したときは必ずこれをやってください。 一番最初にコンパイルするときも必ずコレをやってください! もしやらないと,コードを変更しても実行ファイルに反映されないことがあります!! gccはMakefile.depを参照して再度コンパイルが必要か否かを判断するので。

通常のリアルタイム制御モードの場合

該当ロボットの該当制御系のコードまで移動してメイクして実行。

cd ./ARCS6/robot/general/BaseCtrl
make
./ARCS

オフライン計算モードの場合

該当ロボットの該当制御系のコードまで移動してメイク オフラインして実行。

cd ./ARCS6/robot/general/BaseCtrl
make offline
./ARCS

このモードではいつもの ControlFunctions.cc は走らずに OfflineCalculations.cc のみが走るようになっています。 ARCSのライブラリは使いたいけどリアルタイム制御はしたくない,オフラインで何か計算させたい,特定の処理のみデバッグしたいときとかに便利。

中間ファイル等々をクリーンする場合

該当ロボットの該当制御系のコードまで移動してメイク クリーン。

cd ./ARCS6/robot/general/BaseCtrl
make clean

oファイル,sファイルなどの中間ファイルが削除されます。

GDBデバッガ上で実行する場合

該当ロボットの該当制御系のコードまで移動してメイク デバッグしてGDB上で実行。

cd ./ARCS6/robot/general/BaseCtrl
make debug

デバッグ情報が埋め込まれて,GDBが追える程度の最適化でコンパイルされます。 少し時間が掛かります。 その後,下記のように自動でGDBが立ち上がります。

(gdb)

立ち上がったら,gdbのプロンプト上で,

(gdb) run

とするとARCSがGDBの上で走ります。 エラーが起きると該当箇所で止まってgdbの画面に戻ります。 ただし,ARCSの画面描画と混じり合ってごちゃまぜ表示になりますが,どこかに (gdb) がいるはず。 そうしたら,

(gdb) bt

とするとバックトレースされて,どこがオカシイか分かります。 この方法は特に segmentation fault,通称セグフォ,SIGSEGVで困っているときに便利。 quitで終了。 終わったらクリーンしておいてください。

アセンブリリストを見たい場合

該当ロボットの該当制御系のコードまで移動してメイク アセンブリリスト。

cd ./ARCS6/robot/general/BaseCtrl
make asmlist

通常のコンパイル&リンクはされずに,sファイルが生成されます。 どういうアセンブリコードになっているのか気になるときに使います。 終わったらクリーンしておいてください。