背景:我正在做一个有类似坦克控制的自动驾驶机器的项目,比如:
代码在raspberry pi上运行。GPIO输出在我的类机器中。目前的开发过程非常简单,我们正在编程,穿上覆盆子,在真正的机器上测试它。这一过程大大减缓了发展。是否有通用的设计模式来实现仿真。目标必须是保持模型不动,使用相同的代码的真实,为仿真。
发布于 2019-02-04 18:58:00
幸运的是,您可以在Raspberry PI上运行Linux。这意味着您可以在自己的计算机上安装与虚拟机相同的Linux版本。然后创建一个构建脚本,将应用程序与任何依赖项打包起来,然后将其部署到计算机上运行的Linux中。大多数虚拟机管理器允许您指定一些基本的硬件要求,比如CPU和RAM的数量以及磁盘空间。
这将为您提供一些强大的硬件来开发和测试(比Raspberry PI更多),这将加快开发,但将出现性能和集成问题的实际设备。
从这里开始,您将希望以某种方式对应用程序进行分析,以便监视它使用了多少RAM和CPU,以便尽早发现一些性能瓶颈。
真的,没有什么比在真正的设备上测试它更好了。您可能有一些没有bug的代码,这些代码在最小的硬件上像垃圾一样运行,迫使您重新设计代码库的主要部分,这也会导致项目的减速。所以这是一种平衡行为。
发布于 2019-02-04 21:32:05
除了格雷格答案之外,一旦在VM上运行代码,您还可以对代码做一些其他的事情。
据我所知,Pi的GPIO是内存映射设备,因此您可以编写带外进程来监视输出位并报告它们的值,以便跟踪硬件是如何驱动的。(请注意,您需要验证所看到的响应是否与实际硬件匹配- EG设置了一些简单的测试用例)
一旦您可以监视输出,那么您就可以将它们输入到硬件模拟中,以估计车辆的物理位置。这可以是简单的或复杂的,你想要的。目标不是完美的,而是向用户提供反馈,即当您运行forward()命令10秒时,车辆移动的距离是运行1秒时的10倍。您还积累与简单的时间为基础的积分距离,以改变车辆的位置。
最后一步是将模拟的传感器数据添加到您的模拟中,并根据车辆在模拟世界中的位置将模拟传感器数据反馈回GPIO输入,并展示您的实际车辆代码是如何响应的。当传感器在车辆前面检测到一个模拟悬崖时,你的实际车辆代码应该被看到来阻止前进的运动。
其目标不是为您的车辆提供一个完美的真实世界模拟,而是作为一个工具来帮助您验证您是否使用了输入并以一种看似合理的方式生成输出-- IE显示您已经在代码中点缀了I's和交叉了T's。因此,您应该以最简单和最愚蠢的模拟为目标,并避免诱惑,使您的硬件模拟完美。
https://softwareengineering.stackexchange.com/questions/386624
复制相似问题