Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1725761
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: LINUX

2016-02-17 11:37:06

这翻译自pixhawk官网,不敢私有,奉献于大家。我外语一般。所以肯定有不合理的地方。大家感觉哪正确,联系修改。

如何在px4实施恒定采样率的控制

下面是来自px4users组的。。。。

我问自己如何向高级选择算法那样运行这些需要恒定采样率的apps。我发现所有的模块(和控制器)没有一个恒定的采样率,而是在topic上等待需要的数据被published。并且我感觉“hrt_call_”系列函数也不是最适合控制器应用的方式,你有更好的提议吗?

 

在一个控制系统里有两个基本的时序要求:更新速率和延时

为了获得一个好的系统性能,你必须最小化延时,在很多场合,延时比更新率更重要,因为大延时会产生相移。

 

你可以控制钟摆以1HZ的来回摆动来更新数据,没有1秒的延时。因为延时的相位会给你一个错误的提示。所以与其坚持一个固定的频率,不如把我们的注意力放在延时上。固定频率的控制循环有时候真的有很差的延时。例如:

假设你以100hz的速度采集传感器值,估算也是100hz,其它控制器也是100Hz,你是否会认为最坏的延时一步输入时10ms呢?实际上不是10ms,如果你使用自由循环,延时是出于10ms—29.99ms中的随机数值。因为每个循环都可以错过下一个循环的一小部分。

Sensors runs at 10ms 20ms 30ms and so on

Estimator runs at 9ms 19ms 29ms and so on

Controller runs at 8ms 18ms 28ms and so on

比如某时刻你的系统正处于1ms时刻,那么还有9ms才进行sensors的采集,那么estimator需要18ms才能看见这次的数据,而controller需要27ms才能看见数据。在nshshell,如果有三个这样的序列,那真是糟透的设计。

         其实我们需要的是按顺序执行所有的步骤。那是否可以把它们挤在一个main循环里呢,那将也是一个很糟的设计。首先这不是一个灵活的可扩展的架构。并且也不符合实际,为何呢?因为我们需要支持不同的速率要求,还有当多个控制器运行时,其它快速的控制器不能并发。如我们sensors采样率是1000Hz,有的控制器运行速率是250Hz,有的是50Hz。我们不想在他们之间有任何延时。

         px4系统的延时优化如何呢?在每次sensors采样后立即运行估算和控制器。你可以在代码中主循环中的poll看到这一实现。这一实现的最大优势是在wait期间,没有cpu负荷。这对于恒定采样率意味着什么呢?传感器时钟由高精度定时器提供,他们的时序很准确。我们采用这个恒定采样率来作为系统其它部分的时钟。这样你就有一个恒定采样率了。

         而实际使用情况是:如果你想建立一个好的控制系统,你只需要调整sensors的采样时序即可。而不是调整系统的时序。这样系统还提供每隔几次运行某功能的机制,如sensors的采样率更新为250hz,你只要按照比例运行其它就可以啦。

         如果你仔细查看你使用的具体的控制器,除了MPC解决方案。大部分方案中dt是系统的一个控制系数。这样你需要的不是一个恒定的采样率,而是测量dt。当然对于你的调整,你需要尽量调整精确的,尽量与真实dt接近的dt值来满足你设计的系统需要。如果你想使用MPC控制器,你仍然可以选择几个sensors采样周期为你的设计时序,一般也会取得很精确的计时。

阅读(3133) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~