1. wb_supervisor_node_get_field(WbNodeRef, "translation"):
查找WbFieldRef在指定的節點中。“”字段表示機器人在全球(世界)坐標系中的位置。
2. wb_supervisor_node_get_from_def():
調用在場景樹中搜索名為“MY_ROBOT”的對象
1 WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT"); 2 WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
3. wb_supervisor_field_get_sf_vec3f():
用於讀取指定字段的最新值。請注意,與傳感器或執行器功能不同,wb_supervisor_field _ *()函數會立即執行:它們的執行不會推遲到下一個wb_robot_step()調用。
1 const double *trans = wb_supervisor_field_get_sf_vec3f(trans_field);
4. resetRobot():
move robot to initial position
5.評估的參數集
不同控制器將在單獨的系統進程中運行,它們無法訪問彼此的變量。雖然,他們將不得不通過其他方式進行溝通,以便指定需要評估的參數集。有可能並推薦使用Webots Emitter和Receiver來在Supervisor和其他控制器之間交換信息。例如,在典型的情況下,主管將向機器人控制器發送評估參數(例如,基因型)。機器人控制器收聽他們的接收器s,等待一組新的參數。一旦收到,機器人控制器開始執行由該組參數指定的行為。在這種情況下,主管需要一個發射器,每個機器人都需要一個接收器。
6.重置機器人的方法
使用優化算法時,您可能需要在每次適應評估之前或之后重置機器人。有幾種重置機器人的方法:
使用wb_supervisor_field_set _ *()和wb_supervisor_simulation_physics_reset()函數
您可以使用wb_supervisor_field_set ...()和 wb_supervisor_simulation_physics_reset()函數輕松重置機器人的位置,方向和物理特性,下面是一個示例:
1 // get handles to the robot's translation and rotation fields
2 WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT"); 3 WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation"); 4 WbFieldRef rot_field = wb_supervisor_node_get_field(robot_node, "rotation"); 5
6 // reset the robot
7 const double INITIAL_TRANS[3] = { 0, 0.5, 0 }; 8 const double INITIAL_ROT[4] = { 0, 1, 0, 1.5708 }; 9 wb_supervisor_field_set_sf_vec3f(trans_field, INITIAL_TRANS); 10 wb_supervisor_field_set_sf_rotation(rot_field, INITIAL_ROT); 11 wb_supervisor_simulation_physics_reset();
上述方法的缺點是它只能重置機器人的主要位置和方向。對於某些類型的優化,這可能很好,但對於其他類型則不夠。盡管可以向要重置的一組數據添加更多參數,但有時很難重置所有內容。伺服位置和機器人控制器都不是以這種方式重置。的伺服 位置應被重置使用 wb_servo_set_position()和機器人控制器應當通過從管理進程將消息發送到機器人控制器過程(使用Webots重置 發射器 / 接收器通訊系統)。機器人控制器程序應該能夠處理這樣的消息並相應地重置其狀態。
7. wb_supervisor_simulation_revert():
該功能從頭開始重新啟動物理模擬和所有控制器。用這種方法,所有的東西都會重置,包括物理位置,伺服位置和控制器。但是這個函數也會重新啟動調用wb_supervisor_simulation_revert()的控制器,這通常是運行優化算法的控制器,因此優化狀態會丟失。因此,為了使用這種技術,有必要開發可以保存和恢復優化算法的完整狀態的函數。在調用wb_supervisor_simulation_revert()之前應保存優化狀態,並在Supervisor時重新加載控制器重新啟動。
8. wbu_motion_new,wbu_motion_delete :
獲取並釋放一個動作文件句柄
1 #include <webots/utils/motion.h>
2
3 WbMotionRef wbu_motion_new(const char *filename); 4
5 void wbu_motion_delete(WbMotionRef motion);
在filename可以以絕對路徑或相對於控制器目錄的路徑來指定。
9. wbu_motion_play,wbu_motion_stop,wbu_motion_set_loop,wbu_motion_set_reverse :
控制運動文件回放
1 #include <webots/utils/motion.h>
2 void wbu_motion_play(WbMotionRef motion); 3 void wbu_motion_stop(WbMotionRefmotion); 4 void wbu_motion_set_loop(WbMotionRef motion, bool loop); 5 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
10. wbu_motion_is_over,wbu_motion_get_duration,wbu_motion_get_time,wbu_motion_set_time :
控制播放位置
1 #include <webots/utils/motion.h>
2 bool wbu motion_is_over(WbMotionRef motion); 3 int wbu_motion_get_duration(WbMotionRefmotion); 4 int wbu_motion_get_time(WbMotionRef motion, bool loop); 5 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()
(運動結束)。時間位置以毫秒表示
11. wb_robot_step():
可同步Webots和控制器之間的傳感器和執行器數據。如果該wb_robot_step()功能未被調用,則Webots中將不會啟動,並且控制器中的傳感器也不會更新。
1 int wb_robot_step(int duration)
該duration參數指定以毫秒為單位的時間量,在wb_robot_step()函數返回之前必須模擬該時間量。請注意,這不是實時的,而是虛擬的(模擬)時間,所以這不像調用系統的時間 sleep()。根據模擬和執行模式的復雜程度,該功能可能會很快返回。當它返回時,模擬時間的請求持續時間已過。換句話說,物理運行指定的持續時間:對象可能會移動,電機可能運行,傳感器值可能會發生變化等。請注意,duration 參數必須是其倍數WorldInfo.basicTimeStep。
如果此函數返回-1,則表示Webots希望終止控制器。當用戶點擊Revert按鈕或退出Webots 時會發生這種情況。所以如果你的代碼需要做一些清理工作,例如刷新或關閉數據文件等,就必須測試這個返回值並采取適當的行動。控制器終止不能被否決:一秒鍾后,控制器被Webots終止。所以只有一秒可用於清理。
12. wb_robot_get_device :
獲取設備的唯一標識符
13. wb_robot_get_device_by_index :
通過自省獲取設備
14. 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。
15. wb_robot_get_basic_time_step:
返回WorldInfo節點的basicTimeStep字段的值
16. wb_robot_get_mode :
獲取操作模式,模擬與真實機器人
17. wb_robot_get_name :
返回機器人節點中定義的名稱