如何調整 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單字

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

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

nano 文字編輯器

【從零開始學 Flutter 程式設計】SharedPreferences 設定檔資料存取