如何調整 Kinect 底座馬達上下旋轉角度 (For Windows SDK V1)

Photobucket

在一般應用情況底下,Kinect 通常會被擺置在一定的高度上,
(應該很少直接被擺置在地上 ><""")

但有時擺放位置的高度不夠高時,可能在偵測影像應用時,

效果可能會有一點不太理想。

這時除了可以找東西繼續把Kinect 裝置墊高外,

還可以使用Kinect 本身具備調整角度的功能,來改變視角,調整到最佳角度。

這邊KT必須特別 Highlight出來,


目前硬體預設情況下只能調整馬達上下旋轉角度

因為之前有可愛的"萌萌"問到:

「請問KT,如何才可以調整Kinect 左右旋轉角度」、

在研討會上,有人提問:

「為何KT大大只教調整上下角度呢? 可以順便說明一下左右旋轉角度嗎?」...等,

KT感覺應該幫大家轉信給微軟Kinect小組,

好像大家有極大的渴望想要去調整左右旋轉角度。

所以這邊KT再再次的聲明:

「目前硬體預設情況下只能調整馬達上下旋轉角度」

所以如果你真的需要調整左右角度,

積極方法:
可以自己架設一個左右旋轉的底盤,
透過RS-232或USB發送訊號控制馬達旋轉,
搭配Arduino板子應該可以很輕易完成這件事。
(Arduino 板子約在一千塊台幣上下)

被動作法:
發動連署提出需求,希望在下一代的Kinect可以360度旋轉。



所以在預設硬體不改變現狀情況下,KT這邊就簡單說明一下:

「如何調整 Kinect 底座馬達上下旋轉角度」

首先我們先來看一下官文說明文件裡的硬體規格表:

Photobucket

裡面清楚定義到可以垂直(=上下)調整+/-27的傾斜角度,

然後可以在官文說明文件手動搜尋一下"tilt",
Photobucket

即可以得知我們若需要去調整角度,

只需要去設定"ElevationAngle"這個屬性即可改變角度,

若想知道目前角度大小,只需去讀取"ElevationAngle"這個屬性,即可得知 。

所以KT這邊就簡單地去設計一下程式畫面:
由垂直滑桿(Slider),來調整所需的角度,
然後按儲存按鈕,即可將設定值存到ElevationAngle,
來改變Kinect 底座馬達,上下旋轉角度。
Photobucket

影片教學:


程式解說部分,可以參考程式註解。

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說明文件中有提到:
Photobucket

V1版,好像已改善這問題,V1版的說明文件已移除這段解釋與提醒,

KT目前這邊"狂"改角度好像也不會當掉,

所以如果覺得Sleep那一段很醜,可以拿掉,

單純用按鈕(Enable和Disable)來防即可。

完整範例下載:
1.馬達上下旋轉角度範例


2.彩色影像+馬達上下旋轉角度範例


更多參考資料:
1.Kinect For Windows SDK V1  程式指南手冊


相關文章參考:
HKT線上教學教室 - Kinect 教學目錄

這個網誌中的熱門文章

16天記下7000單字

nano 文字編輯器

Android Studio 歷代版本下載點

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)

ProGuard 程式碼混淆保護