iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
自我挑戰組

盯!視覺追蹤機器人 | ROS2打造追蹤機器人系列 第 9 篇

Day 9|別再左右晃了!改善 TurtleBot3 的追蹤穩定性

  • 分享至 

  • xImage
  •  

前一天,我把畫面中的水平誤差 error_x 轉換成旋轉速度,讓 TurtleBot3 可以朝紅色目標轉向。但是機器人能夠轉向之後,又遇到一個問題:

目標明明已經很接近畫面中央,它還是會繼續做細小的左右修正。

如果之後想讓機器人用來跟拍,這樣的晃動也會影響相機畫面。所以今天先從控制方式下手,讓 TurtleBot3 不需要為了幾個像素的誤差一直轉來轉去。

為什麼接近中央還會晃動?

P 控制會根據誤差大小計算旋轉速度:

angular_z = -KP_ANGULAR * error_x

只要 error_x 不是 0,算出來的 angular_z 就可能不是 0。可是影像中的目標中心不一定每一幀都相同;即使紅色方塊看起來沒有移動,辨識出的中心位置也可能稍微變化。

當目標剛好在畫面中央附近,誤差一下是正數、一下是負數,機器人就可能跟著一下往右、一下往左。對追蹤來說,目標接近中央就已經足夠,不一定要每一幀都精準對到同一個像素。

Dead Zone(死區)

我先在畫面中央設定一個容許範圍,也就是 Dead Zone(死區)。這裡以正負 30 像素為例:

DEAD_ZONE = 30

只要 error_x 落在這個範圍內,就讓旋轉速度變成 0:

if abs(error_x) <= DEAD_ZONE:
    angular_z = 0.0

例如 error_x 是 20 或 -25,目標都還在容許範圍內,機器人不需要轉動;如果誤差超過 30 像素,再開始修正方向。

這樣可以減少目標接近中央時不必要的微調。死區也不能設得太大,否則目標已經明顯偏向一邊,機器人還是沒有反應。

調整 P 控制的 Kp

在死區之外,機器人仍然使用 P 控制決定要轉多快。這時 KP_ANGULAR 的大小,就會影響它的反應,所以調整 Kp 時,我要觀察的不只是機器人有沒有對準目標,還要看它會不會反覆左右轉,以及目標移動時能不能跟上。

最大角速度限制

如果目標離畫面中心很遠,error_x 也會變大。直接用 P 控制計算時,旋轉速度可能跟著變得太高,讓機器人突然轉得很快。

因此,我再設定最大角速度 MAX_ANGULAR_SPEED,把算出的速度限制在固定範圍內:

angular_z = max(
    -MAX_ANGULAR_SPEED,
    min(MAX_ANGULAR_SPEED, angular_z)
)

假設算出的速度超過上限,就只使用上限值;負方向也是一樣。這樣即使目標出現在畫面邊緣,機器人也不會因為誤差很大就一直加快旋轉。

目前先限制旋轉速度的上限,如果之後仍然出現突然急轉的情況,還可以再研究加速度限制或速度平滑的方法。

整合三項設定

程式中的轉向邏輯可以整理成:

if abs(error_x) <= DEAD_ZONE:
    angular_z = 0.0
else:
    angular_z = -KP_ANGULAR * error_x

    angular_z = max(
        -MAX_ANGULAR_SPEED,
        min(MAX_ANGULAR_SPEED, angular_z)
    )

這段程式的順序是:先判斷目標是否已經接近中央;如果還沒有,再用 P 控制計算轉速,最後限制最大旋轉速度。

可以把它理解成:

目標接近中央 → 暫時不轉
目標偏離中央 → 根據誤差轉向
算出的速度太快 → 限制在最大角速度內

測試方式與觀察重點

修改完之後,還需要在 Gazebo 中觀察追蹤時的表現。我會特別注意:目標在中央附近時,機器人是否仍然左右晃動;目標移向兩側時,機器人能不能及時跟上;以及轉向時會不會突然太快或轉過頭。

如果反應太慢,可以再檢查死區是否太大、Kp 是否太小;如果還是容易轉過頭,則可以調整 Kp 或最大角速度。這些參數沒有一組適合所有情況的數字,還是要根據實際畫面慢慢調整。

今天的流程

  1. 觀察 P 控制下,目標接近中央時仍然持續微調的問題。
  2. 加入 Dead Zone,讓小範圍誤差不觸發轉向。
  3. 調整 KP_ANGULAR,觀察反應速度與轉過頭的情況。
  4. 加入 MAX_ANGULAR_SPEED,限制機器人的最大旋轉速度。
  5. 在模擬環境中觀察追蹤效果,再依照實際情況調整參數。

這次調整的目標,是讓 TurtleBot3 在需要轉向時能跟上目標,目標已經接近中央時也能安靜一點。畢竟紅色方塊只是在畫面前晃一下,不用每次都讓機器人跟著搖頭。

NEXT

目前主要處理的是左右轉向。接下來可以繼續思考:當 TurtleBot3 已經對準目標後,要怎麼判斷是否需要往前移動,以及前進時如何維持追蹤的穩定性。


上一篇
Day 8|看你往哪跑!用 P 控制讓 TurtleBot3 對準目標
下一篇
Day 10|追!讓 TurtleBot3 知道什麼時候前進
系列文
盯!視覺追蹤機器人 | ROS2打造追蹤機器人 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言