Kinect開發筆記之七Visual Studio結合C#調控Kinect俯仰角度

總感覺自己前面啰啰嗦嗦寫了好多,卻一直都沒有使用用開發kinect的重型武器——Visual Studio。

那么本次我們就借助于Visual Studio,寫一個C#程序,連接Kinect并調用Kinect SDK標準函數庫來改變Kinect的俯仰角。

首先我們打開VS創建一個項目。選擇Visual C#下面的Windows,然后選擇控制臺應用程序,命名為Kinect_Controller,選擇你自己的保存路徑。

建完之后,來到解決方案資源管理器。找到引用,右鍵——添加引用,在彈出的引用管理器中,右上角直接搜索Kinect,勾選MicrosoftKinect 1.8.0.0,然后點擊確定。

如果組件引用設置正常的話,我們就可以在引用下面看到Kinect的相關組件。

接下來是我們的主程序。先在這里把全部的代碼貼出來再解釋。

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Kinect;
using System.Threading;namespace Kinect_Controller
{class Program{static void Main(string[] args){KinectSensor sensor = KinectSensor.KinectSensors[0];if (sensor == null){Console.WriteLine("找不到任何可用的Kinect裝置,程序退出");return;}sensor.Start();//獲取連接在PC上的第一個傳感器并且啟動sensor.ElevationAngle = 0;//俯仰角度恢復到零度Console.WriteLine("Kinect已啟動,空格鍵退出");Console.WriteLine("現在角度為" + 0);ConsoleKey press;//向上箭頭加5度,向下箭頭減5度,并內置最大最小角度檢測while((press = Console.ReadKey().Key)!= ConsoleKey.Spacebar){if (press == ConsoleKey.DownArrow){if (sensor.ElevationAngle - 5 < sensor.MinElevationAngle)sensor.ElevationAngle = sensor.MinElevationAngle;elsesensor.ElevationAngle = sensor.ElevationAngle - 5;}else if(press == ConsoleKey.UpArrow){if (sensor.ElevationAngle + 5 > sensor.MaxElevationAngle)sensor.ElevationAngle = sensor.MaxElevationAngle;elsesensor.ElevationAngle = sensor.ElevationAngle + 5;}Thread.Sleep(1000);Console.WriteLine("現在角度為"+ sensor.ElevationAngle);}sensor.Stop();}}
}

下面我們來從上向下詳細解釋一下代碼。
(1)我們在最上方加入了兩個命名空間。
using Microsoft.Kinect;//告知編譯程序使用該命名空間,所有的用C#寫的Kinect程序都需要如此。
using System.Threading;//程序中使用了Thread方法,所以要引入此命名空間。

(2)獲得傳感器
KinectSensor sensor = KinectSensor.KinectSensors[0];
直到sensor.Start();這一代碼段,是要獲取與pc連接的第一個Kinect傳感器。如果為空,則輸出”找不到任何可用的Kinect裝置,程序退出”,若不為空,則啟動Kinect。

(3)重置角度
Kinect的俯仰角度可能因為人為原因或者程序原因初始情況并不位于零度,所以啟動Kinect后,我們首先要重置Kinect的角度。使用sensor.ElevationAngle = 0,并且輸出兩句話來說明我們的程序。

(4)結合邊界機制上下方向鍵調節角度
因為Kinect中角度俯仰范圍為-27~27,所以我們要加入檢測機制。
這個并不困難,原理是讀入的按鈕如果是上方向鍵(下方向鍵),角度如果加5度(減5度)后不超過最大角度那么是安全的,如果將會超過,那么就讓它的角度等于最大角度。

sensor.MinElevationAngle和sensor.MaxElevationAngle分別是-27和+27。

并且在調整角度后,輸出當前的角度,以提醒操作者

(5)退出
while((press = Console.ReadKey().Key)!= ConsoleKey.Spacebar)
這是while的條件,所以當我們按下空格的時候,會跳出轉而直接執行sensor.Stop()退出程序。

(6)注意事項以及存在的問題
Kinect for Windows 1.0的官方文檔中提到,1秒鐘內最多改變一次角度,連續改變15次后,系統將強制休息20秒以防止電機過熱,這也是為什么我們會引入Thread(1000)的原因,就是契合這一要求讓Kinect得到充分的休息和冷卻。

因為這一點,我們的程序本身就難免會存在一些問題,如果你按下上下方向鍵的頻率快于一秒,鍵盤的輸入會累積在緩沖區等待處理,因為我們的設定是等一秒,處理一次。這會造成很大的延遲和卡頓。我們可以根據需要做一些優化處理,即在沉睡的1秒內,將鍵盤輸入無效化,這一次我們先不做深入討論,因為寫博文的時候,我的C#也是有點兒慘不忍睹的。

最后一個是.NET組件版本的問題,默認情況下,VS認為你的程序需要綁定特定版本的.NET組件。這樣就會造成組件升級后,VS找不到原來版本的組件而無法編譯。所以在解決方案資源管理器中,選中Microsoft.Kinect右鍵——屬性,特定版本改為False就可以了。

下面來自己跑一跑這個Kinect程序,運行結果如下。

注:博文中代碼參考并修改自《Kinect體感程序設計入門》。

2015.3.25 10:05
By Mr.Losers

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277625.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277625.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop HDFS常用文件操作命令

命令基本格式: hadoop fs -cmd < args >1.ls hadoop fs -ls /列出hdfs文件系統根目錄下的目錄和文件 hadoop fs -ls -R /列出hdfs文件系統所有的目錄和文件 2.put hadoop fs -put < local file > < hdfs file >hdfs file的父目錄一定要存在&#xff0c;否則…

定量庫存控制模型_探索全面流動管理TFM 庫存控制與低減的理性策略

庫存乃萬惡之源庫存不僅占用了資金&#xff0c;還占用了各種管理性資源&#xff0c;形成了“財務性顯性成本“而且過多的庫存導致“緩沖區”的存在&#xff0c;還使得各類問題變得不那么緊迫&#xff0c;從而掩蓋了各類隱藏的問題&#xff0c;這被稱為“隱形成本”零庫存不僅做…

android studio更新之后打包遇到V1(Jar Signature)、 V2(Full APK Signature)問題

昨天更新了android studio 打包時遇到兩個勾選框&#xff0c;于是開始了解… 問題 剛開始默認是勾選 V2&#xff08;Full APK Signature&#xff09;&#xff0c;然后我就打包去測試先了&#xff0c;發現安裝失敗。之后發現與簽名有關系。 發現 android 7.0中引入了APK Signatu…

C#——一個簡單的文件管理器

最近在緊張的學習C#&#xff0c;說實話對C#之前沒有太多的接觸過&#xff0c;只知道C#的特性與java很相似&#xff0c;接觸了之后才發現C#跟java相比區別不是很多&#xff0c;但它是一門實現程序能力比Java還要好的語言&#xff08;僅代表個人觀點&#xff09;。 有許多新手在…

關于epoll,select,poll的理解

select: 輪詢fd_set 1.采用fd_set存儲fd&#xff08;fd_set通過數組位圖實現&#xff09; 2.每次調用select&#xff0c;都需要把fd集合從用戶態拷貝到內核態&#xff0c;fd越多開銷越大 3.每次調用select&#xff0c;都需要在內核遍歷傳遞進來的fd&#xff0c;開銷大(輪詢&…

kali linux超級用戶_如何優雅的在Linux上使用Powershell]

點擊上方“藍字”關注我們吧&#xff01;譯文聲明本文是翻譯文章&#xff0c;文章原作者 TJ Null文章來源&#xff1a;https://www.offensive-security.com原文地址&#xff1a;https://www.offensive-security.com/offsec/kali-linux-powershell-pentesting/譯文僅供參考&…

Laravel5.5 MySQL配置、讀寫分離及操作

2019獨角獸企業重金招聘Python工程師標準>>> Laravel 讓連接不同數據庫以及對數據庫進行增刪改查操作: 參考&#xff1a;http://laravelacademy.org/post/854.html 配置讀寫分離 應用的數據庫配置位于 config/database.php&#xff08;但是數據庫用戶及密碼等敏感信…

Kinect開發筆記之八C#實現Kinect聲音的追蹤

聲明&#xff1a;本文中特征多針對Kinect for windows 1.0&#xff0c;新版的Kinect Sensor可能有部分數值或方法有一定變化&#xff0c;請知曉。Kinect的聲音來自下方的4個麥克風組成的麥克風陣列。傳感器內含數字信號處理器&#xff0c;可以用來強化接受聲音的清晰度同時處理…

Nginx常見配置:負載均衡、限流、緩存、黑名單和灰度發布

一、Nginx安裝&#xff08;基于CentOS 6.5&#xff09; 1.yum命令安裝 yum install nginx –y(若不能安裝&#xff0c;執行命令yum install epel-release) 2. 啟動、停止和重啟 service nginx startservice nginx stopservice nginx restart瀏覽器中 輸入服務器的 ip 地址&…

國服服務器_《Minecraft我的世界》第三方服務器的基本儲備

今天我想單獨來聊一聊Minecraft我的世界第三方服務器的發展。世外荒原玩家作品我來到頭條的第一篇文章就發表了一篇我對Minecraft現狀的看法&#xff0c;現在國服的狀態對老玩家不是很友好。(這不說明國服的運營戰略路線是有問題的)因此誕生了一大堆第三方服務器。世外荒原玩家…

Unity中Time.deltaTime的含義及其應用

相信Unity的開發者或者初學者都對Time.deltaTime并不陌生&#xff0c;我們經常會在代碼中用到或者看到它&#xff0c;今天去官方的API文檔查了一下&#xff0c;感覺它非常有用&#xff0c;所以翻譯一下以引導初學者。 原文網址&#xff1a; file:///Applications/Unity/Unity…

unity3d曲線text文本

測試.pngusing System; using System.Collections.Generic;namespace UnityEngine.UI.Extensions {/// <summary>/// Curved text.讓文本按照曲線進行顯示 【注意對Image的變形 也是可以的】/// 說明&#xff1a; 對Text的操作就和 shadow 和 outline 組件類似。/// <…

HTML 和CSS

1 HTML 介紹1.1 web 服務本質import socket sk socket.socket() sk.bind(("127.0.0.1", 8080))sk.listen(5) while True: conn, addr sk.accept() data conn.recv(8096) conn.send(b"HTTP/1.1 200 OK\r\n\r\n") conn.send(b"<h1>Hello world…

Unity中Quaternion的含義及其使用

官網API文檔&#xff1a; file:///Applications/Unity/Unity.app/Contents/Documentation/html/en/ScriptReference/Quaternion.html Quaternion的意思是四元數&#xff0c;用于代表旋轉。 它們是緊致的&#xff0c;不會產生萬向節死鎖并且能夠很容易被插值。Unity內使用Quat…

Python PIPEs

2019獨角獸企業重金招聘Python工程師標準>>> https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm 轉載于:https://my.oschina.net/zungyiu/blog/1860857

延時消息_Handler的消息延時是怎么實現的

消息延時做了什么特殊處理&#xff1f;是發送延時&#xff0c;還是消息處理延時&#xff1f;延時的精度如何&#xff1f;通常我們使用Handler的消息延時都是調用sendMessageDelayed函數實現的&#xff0c;其中delayMillis是需要延時的毫秒。通過跟蹤sendMessageDelayed函數可以…

5月JC學習總結

斷劍重鑄之日&#xff0c;王者歸來之時。為了更美好的明天而戰。 五月 悄悄地過了 人兒 不覺中散了 攜著一腔熱血&#xff1b;來到蛟川 來到機房 微涼的輕風&#xff0c;無聲地去了 熾熱的驕陽&#xff0c;即將要落了 站在4樓&#xff0c;向窗外眺望&#xff0c;映出的不是夕陽…

4 關卡流 進階_全息武器全解析,記住4個點全區第一就是你!

實不相瞞&#xff0c;每次看著全息武器糖糖都感覺自己像鋼鐵俠高端大氣上檔次&#xff0c;低調奢華有內涵那么問題來了&#xff01;這個全息武器究竟該怎么玩才能成為真正的鋼鐵俠&#xff1f;我的使命之全息武器【作者&#xff1a;D38激戰阿曼——潛龍小生】全息武器在屬性增加…

terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr

運行時報錯&#xff1a; terminate called after throwing an instance of std::out_of_rangewhat(): basic_string::substr&#xff1a;__pos Aborted (core dumped) 內存讀取越界。 解釋1&#xff1a;for example:const std::string sTest( "test" );sTest.substr…

記一次理想浪漫的畢旅

因為臨近畢業離別的氛圍和閑散的生活&#xff0c;雖然手頭積攢了不少可寫的素材和教程&#xff0c;但還是兩個月沒有在CSDN更新博客。論文答辯之后&#xff0c;我只是每天在宿舍玩玩電腦、打打撲克&#xff0c;唯一讓我難受的是&#xff0c;隔幾天便送走一位同窗好友。有時甚至…