コンテンツにスキップ
日本語

C++ コントローラー

Python と違い、C や C++ のコントローラーは実行する前にコンパイルする必要があります。このドキュメントのすべての例には、Python 版と同じプログラムの C/C++ タブがあり、どれもスターターロボットでコンパイルして実行を確認しています。

#include <cmath>
#include <webots/Robot.hpp>
#include <webots/Motor.hpp>
using namespace webots;
int main() {
Robot *robot = new Robot();
int timeStep = (int)robot->getBasicTimeStep();
Motor *left = robot->getMotor("left wheel motor");
Motor *right = robot->getMotor("right wheel motor");
left->setPosition(INFINITY);
right->setPosition(INFINITY);
left->setVelocity(3.0);
right->setVelocity(3.0);
while (robot->step(timeStep) != -1) {
}
delete robot;
return 0;
}

どのシステムでもいちばん簡単なのは、Webots のエディターを使う方法です。Wizards > New Robot Controller で Makefile 付きの C++ コントローラーを作成し、Build ボタンを押します。Webots のガイドを参照してください。

ターミナルからコンパイルすることもできます。次のコマンドは macOS でテストしました。

ターミナルウィンドウ
WEBOTS=/Applications/Webots.app/Contents
clang++ -std=c++17 -I$WEBOTS/include/controller/cpp -L$WEBOTS/lib/controller \
-lController -lCppController -Wl,-rpath,$WEBOTS/lib/controller \
my_controller.cpp -o my_controller

Linux では、WEBOTS=/usr/local/webots にすれば同じオプションが使えます。OpenCV を使う場合は、そのオプションも追加してください。たとえば macOS の Homebrew などで OpenCV 4 をインストールしていれば、$(pkg-config --cflags --libs opencv4) でオプションが得られます。例は OpenCV 4.13 でテストしています。

  • Windows では、 コントロールウィンドウの左側の LOAD ボタンで .exe ファイルを読み込みます。
  • macOS と Linux では、 コンパイルしたプログラムにファイル拡張子がないため、LOAD ボタンでは選択できません。代わりに、競技のときと同じように Remote Controller で実行してください。