基于二阶滤波方法的遥控信号平滑处理

基于二阶滤波方法的遥控信号平滑处理

使用遥控器控制机器人运动时,若将遥控信号直接转换为速度信息,常常会引起机器人的急加/减速。这主要是由于遥控信号存在阶跃特性(如速度从0.1m/s突然增大到0.2m/s),大的阶跃信号直接作用于电机时,瞬时加/减速度较大,使得整车运动不够平顺。因此本文对遥控信号进行滤波后作用于电机,达到速度平滑的作用。

阻尼器

所谓滤波,即对信号进行平滑。对于遥控信号,可理解为在信号输入时增加阻尼器,阻尼器使得响应滞后,达到滤波效果。对于阻尼器的设计,输入是阶跃信号,研究阻尼器系统对阶跃信号的响应即可。

理想响应过程

理想响应过程如下图所示:
在这里插入图片描述

系统的响应过程加加速度和加减速度阶段互相对称,且加速度连续变化,速度较为平滑,可使用sigmoid函数进行变换:

f ( x ) = 1 1 + e x − b f(x)=\frac{1}{1+e^{x-b}} f(x)=1+exb1
其中 b b b为坐标偏移。
然而由于sigmoid函数无法进行拉氏变换,因此无法使用其特性进行滤波。

一阶系统

一阶系统传递函数:
G ( s ) = a s + a G(s)=\frac{a}{s+a} G(s)=s+aa
系统阶跃响应如下图所示:
在这里插入图片描述

从响应曲线来看,在加速度过程中,加速度在0时刻存在瞬间突变,其他过程为加减速过程,可能导致最终速度的不连贯性。

二阶系统

二阶系统传递函数为:
G ( s ) = w n 2 s 2 + 2 ξ w n s + w n 2 G(s)=\frac{w^2_n}{s^2+2\xi w_ns+w^2_n} G(s)=s2+2ξwns+wn2wn2
设定阻尼比 ξ = 1 \xi=1 ξ=1,系统处于临界阻尼状态。系统阶跃响应如下图所示:
在这里插入图片描述

从图中可以看出,相较于一阶系统,加速度曲线无突变,呈现连续变化的趋势;与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源码.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值