如何調整 Kinect 底座馬達上下旋轉角度 (For Windows SDK V1)
在一般應用情況底下,Kinect 通常會被擺置在一定的高度上,
(應該很少直接被擺置在地上 ><""")
但有時擺放位置的高度不夠高時,可能在偵測影像應用時,
效果可能會有一點不太理想。
這時除了可以找東西繼續把Kinect 裝置墊高外,
還可以使用Kinect 本身具備調整角度的功能,來改變視角,調整到最佳角度。
這邊KT必須特別 Highlight出來,
目前硬體預設情況下只能調整馬達上下旋轉角度,
目前硬體預設情況下只能調整馬達上下旋轉角度,
因為之前有可愛的"萌萌"問到:
「請問KT,如何才可以調整Kinect 左右旋轉角度」、
在研討會上,有人提問:
「為何KT大大只教調整上下角度呢? 可以順便說明一下左右旋轉角度嗎?」...等,
KT感覺應該幫大家轉信給微軟Kinect小組,
好像大家有極大的渴望想要去調整左右旋轉角度。
所以這邊KT再再次的聲明:
「目前硬體預設情況下只能調整馬達上下旋轉角度」,
「目前硬體預設情況下只能調整馬達上下旋轉角度」,
所以如果你真的需要調整左右角度,
積極方法:
可以自己架設一個左右旋轉的底盤,
透過RS-232或USB發送訊號控制馬達旋轉,
透過RS-232或USB發送訊號控制馬達旋轉,
搭配Arduino板子應該可以很輕易完成這件事。
(Arduino 板子約在一千塊台幣上下)
被動作法:
發動連署提出需求,希望在下一代的Kinect可以360度旋轉。
所以在預設硬體不改變現狀情況下,KT這邊就簡單說明一下:
「如何調整 Kinect 底座馬達上下旋轉角度」
首先我們先來看一下官文說明文件裡的硬體規格表:
裡面清楚定義到可以垂直(=上下)調整+/-27的傾斜角度,
然後可以在官文說明文件手動搜尋一下"tilt",
即可以得知我們若需要去調整角度,
只需要去設定"ElevationAngle"這個屬性即可改變角度,
若想知道目前角度大小,只需去讀取"ElevationAngle"這個屬性,即可得知 。
所以KT這邊就簡單地去設計一下程式畫面:
由垂直滑桿(Slider),來調整所需的角度,
然後按儲存按鈕,即可將設定值存到ElevationAngle,
來改變Kinect 底座馬達,上下旋轉角度。
影片教學:
程式解說部分,可以參考程式註解。
XAML CODE:
C# CODE:
在beta 2說明文件中有提到:
然後可以在官文說明文件手動搜尋一下"tilt",
即可以得知我們若需要去調整角度,
只需要去設定"ElevationAngle"這個屬性即可改變角度,
若想知道目前角度大小,只需去讀取"ElevationAngle"這個屬性,即可得知 。
所以KT這邊就簡單地去設計一下程式畫面:
由垂直滑桿(Slider),來調整所需的角度,
然後按儲存按鈕,即可將設定值存到ElevationAngle,
來改變Kinect 底座馬達,上下旋轉角度。
影片教學:
程式解說部分,可以參考程式註解。
XAML CODE:
C# CODE:
using System; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using Microsoft.Kinect; namespace KinectAdjustTiltAngle_Demo { public partial class MainWindow : Window { //Instantiate the Kinect runtime. Required to initialize the device. //IMPORTANT NOTE: You can pass the device ID here, in case more than one Kinect device is connected. KinectSensor sensor = KinectSensor.KinectSensors[0]; public MainWindow() { InitializeComponent(); //宣告「視窗開啟時,將載入的函數」和「視窗關閉,將卸載的函數」 this.Loaded += new RoutedEventHandler(MainWindow_Loaded); this.Unloaded += new RoutedEventHandler(MainWindow_Unloaded); } //視窗開啟時,將載入的函數 void MainWindow_Loaded(object sender, RoutedEventArgs e) { sensor.Start();//開啟Kinect裝置 lblCurrentAngle.Content = sensor.ElevationAngle.ToString();//讀取目前Kinect的角度,秀到標籤上 } //視窗關閉,將卸載的函數 void MainWindow_Unloaded(object sender, RoutedEventArgs e) { sensor.Stop(); } private void Btn_AdjustAngle(object sender, RoutedEventArgs e) { button1.IsEnabled = false;//將按鈕設為失能(Disable),等角度整套設定完再致能(Enabled) //設定角度 if (sensor != null && sensor.IsRunning) { //將滑桿的值存到 ElevationAngle sensor.ElevationAngle = (int)slider1.Value; //讀出 Kinect目前ElevationAngl的值,然後秀在畫面標籤上 lblCurrentAngle.Content = sensor.ElevationAngle; } //不要太頻繁的去改變角度,會導致程式崩潰,所以這邊使用Sleep函數鎖死一秒,在這一秒裡面不能有任何動作 System.Threading.Thread.Sleep(new TimeSpan(hours: 0, minutes: 0, seconds: 1)); button1.IsEnabled = true;//恢復按鈕設定功能 } } }
PS.
原本在beta 2 SDK裡太頻繁的去改變角度,會導致程式崩潰,在beta 2說明文件中有提到:
V1版,好像已改善這問題,V1版的說明文件已移除這段解釋與提醒,
KT目前這邊"狂"改角度好像也不會當掉,
所以如果覺得Sleep那一段很醜,可以拿掉,
單純用按鈕(Enable和Disable)來防即可。
單純用按鈕(Enable和Disable)來防即可。
完整範例下載:
1.馬達上下旋轉角度範例
2.彩色影像+馬達上下旋轉角度範例
更多參考資料:
1.Kinect For Windows SDK V1 程式指南手冊
相關文章參考:
HKT線上教學教室 - Kinect 教學目錄