Webots软件中常用的函数
1. wb_supervisor_node_get_field(WbNodeRef, "translation"):
查找WbFieldRef在指定的節(jié)點(diǎn)中?!啊弊侄伪硎緳C(jī)器人在全球(世界)坐標(biāo)系中的位置。
2. wb_supervisor_node_get_from_def():
調(diào)用在場(chǎng)景樹中搜索名為“MY_ROBOT”的對(duì)象
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():
用于讀取指定字段的最新值。請(qǐng)注意,與傳感器或執(zhí)行器功能不同,wb_supervisor_field _ *()函數(shù)會(huì)立即執(zhí)行:它們的執(zhí)行不會(huì)推遲到下一個(gè)wb_robot_step()調(diào)用。
1 const double *trans = wb_supervisor_field_get_sf_vec3f(trans_field);
4. resetRobot():
moverobottoinitialposition
5.評(píng)估的參數(shù)集
不同控制器將在單獨(dú)的系統(tǒng)進(jìn)程中運(yùn)行,它們無法訪問彼此的變量。雖然,他們將不得不通過其他方式進(jìn)行溝通,以便指定需要評(píng)估的參數(shù)集。有可能并推薦使用WebotsEmitter和Receiver來在Supervisor和其他控制器之間交換信息。例如,在典型的情況下,主管將向機(jī)器人控制器發(fā)送評(píng)估參數(shù)(例如,基因型)。機(jī)器人控制器收聽他們的接收器s,等待一組新的參數(shù)。一旦收到,機(jī)器人控制器開始執(zhí)行由該組參數(shù)指定的行為。在這種情況下,主管需要一個(gè)發(fā)射器,每個(gè)機(jī)器人都需要一個(gè)接收器。
6.重置機(jī)器人的方法
使用優(yōu)化算法時(shí),您可能需要在每次適應(yīng)評(píng)估之前或之后重置機(jī)器人。有幾種重置機(jī)器人的方法:
使用wb_supervisor_field_set _ *()和wb_supervisor_simulation_physics_reset()函數(shù)
您可以使用wb_supervisor_field_set ...()和wb_supervisor_simulation_physics_reset()函數(shù)輕松重置機(jī)器人的位置,方向和物理特性,下面是一個(gè)示例:
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();
上述方法的缺點(diǎn)是它只能重置機(jī)器人的主要位置和方向。對(duì)于某些類型的優(yōu)化,這可能很好,但對(duì)于其他類型則不夠。盡管可以向要重置的一組數(shù)據(jù)添加更多參數(shù),但有時(shí)很難重置所有內(nèi)容。伺服位置和機(jī)器人控制器都不是以這種方式重置。的伺服位置應(yīng)被重置使用wb_servo_set_position()和機(jī)器人控制器應(yīng)當(dāng)通過從管理進(jìn)程將消息發(fā)送到機(jī)器人控制器過程(使用Webots重置發(fā)射器/接收器通訊系統(tǒng))。機(jī)器人控制器程序應(yīng)該能夠處理這樣的消息并相應(yīng)地重置其狀態(tài)。
7. wb_supervisor_simulation_revert():
該功能從頭開始重新啟動(dòng)物理模擬和所有控制器。用這種方法,所有的東西都會(huì)重置,包括物理位置,伺服位置和控制器。但是這個(gè)函數(shù)也會(huì)重新啟動(dòng)調(diào)用wb_supervisor_simulation_revert()的控制器,這通常是運(yùn)行優(yōu)化算法的控制器,因此優(yōu)化狀態(tài)會(huì)丟失。因此,為了使用這種技術(shù),有必要開發(fā)可以保存和恢復(fù)優(yōu)化算法的完整狀態(tài)的函數(shù)。在調(diào)用wb_supervisor_simulation_revert()之前應(yīng)保存優(yōu)化狀態(tài),并在Supervisor時(shí)重新加載控制器重新啟動(dòng)。
8. wbu_motion_new,wbu_motion_delete:
獲取并釋放一個(gè)動(dòng)作文件句柄
1 #include <webots/utils/motion.h> 2 3 WbMotionRef wbu_motion_new(const char *filename); 4 5 void wbu_motion_delete(WbMotionRef motion);
在filename可以以絕對(duì)路徑或相對(duì)于控制器目錄的路徑來指定。
9. wbu_motion_play,wbu_motion_stop,wbu_motion_set_loop,wbu_motion_set_reverse:
控制運(yùn)動(dòng)文件回放
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);
請(qǐng)注意,wb_robot_step()運(yùn)動(dòng)文件中的功能步驟和姿勢(shì)間隔可能不同。在這種情況下,Webot通過線性插值計(jì)算中間關(guān)節(jié)位置。
wbu_motion_stop()中斷指定的運(yùn)動(dòng)的再現(xiàn)但保留當(dāng)前位置。中斷后,播放可以繼續(xù)wbu_motion_play()。
該wbu_motion_set_loop()套環(huán)模式的指定的運(yùn)動(dòng)的。如果循環(huán)模式為true,則當(dāng)文件到達(dá)文件的結(jié)束或開始(反向模式)時(shí),動(dòng)作重復(fù)。的循環(huán)模式都可以使用,例如,讓一個(gè)機(jī)器人重復(fù)一系列步驟在行走序列。請(qǐng)注意,循環(huán)模式可以在動(dòng)作播放時(shí)更改。
wbu_motion_set_reverse()設(shè)定倒檔模式指定的運(yùn)動(dòng)。如果反轉(zhuǎn)模式是true,則動(dòng)作文件向后播放。例如,通過使用反向模式,可以將步行運(yùn)動(dòng)轉(zhuǎn)變?yōu)橄蚝蟛叫羞\(yùn)動(dòng)。該反向模式是可以改變的,而運(yùn)動(dòng)是打,在這種情況下,動(dòng)作會(huì)從當(dāng)前位置回。
默認(rèn)情況下,運(yùn)動(dòng)的循環(huán)模式和反向模式是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);
當(dāng)播放位置到達(dá)動(dòng)作文件的結(jié)尾時(shí),該wbu_motion_is_over()功能返回true。那就是當(dāng)最后的姿勢(shì)已經(jīng)使用該功能發(fā)送到電機(jī)節(jié)點(diǎn)時(shí)wb_motor_set_position()。但這并不意味著電機(jī)尚未達(dá)到規(guī)定的位置;它們可能很慢或被障礙物,機(jī)器人,墻壁,地板等阻擋。如果運(yùn)動(dòng)處于循環(huán)模式,則此功能始終返回false。請(qǐng)注意,wbu_motion_is_over()取決于反轉(zhuǎn)模式。wbu_motion_is_over()返回true時(shí)反向模式是true和重放位置是在文件的開頭或當(dāng)反向模式是false和重放位置是在文件的結(jié)尾。
該wbu_motion_get_duration()函數(shù)以毫秒為單位返回運(yùn)動(dòng)文件的總持續(xù)時(shí)間。
該wbu_motion_get_time()函數(shù)以毫秒為單位返回當(dāng)前播放位置。
該wbu_motion_set_time()功能可以及時(shí)更改播放位置。這允許用戶向前或向后跳過。請(qǐng)注意,無論正在播放還是停止,時(shí)間位置都可以更改。最小值是0(運(yùn)動(dòng)開始),最大值是函數(shù)返回的值wbu_motion_get_duration()(運(yùn)動(dòng)結(jié)束)。時(shí)間位置以毫秒表示
11. wb_robot_step():
可同步Webots和控制器之間的傳感器和執(zhí)行器數(shù)據(jù)。如果該wb_robot_step()功能未被調(diào)用,則Webots中將不會(huì)啟動(dòng),并且控制器中的傳感器也不會(huì)更新。
1 int wb_robot_step(int duration)
該duration參數(shù)指定以毫秒為單位的時(shí)間量,在wb_robot_step()函數(shù)返回之前必須模擬該時(shí)間量。請(qǐng)注意,這不是實(shí)時(shí)的,而是虛擬的(模擬)時(shí)間,所以這不像調(diào)用系統(tǒng)的時(shí)間sleep()。根據(jù)模擬和執(zhí)行模式的復(fù)雜程度,該功能可能會(huì)很快返回。當(dāng)它返回時(shí),模擬時(shí)間的請(qǐng)求持續(xù)時(shí)間已過。換句話說,物理運(yùn)行指定的持續(xù)時(shí)間:對(duì)象可能會(huì)移動(dòng),電機(jī)可能運(yùn)行,傳感器值可能會(huì)發(fā)生變化等。請(qǐng)注意,duration參數(shù)必須是其倍數(shù)WorldInfo.basicTimeStep。
如果此函數(shù)返回-1,則表示W(wǎng)ebots希望終止控制器。當(dāng)用戶點(diǎn)擊Revert按鈕或退出Webots時(shí)會(huì)發(fā)生這種情況。所以如果你的代碼需要做一些清理工作,例如刷新或關(guān)閉數(shù)據(jù)文件等,就必須測(cè)試這個(gè)返回值并采取適當(dāng)?shù)男袆?dòng)??刂破鹘K止不能被否決:一秒鐘后,控制器被Webots終止。所以只有一秒可用于清理。
12. wb_robot_get_device :
獲取設(shè)備的唯一標(biāo)識(shí)符
13. wb_robot_get_device_by_index :
通過自省獲取設(shè)備
14. wb_robot_battery_sensor_enable,wb_robot_battery_sensor_disable,wb_robot_get_battery sampling_period,wb_robot_battery_sensor_get_value:
電池傳感器功能
這些功能可以讓您測(cè)量機(jī)器人電池當(dāng)前的能量水平。首先,需要通過調(diào)用該wb_robot_battery_sensor_enable()功能來啟用電池傳感器測(cè)量。該sampling_period參數(shù)以毫秒表示,并定義了執(zhí)行測(cè)量的頻率。電池傳感器啟用后,通過調(diào)用該wb_robot_battery_sensor_get_value()函數(shù)可以從中讀取一個(gè)值。返回值對(duì)應(yīng)于以焦耳(J)表示的當(dāng)前電池能量水平。
該wb_robot_battery_sensor_disable()功能應(yīng)該用于停止電池傳感器測(cè)量。
該wb_robot_get_battery_sampling_period()函數(shù)返回函數(shù)給定的時(shí)間段wb_robot_battery_sensor_enable(),如果設(shè)備被禁用,則返回0。
15. wb_robot_get_basic_time_step:
返回WorldInfo節(jié)點(diǎn)的basicTimeStep字段的值
16. wb_robot_get_mode:
獲取操作模式,模擬與真實(shí)機(jī)器人
17. wb_robot_get_name:
返回機(jī)器人節(jié)點(diǎn)中定義的名稱
總結(jié)
以上是生活随笔為你收集整理的Webots软件中常用的函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeScript Parameter
- 下一篇: 沪惠保怎么理赔 怎么理赔沪惠保