基於二階濾波方法的遙控信號平滑處理
使用遙控器控制機器人運動時,若將遙控信號直接轉換爲速度信息,常常會引起機器人的急加/減速。這主要是由於遙控信號存在階躍特性(如速度從0.1m/s突然增大到0.2m/s),大的階躍信號直接作用於電機時,瞬時加/減速度較大,使得整車運動不夠平順。因此本文對遙控信號進行濾波後作用於電機,達到速度平滑的作用。
阻尼器
所謂濾波,即對信號進行平滑。對於遙控信號,可理解爲在信號輸入時增加阻尼器,阻尼器使得響應滯後,達到濾波效果。對於阻尼器的設計,輸入是階躍信號,研究阻尼器系統對階躍信號的響應即可。
理想響應過程
理想響應過程如下圖所示:
系統的響應過程加加速度和加減速度階段互相對稱,且加速度連續變化,速度較爲平滑,可使用sigmoid函數進行變換:
其中爲座標偏移。
然而由於sigmoid函數無法進行拉氏變換,因此無法使用其特性進行濾波。
一階系統
一階系統傳遞函數:
系統階躍響應如下圖所示:
從響應曲線來看,在加速度過程中,加速度在0時刻存在瞬間突變,其他過程爲加減速過程,可能導致最終速度的不連貫性。
二階系統
二階系統傳遞函數爲:
設定阻尼比,系統處於臨界阻尼狀態。系統階躍響應如下圖所示:
從圖中可以看出,相較於一階系統,加速度曲線無突變,呈現連續變化的趨勢;與sigmod函數相比,加加速度和加減速度過程不對稱,達不到理想狀態。
實現
本文使用C++進行實現,在ROS上觀察效果。
實現時,阻尼器使用IIR濾波器結構,源碼參照IIR濾波器的C++實現
遙控端使用turtlebot3_teleop節點,接收節點爲filter_node。
首先在code目錄下,使用catkin_make進行編譯。然後啓動turtlebot3_teleop節點:
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
接着啓動接收節點
roslaunch filter_node filter_node.launch
通過PlotJuggler進行數據查看,加速和加減速過程響應曲線如下圖所示:
源碼見github源碼.