【发布时间】:2023-02-22 03:55:48
【问题描述】:
我正在尝试对 e-puck 机器人上的接收器模块进行编程,以从多个发射器模块接收数据包及其相关信号强度。
我面临的问题是,当接收到新数据时,以前的数据包(尚未读取)丢失了(请参阅https://cyberbotics.com/doc/reference/receiver#field-summary 中的 bufferSize)。这意味着当 Webots 运行接收器模块的控制器时,只有来自最新发射器的数据存储在缓冲区中,并且所有其他数据(来自其他发射器)在控制器甚至有机会读取之前就已经丢失。
我尝试了几个不同的选项,但似乎都不起作用:
异步运行接收器控制器(通过将控制器的 SYNCHRONIZATION 设置为 FALSE)以更频繁地运行它并独立于 Webots 时间步长,以便它也有机会从其他发射器读取数据。似乎没有任何区别。
安排发射器一次发送一个数据,以便接收器可以处理信息。这可行,但它使系统对动态变化的响应非常缓慢。对于上下文,我正在尝试将接收器与至少 7 个发射器连接。
当任何数据被添加到接收器的缓冲区时,我考虑过有一个中断服务例程,但我找不到任何关于在 Webots 控制器中实现中断的相关文档。
我尝试减少接收器控制器的时间步长,以便它可以更频繁地运行并丢失更少的数据,但是 Webots 要求控制器时间步长是模拟时间步长的整数倍。这意味着接收器将始终与最新的发射器同时运行——让我们回到同样的问题。
我认为为了让我的模拟工作,我将不得不以比发射器快 7 倍(例如)的方式运行接收器,这样它每次运行时都会从每个发射器读取数据。或者,以某种方式更改接收器模块的缓冲区设置,以免丢失先前传输的数据。任何和所有建议表示赞赏。
TIA!
【问题讨论】:
标签: c controller webots