ROS – 人體姿態追蹤

最近慢慢把之前做的東西寫起來,雖然可能許多專案並不一定很有價值,但怕太久就忘記了,當作個紀錄就好了。

基本上要作到人體姿態的追蹤都是需要 3D camera,以前比較有名的應該是 Kinect,後來出了 Kinect2;蠻好用的應該是 ASUS Xtion Pro,只是後來被收購了;又比較最近的是 Intel 的 RealSense ,分為長距和短距兩種;還有一些廠家有做,但可能就沒那麼有名了。而軟體的部份現在大部份用的都是 OpenNI,當然直接使用原廠的 SDK 也行,不過就不多做介紹了。有關 OpenNI 的額外資訊其實大部份都是從部落格看來的,算是淺顯易懂。 OpenNI 主要是做 3D camera 的驅動,至於另外要做姿態追蹤,則需要使用另一個資料庫叫做 Nite2。由於專案主要跑在 ROS 之下,所以主要參考的程式碼是這個。另外補充一個可能會遇到的問題

有了基本的元素以後,之後要做的就比較簡單了,我的目的是要讓 3D camera 捕捉到人體的姿態,並依據姿態去驅動我的機器人做相對應的動作,這邊預設是模仿人體動作。

之後分析問題:有 3D camera 和 OpenNI2 後可以拿到深度影像,配合 Nite2 可以拿到每個關節的座標,那我只需要知道我機器人的可動自由度,對應上關節座標以後就可以算出對應馬達需要轉的角度,這邊很直覺,直接最後的程式碼

這個專案還是寫得很亂,另一個主要思路是防呆功能,要是一時之間沒有抓到人體的姿態,那機器人要怎麼動作?這邊用的方法是當操作者的姿態和機器人相似時,才會觸發追蹤功能,也就是說人體關節角度和機器人的關節角度要在一定的範圍內才會動作。兩隻手分開在不同的偵測迴圈,讓使用者可以分開操控,最後的結果有點差強人意,可能要多試幾次,動作慢一點才能順利模仿使用者的動作。

 

發表留言