<source : greatway9999>

一、重點摘要


此範例為KNR機器人中的 RC Servo Motor Example,接下來的內容將針對其中的各個參數進行重點摘要。


IP : 

代表是透過什麼方式來連接 KNR 主機。若是 KNRm_USB,則代表以USB的方式連接 KNR 主機;若是 KNR ,則為以WiFi方式連接 KNR 主機。


Resource:

代表KNR內部FPGA配置的功能狀態,D代表DC motor(直流馬達)、R代表RC servo motor(伺服馬達)、C代表I2C。


RC Pulse Width (uS) : 

脈波寬度,也就是 Duty Cycle High寬度,通常值介於 700 ~ 2300,可控制Servo Motor的角度為 0 ~ 180 度。



二、程式重點摘要

情境一:手動控制伺服馬達




情境二:撰寫讓機器人重複左右擺頭(伺服馬達反覆進行從0度到180度)的動作之思維邏輯


為達連續動作的目的,因此程式會以迴圈的架構進行。

因為脈波寬度值介於700~2300,控制的角度為0~180度,剛好符合本例的要求。因此,將700~2300的脈波寬度值分成180等份。

註:未來若有其他角度的需求,再修改對應的脈波寬度值範圍即可。

迴圈上的 i 代表計數,會從0開始算起,在此例中代表角度。因為我們控制的角度是0~180,所以為了滿足我們的需求,我們會將 i 除以 180,取餘數,確保每個值都會落在0~180。

把除以180後的 i 乘上對應的脈波比例,再加上脈波的最小值 (此例是700),即可得到對應的脈波值。


步驟整理如下:

步驟1. 建立一個For Loop架構

步驟2.將脈波寬度範圍除以所需角度 (0~180)

步驟3.將計數範圍限定在所需角度範圍內 (0~180)


程式實現如下 :


情境三:影像追瞄

步驟1.馬達位置初始化

養成良好習慣,讓每次馬達執行任務時都能從工作原點開始。此例的工作原點脈波寬度為1500,對應角度為90度。

步驟2.影像處理 - 取最大面積


步驟3.物體中心跟影像中心有差,則調整

為了讓相機能跟著目標物件移動,原理很簡單。就是畫面中心點的x和y值 - 目標物件中心點的x和y值,其變化量乘上脈波寬度,即可控制馬達隨著目標物件移動而移動。


步驟4.參考機構,設定避免碰撞的角度

承上點,要考量到馬達在運動時會不會與周遭碰撞,因此值會在 700 ~ 2300 間調整。


步驟5.增加若沒辨識到則停留在當前位置的條件

如果沒有偵測到位置,馬達不一定會停在預想的位置,所以為了讓結果更完善,增加了一個條件判斷 : 當未辨識到目標物件時,停在當前位置。

執行後,就可以看到相機鏡頭隨著目標物而移動。如下圖。


---

參考資料 :

0 留言