ZED 景深攝影機範例#7/8 – Using sensors

本文為 ZED 景深攝影機原廠範例,共有八個範例,請根據 ZED 的範例程式頁面,取得 C++ / Python / C# 等範例原始碼。說明如下:

  1. Hello ZED: 入門範例,說明如何連接 ZED 攝影機,並於終端機中顯示裝置序列編號。
  2. Image Capture: 開啟 ZED 攝影機,取得影像,並於終端機中顯示時間戳記、影像尺寸。
  3. Depth Perception: 取得畫面的深度資料與點雲,並於終端機中顯示指定點的距離。
  4. Camera Tracking: 啟用位置追蹤,可即時更新攝影機的位置與指向。
  5. Spatial Mapping: 啟用地圖繪製,可擷取環境的網格或融合點雲。
  6. 3D Object Detection: 偵測畫面中的物體,並進行 3D 定位 (只適用於 ZED 2 機型)。
  7. Using Sensors: 取得攝影機的 IMU、氣壓計與磁力感測器資料。
  8. Body Tracking: 追蹤人體骨架

範例07 – 取得感測器資料

本範例將說明如何取得 ZED 3D cameras (ZED 2, ZED Mini) 上的 IMU、氣壓與磁力感測器資料。本範例會持續執行5秒鐘來取得感測器資料,並將相關數值顯示於終端機。以下圖片來自 ZED 原廠文件

前置作業

  • 下載最新版的 ZED SDK請點我
  • 下載 Image Capture 範例程式,提供 C++, Python 與 C# 等版本
  • 在 Windows 或 Linux OS上,建置 C++ 環境(請點我) 或執行 Python 範例,本系列文章將使用 Python (教學請點我

程式總覽

開啟攝影機

如先前範例,首先要建立、設定並開啟 ZED 3D攝影機。由於本範例不會用到深度資訊,請用 DEPTH_MODE::NONE 來停用深度擷取功能。

[pastacode lang=”python” manual=”%23%20Create%20a%20ZED%20camera%20object%0Azed%20%3D%20sl.Camera()%0A%0A%23%20Set%20configuration%20parameters%0Ainit_params%20%3D%20sl.InitParameters()%0A%23%20No%20depth%20computation%20required%20here%0Ainit_params.depth_mode%20%3D%20sl.DEPTH_MODE.NONE%0A%0A%23%20Open%20the%20camera%0Aerr%20%3D%20zed.open(init_params)%0Aif%20err%20!%3D%20sl.ERROR_CODE.SUCCESS%20%3A%0A%20%20%20%20print(repr(err))%0A%20%20%20%20zed.close()%0A%20%20%20%20exit(1)” message=”open the camera” highlight=”” provider=”manual”/]

取得感測器資料

您可由 SensorsData 類別來取得攝影機上各感測器的資料。請用 getSensorsData() 語法取得感測器資料,如下:

[pastacode lang=”python” manual=”sensors_data%20%3D%20sl.SensorsData()%0Awhile%20zed.grab()%20%3D%3D%20sl.ERROR_CODE_SUCCESS%3A%0A%20%20%20%20zed.get_sensors_data(sensors_data%2C%20sl.TIME_REFERENCE.CURRENT)” message=”capture sensor data” highlight=”” provider=”manual”/]

在此使用 sl.TIME_REFERENCE.CURRENT 來取得各感測器的最新可用資料。也可用其他語法取得同時接近攝影機最新影像時間點的感測器資料。

更多關於參考時間請參考 Time Synchronization 文件。

更新感測器資料

由於攝影機上的各感測器的採樣速度各有不同,因此資料更新頻率當然也不同。為了得知指定感測器是否已更新,就會比較其時間戳記(作為唯一辨識子)。如果相同代表感測器資料未更新。

本範例將使用 TimestampHandler 基礎類別來儲存時間戳記並檢查資料更新狀態。

[pastacode lang=”python” manual=”ts_handler%20%3D%20TimestampHandler()%0Aif%20ts_handler.is_new(sensors_data.get_imu_data())%3A%0A%20%20%20%20%23%20sensors_data.get_imu_data()%20contains%20new%20data” message=”store timestamps and check for data update” highlight=”” provider=”manual”/]

如果有新的資料,就顯示於終端機:

[pastacode lang=”python” manual=”%23%20Check%20if%20IMU%20data%20has%20been%20updated%0Aif%20ts_handler.is_new(sensors_data.get_imu_data())%3A%0A%20%20%20%20quaternion%20%3D%20sensors_data.get_imu_data().get_pose().get_orientation().get()%0A%20%20%20%20print(%22IMU%20Orientation%3A%20%7B%7D%22.format(quaternion))%0A%20%20%20%20linear_acceleration%20%3D%20sensors_data.get_imu_data().get_linear_acceleration()%0A%20%20%20%20print(%22IMU%20Acceleration%3A%20%7B%7D%20%5Bm%2Fsec%5E2%5D%22.format(linear_acceleration))%0A%20%20%20%20angular_velocity%20%3D%20sensors_data.get_imu_data().get_angular_velocity()%0A%20%20%20%20print(%22IMU%20Angular%20Velocity%3A%20%7B%7D%20%5Bdeg%2Fsec%5D%22.format(angular_velocity))%0A%0A%23%20Check%20if%20Magnetometer%20data%20has%20been%20updated%0Aif%20ts_handler.is_new(sensors_data.get_magnetometer_data())%3A%0A%20%20%20%20magnetic_field_calibrated%20%3D%20sensors_data.get_magnetometer_data().get_magnetic_field_calibrated()%0A%20%20%20%20print(%22Magnetometer%20Magnetic%20Field%3A%20%7B%7D%20%5BuT%5D%22.format(magnetic_field_calibrated))%0A%0A%23%20Check%20if%20Barometer%20data%20has%20been%20updated%20%0Aif%20ts_handler.is_new(sensors_data.get_barometer_data())%3A%0A%20%20%20%20magnetic_field_calibrated%20%3D%20sensors_data.get_barometer_data().pressure%0A%20%20%20%20print(%22Barometer%20Atmospheric%20pressure%3A%20%7B%7D%20%5BhPa%5D%22.format(sensors_data.get_barometer_data().pressure))” message=”display new data in console” highlight=”” provider=”manual”/]

一般來說,您應該不需要檢查感測器是否可用。如果感測器不可用的話,其資料會包含 NAN 且時間戳記為 0

關閉攝影機

順利取得感測器資料之後,別忘了在結束程式之前關閉攝影機。

[pastacode lang=”python” manual=”%23%20Close%20the%20camera%0Azed.close()” message=”close the camera” highlight=”” provider=”manual”/]

下一步

您現在已經知道如何由 ZED 2 / ZED Mini 立體攝影機取得感測器資料了,更多資訊請參考以下文件:

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *