Webotsでよく使われる関数(C版)


  • wb_supervisor_node_get_field(WbNodeRef, "translation"):指定されたノードにWbFieldRefを検索します.「」フィールドは、ロボットが世界(世界)座標系にある位置を示します.
  • wb_supervisor_node_get_from_def():シーンツリーで「MY_ROBOT」という名前のオブジェクトの検索を呼び出す
    WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT");
    WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
    
  • wb_supervisor_field_get_sf_vec3f():指定されたフィールドの最新値を読み込む.センサやアクチュエータの機能とは異なり、wb_supervisor_field _ *()関数は直ちに実行されます.これらの実行は次のwb_robot_step()呼び出しに遅れることはありません.
    const double *trans = wb_supervisor_field_get_sf_vec3f(trans_field);
    
  • resetRobot() :   move robot to initial position
  • 評価されたパラメータセットの異なるコントローラは、それぞれの変数にアクセスできない個別のシステムプロセスで実行されます.ただし、評価が必要なパラメータセットを指定するために、他の方法でコミュニケーションを取らなければなりません.WebotsEmitterおよびReceiverを使用してSupervisor他のコントローラとの間で情報交換を推奨する可能性があります.例えば、典型的な場合、担当者は、評価パラメータ(例えば、遺伝子型)をロボットコントローラに送信する.ロボットコントローラは、受信機sを受信し、新しいパラメータのセットを待つ.受信すると、ロボットコントローラは、そのパラメータによって指定された動作を実行し始める.この場合、担当者は、送信機を1つ必要とし、各ロボットに1つの受信機を必要とする.
  • ロボットをリセットする方法最適化アルゴリズムを使用する場合は、評価に適応するたびにロボットをリセットする必要がある場合があります.ロボットをリセットする方法はいくつかあります:
  • 使用wb_supervisor_field_set _ *()wb_supervisor_simulation_physics_reset()関数wb_supervisor_field_set ...()およびwb_supervisor_simulation_physics_reset()関数を使用すると、ロボットの位置、方向、物理的な特性を簡単にリセットできます.次の例を示します.
    // get handles to the robot's translation and rotation fields
    WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT");
    WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
    WbFieldRef rot_field = wb_supervisor_node_get_field(robot_node, "rotation");
    
     // reset the robot
    const double INITIAL_TRANS[3] = { 0, 0.5, 0 };
    const double INITIAL_ROT[4] = { 0, 1, 0, 1.5708 };
    wb_supervisor_field_set_sf_vec3f(trans_field, INITIAL_TRANS);
    wb_supervisor_field_set_sf_rotation(rot_field, INITIAL_ROT);
    wb_supervisor_simulation_physics_reset();
    

    上記の方法の欠点は、ロボットの主な位置と方向しかリセットできないことです.いくつかのタイプの最適化では、これは良いかもしれませんが、他のタイプでは十分ではありません.リセットするデータのセットにパラメータを追加できますが、すべての内容をリセットするのは難しい場合があります.サーボ位置もロボットコントローラもこのようにリセットされません.のサーボ位置をリセットして使用するwb_servo_set_position()ロボットコントローラと管理プロセスからロボットコントローラプロセスにメッセージを送信する(Webotsを使用して送信機/受信機通信システムをリセットする).ロボットコントローラプログラムは、このようなメッセージを処理してその状態をリセットできるはずである.
  • wb_supervisor_simulation_revert():物理シミュレーションとすべてのコントローラを最初から再起動します.この方法では、物理的な位置、サーボ位置、コントローラなど、すべてのものがリセットされます.しかし、この関数は呼び出しwb_supervisor_simulation_revert()のコントローラも再起動します.これは通常、最適化アルゴリズムを実行するコントローラなので、最適化ステータスが失われます.従って,この技術を用いるためには,最適化アルゴリズムの完全な状態を保存して復元できる関数を開発する必要がある.wb_supervisor_simulation_revert()を呼び出す前に最適化状態を保存し、Supervisorでコントローラを再ロードして再起動します.
  • wbu_motion_new,wbu_motion_delete:1つのアクションファイルハンドルを取得して解放する
  • #include 
    
    WbMotionRef wbu_motion_new(const char *filename);
    
    void wbu_motion_delete(WbMotionRef motion);
    

    filenameでは、絶対パスまたはコントローラディレクトリに対するパスで指定できます.
  • wbu_motion_play,wbu_motion_stop,wbu_motion_set_loop,wbu_motion_set_reverse:動画ファイル再生制御
  • #include 
    void wbu_motion_play(WbMotionRef motion);
    void wbu_motion_stop(WbMotionRefmotion);
    void wbu_motion_set_loop(WbMotionRef motion, bool loop);
    void wbu_motion_set_reverse(WbMotionRefmotion, bool reverse);
    
    wb_robot_step()モーションファイルの機能手順と姿勢間隔が異なる場合がありますのでご注意ください.この場合、Webotは線形補間によって中間関節位置を計算する.wbu_motion_stop()指定された動きの再生を中断するが現在位置を保持する.中断後、再生は継続可能wbu_motion_play().
    このwbu_motion_set_loop()カラーパターンの指定された動きのもの.ループモードがtrueの場合、ファイルがファイルの終了または開始(逆モード)に達すると、動作が繰り返されます.ループモードは、ロボットに一連のステップを歩行シーケンスで繰り返すなど、使用できます.ループモードは、動作再生時に変更できます.wbu_motion_set_reverse()バックモード指定の動きを設定します.反転モードがtrueの場合、アクションファイルは後方に再生されます.例えば、リバースモードを使用することにより、歩行運動を後方歩行運動に変更することができる.この逆モードは変更可能であり、動きは打つので、この場合、動作は現在の位置から戻ります.
    デフォルトでは、モーションのループモードと逆モードはfalseです.
  • wbu_motion_is_over,wbu_motion_get_duration,wbu_motion_get_time,wbu_motion_set_time:放送位置制御
  • #include 
    bool wbu motion_is_over(WbMotionRef motion);
    int wbu_motion_get_duration(WbMotionRefmotion);
    int wbu_motion_get_time(WbMotionRef motion, bool loop);
    void wbu_motion_set_time(WbMotionRefmotion, int t);
    

    このwbu_motion_is_over()機能は、再生位置が動作ファイルの最後に達するとtrueに戻る.それは、最後のポーズでこの機能を使用してモータノードに送信したときwb_motor_set_position()です.しかし、これはモータがまだ所定の位置に達していないことを意味するものではない.それらは遅いか、障害物、ロボット、壁、床などに阻まれている可能性があります.モーションがループモードの場合、この機能は常にfalseを返します.なお、wbu_motion_is_over()反転モードにより異なります.wbu_motion_is_over()trueを返す場合のリバースモードはtrueと再生位置がファイルの先頭またはリバースモードがfalseと再生位置がファイルの末尾である.
    このwbu_motion_get_duration()関数は、モーションファイルの合計持続時間をミリ秒単位で返します.
    このwbu_motion_get_time()関数は、ミリ秒単位で現在の再生位置を返します.
    このwbu_motion_set_time()再生位置の変更ができる.これにより、ユーザーは前または後ろにスキップできます.時間位置は、再生中でも停止中でも変更できますのでご注意ください.最小値は0(運動開始)、最大値は関数が返す値wbu_motion_get_duration()(運動終了)です.時間位置はミリ秒で表します
  • wb_robot_step():Webotsとコントローラ間のセンサとアクチュエータデータを同期可能.このwb_robot_step()機能が呼び出されていない場合、Webotsは起動せず、コントローラのセンサーも更新されません.
  • int wb_robot_step(int duration)
    

    このdurationパラメータはミリ秒単位の時間量を指定し、wb_robot_step()関数が戻る前にその時間量をシミュレートする必要があります.これはリアルタイムではなく、仮想的な(シミュレーション)時間なので、システムを呼び出す時間sleep()とは異なります.シミュレーションと実行モードの複雑さに応じて、この機能はすぐに戻る可能性があります.戻ってくると、シミュレーション時間のリクエストの持続時間が過ぎます.言い換えれば、物理運転で指定された持続時間:オブジェクトが移動したり、モータが動作したり、センサ値が変化したりする可能性があります.なお、durationパラメータはその倍数WorldInfo.basicTimeStepでなければならない.
    この関数が-1を返すと、Webotsがコントローラを終了したいことを示します.このようなことは、ユーザがRevertボタンをクリックしたりWebotsを終了したりしたときに発生する.したがって、データファイルのリフレッシュや閉じるなど、コードをクリーンアップする必要がある場合は、この戻り値をテストし、適切な行動を取らなければなりません.コントローラの終了は拒否できません:1秒後、コントローラはWebotsによって終了します.クリーンアップに使用できるのは1秒だけです
  • wb_robot_get_device:デバイスの一意の識別子を取得
  • wb_robot_get_device_by_index:自省による機器取得
  • wb_robot_battery_sensor_enable,wb_robot_battery_sensor_disable,wb_robot_get_battery sampling_period,wb_robot_battery_sensor_get_value:バッテリーセンサー機能
  • これらの機能により、ロボットバッテリの現在のエネルギーレベルを測定できます.まず、このwb_robot_battery_sensor_enable()機能を呼び出すことでバッテリセンサ測定を有効にする必要がある.このsampling_periodパラメータはミリ秒で表され、測定を実行する頻度が定義されている.バッテリーセンサーを有効にすると、このwb_robot_battery_sensor_get_value()関数を呼び出すことで値を読み取ることができます.戻り値はジュール(J)で表される現在の電池エネルギーレベルに対応する.
    このwb_robot_battery_sensor_disable()バッテリーセンサーの測定を停止するための機能です.
    このwb_robot_get_battery_sampling_period()関数は関数が与えられた期間を返すwb_robot_battery_sensor_enable()デバイスが無効になっている場合は0を返す.
  • wb_robot_get_basic_time_step:戻るWorldInfoノードのbasicTimeStepフィールドの値
  • wb_robot_get_mode:操作モードを取得し、アナログとリアルロボット
  • wb_robot_get_name:ロボットノードで定義した名前を返す
  • 本文はブログ園からhttps://www.cnblogs.com/guojun-junguo/p/9077293.html