Webots 使い方まとめ

12. フィールドパラメータの書き換え

Supervisorは、worldに存在するNodeのFieldにアクセスすることで、パラメータを書き換えることができる。 これにより、シミュレーション中にロボットの位置を強制的に移動させることもできる。 この説では、ロボットの座標について、書き換え方法を説明する。

.1 関数

三次元ベクトルパラメータの書き換えには、supervisor.hで定義されている
wb_supervisor_field_set_sf_vec3f()を使用する。

#include<webots/supervisor.h>
void wb_supervisor_field_set_sf_vec3f( WbFieldRef sf_field , const double values[2] );

第一引数sf_fieldで指定されているフィールドのパラメータを、第二引数values[2]で 指定されている値に書き換える。

.3 使用例

次のサンプルは1秒間隔でロボットの座標を監視し、z座標の値が-0.3以下になると初期位置(0.0, 0.0, 0.0)に強制的に移動させるプログラムだ。


#include <webots/robot.h>
#include <webots/supervisor.h>

int main(int argc,char *argv[]) {
WbNodeRef node;
WbFieldRef field;
const double *translation;
double StartLocation[3] = {0.0, 0.0, 0.0}; //初期位置

wb_robot_init(); //ロボットの初期化
	//フィールドの取得
	node = wb_supervisor_node_get_from_def("ROBOT1");
	field = wb_supervisor_node_get_field(node,"translation");
	
	while(wb_robot_step(32)!=-1)
	{
		wb_robot_step(1000);
		translation = wb_supervisor_field_get_sf_vec3f(field);
		//z座標が閾値(-0.3)以下ならば、初期値に書き換える
		if(translation[2] < -0.3)
			wb_supervisor_field_set_sf_vec3f(field,StartLocation);
	}
	wb_robot_cleanup();
	return 0;
}

まず9行目で移動先の座標を3次元データとして準備しておく。 13・14行目はフィールドハンドラの取得を行っている。19行目でフィールドのパラメータを取得し、閾値以下であれば、2 2 行目で初期位置パラメータに書き換えている。

.4 その他パラメータ形式に対応した関数

この節で使用したwb_supervisor_field_set_sf_vec3f()は3 次元ベクトルパラメータ(座標等)の書き込みのみに対応している。 よって他の種類のパラメータ(回転角度等)を書き込むためには以下の関数を使用する必要がある。

#include <webots/supervisor.h>
void wb_supervisor_field_et_sf_bool (WbFieldRef field, bool value);
void wb_supervisor_field_set_sf_int32 (WbFieldRef field, int value);
void wb_supervisor_field_set_sf_float (WbFieldRef field, double value);
void wb_supervisor_field_set_sf_vec2f (WbFieldRef sf field, const double values[2]);
void wb_supervisor_field_set_sf_vec3f_(WbFieldRef field, const double values[3]);
void wb_supervisor_field_set_sf_rotation (WbFieldRef field, const double values[4]);
void wb_supervisor_field_set_sf_color (WbFieldRef field, const double values[3]);
void wb_supervisor_field_set_sf_string (WbFieldRef field, const char *value);

HOME > Webots 使い方まとめ > 12. フィールドパラメータの書き換え