【问题标题】:Real time programming in robotics with c++ [closed]使用 C++ 对机器人进行实时编程 [关闭]
【发布时间】:2012-12-13 08:56:40
【问题描述】:

我正在使用 C++ 和 OpenCV 进行机器人项目。在这一步中,我遇到了一个问题,包括:

我有两个方法moveRight()moveLeft()在我的代码中先后调用,但是问题是第二个没有运行,因为第一个需要时间(机器人运动的时间),但是当我把Sleep(5000)放在它们之间(我猜5秒就够了),一切OK。

什么是避免使用Sleep(因为它会产生一些其他问题)的编程解决方案?

【问题讨论】:

  • 你尝试过多线程吗?
  • 我创建了一个用于处理计算机晶圆的机器人控制程序。它可以在移动过程中无缝地改变路线,这可能基于晶片通过激光裙时收集的数据。这不是一个简单的问题。我使用了一个实时操作系统,带有自定义硬件,提供反馈以将控制器与机器人同步。问题中几乎没有足够的信息来开始回答它。如果这是一个商业项目,我也许可以咨询。
  • 也许这个问题比 StackOverflow 更适合 robotics.stackexchange.com

标签: c++ real-time robot


【解决方案1】:

您可以尝试添加layer of indirection。添加要执行的操作队列,将操作排入 moveLeft 和 moveRight 队列,并在其他地方(不同的线程)通过在执行下一个操作之前等待上一个操作完成来正确执行队列中的操作。理想情况下,您需要一种方法来检查操作是否已完成,以便以基于事件的方式对其进行编码。

【讨论】:

  • 你说得对,事实上我可以得到完成/未完成动作的事件。因此,我必须创建一个包含所有操作的队列,并考虑到每个先前操作的等待时间,从中一个一个地执行它们。我想这样的队列可能是一个列表或函数指针,不是吗?非常感谢 Karthik
  • @HoussemBdr 很高兴听到我提供了帮助。是的,函数指针列表可能是最简单的情况,但我猜你最终会到达你想要传递争论的地步,那么一系列仿函数会更好,或者一个基本的命令结构实现了所有逻辑在出队一侧。顺便说一句,如果它解决了您的查询,您能否将答案标记为已接受?
  • 谢谢,我对函数参数没有问题,所以第一个解决方案是最好的
  • 我填写了操作队列。但是这些动作中的每一个都需要机器人的上下文(它在那个精确时间的实际位置)。那么,我该如何纠正呢?
  • @HoussemBdr 我想你需要持有一个指向机器人的指针(或者更好的是,引用)?每个动作,或整个队列
【解决方案2】:

您永远不应该“猜测”机器人技术。您应该知道MEASURE您的动作需要多长时间并在您的代码中使用它。例如,经常调用moveRight() 并让它检查它已经运行了多长时间。让它在运行时返回true,并将其用作调用moveLeft()的条件

【讨论】:

    【解决方案3】:

    您可以使用计时器,在执行 MoveRight() 时将计时器设置为 5 秒,然后在计时器结束后执行 Moveleft()。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2020-08-08
      • 2013-01-12
      相关资源
      最近更新 更多