原創文章,來自“博客園,_阿龍clliu” http://www.cnblogs.com/clliu/,轉載請注明原文章出處。
不能說webots的學習資料少,只能說它的中文資料少。但是英文資料也的看呀,畢竟要深入了解這款軟件,看官方的幫助文檔是最好不過的了。
官方參考文檔地址https://www.cyberbotics.com/doc/reference/index,其實也是可以離線查看的,但是離線是英文,本人的英文水平也不咋地,所以就投機取巧了,瀏覽器是有在線翻譯的功能的。
既然說的是傳感器的API使用,那就選慣性測量單元 (IMU)吧,在節點和API函數下選擇(慣性單元 )InertialUnit,就出現了關於這個傳感器的描述和使用方法。
在webots中有許多傳感器,包括GPS、Gyro(陀螺儀)、touchSensor(接觸傳感器)、Receiver(接收器)、Pen(筆)、Emitter(發射器)、Compass(指南針)、DistanceSensor(距離傳感器)、Camane(照相機)等等。
----------------------------------------------以下部分來自webots官方reference------------------------------------
Webots參考手冊
慣性單位
派生自設備。
InertialUnit {
MFVec3f lookupTable [ ] # interpolation
SFBool xAxis TRUE # compute roll
SFBool zAxis TRUE # compute pitch
SFBool yAxis TRUE # compute yaw
SFFloat resolution -1
}
描述
該InertialUnit節點模擬一個慣性測量單元 (IMU)。的InertialUnit計算並返回它的輥, 俯仰和偏航相角在限定的全局坐標系和WorldInfo節點。如果要測量加速度或角速度,請改用加速度計或 陀螺儀節點。該InertialUnit節點必須被放置在機器人使得其點¯x在方向a軸分機器人的向前運動(縱軸)。 正z軸必須指向機器人的右側,例如右臂,右翼(橫向軸)。正y軸必須指向 機器人的上/上方向。如果慣性單元具有該取向,則滾動,俯仰和偏航角對應於通常的汽車,航空或空間意義。更精確地, 慣性單元測量沿x軸(滾動),z軸(俯仰)和y軸(偏航)的Tait-Bryan角。這個慣例通常稱為xzy外部序列; 它對應於由YZX表示的元素旋轉的組成。參考框架由給出北方向的單位向量,與歸一化重力向量和它們的叉積(cross-product)相反的單位向量組成(參見WorldInfo以定制該框架)。
注意:在萬向節鎖定情況下,即當俯仰為-π/ 2或π/ 2時,側傾和偏航設置為NaN(不是數字)。
字段摘要
-
lookupTable
:該字段可選地指定查找表,其可以用於將角度值[rad]改變為設備特定輸出值,或者例如將單位改變為度數。使用查找表,還可以定義最小和最大輸出值,並將噪聲添加到輸出值。默認情況下,查找表為空,因此返回的角度值以弧度表示,不添加噪聲。 -
xAxis, yAxis, zAxis
:每個布爾字段指定是否應為指定軸啟用或禁用計算。該xAxis
字段定義是否應計算滾轉角。該yAxis
字段定義是否應該計算偏航角。該zAxis
字段定義是否 應該計算俯仰角。如果這些字段之一設置為FALSE,則不會計算相應的角度元素,並且它將返回NaN (不是數字)。例如,如果zAxis
為FALSE,則wb_inertial_unit_get_values()[2]
返回NaN。默認值是所有三個軸都被啟用(TRUE)。

resolution
:此字段允許定義傳感器的分辨率,分辨率是其能夠測量的最小變化。將此字段設置為-1(默認)意味着傳感器具有“無限”分辨率(可以測量任何無限小的變化)。此字段接受間隔(0.0,inf)中的任何值。
慣性單位函數
名稱
wb_inertial_unit_enable,wb_inertial_unit_disable,wb_inertial_unit_get_sampling_period,wb_inertial_unit_get_roll_pitch_yaw - 啟用,禁用和讀取慣性單元的輸出值
{ C ++ },{ Java },{ Python },{ Matlab },{ ROS }
#include <webots/inertial_unit.h> void wb_inertial_unit_enable(WbDeviceTag tag, int sampling_period); void wb_inertial_unit_disable(WbDeviceTag tag); int wb_inertial_unit_get_sampling_period(WbDeviceTag tag); const double *wb_inertial_unit_get_roll_pitch_yaw(WbDeviceTag tag);
描述
該wb_inertial_unit_enable()
功能打開角度測量。該sampling_period
參數指定傳感器的采樣周期並以毫秒表示。注意,第一次測量僅在第一個采樣周期過去后才可用。
該wb_inertial_unit_disable()
函數關閉 InertialUnit設備。
該wb_inertial_unit_get_sampling_period()
函數返回給定的周期wb_inertial_unit_enable()
,如果設備被禁用,則返回0。
該wb_inertial_unit_get_roll_pitch_yaw()
函數返回InertialUnit的當前滾動, 俯仰和偏航角。值作為3個組件的數組返回,因此只有索引0,1和2對訪問返回的數組有效。注意,索引0,1和2分別返回滾轉,俯仰和偏航角。
的輥角度指示單元的旋轉角度繞其點¯x軸,在間隔[-π,π]。的滾角為零時 InertialUnit是水平的,即,當其ÿ軸具有重力相反的方向(和WorldInfo定義 gravity
向量)。
該槳距角表示本裝置的旋轉角度大約是ž軸,在間隔[-π/ 2,π/ 2]。該槳距角為零時 InertialUnit是水平的,即,當其ÿ軸具有重力的方向相反。如果慣性單元以標准方向放置在機器人上,則 當機器人向下時,俯仰角為負,當機器人向上時,俯仰角為正。
的偏航角指示單元取向,在間隔[-π,π],相對於和WorldInfo。northDirection
。在偏航角為零時InertialUnit的點¯x軸與正北方向對齊,它為π時的零件是向東/ 2,和-π/ 2時的單元被向西定向。的偏航角可以用作一個羅盤。
注意 [C,C ++]:返回的向量是指向由Webots管理的內部值的指針,因此釋放此指針是非法的。此外,請注意,指向的值只有在下一次調用
wb_robot_step()
或 時才有效Robot::step()
。如果這些值需要較長時間,則必須復制它們。
注意 [Python]:
getRollPitchYaw()
以包含三個浮點的列表的形式返回角度。