【问题标题】:calculating distance between vehicles and setting speed so the distances remain the same e.g 5 meters计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
【发布时间】:2023-03-03 20:19:02
【问题描述】:

我正在使用静脉 5.0,我正在尝试计算车辆之间的距离并设置它们的速度。我想每秒计算一次,我想通过发送 wsm 消息来做到这一点。我的目标是拥有例如 5 辆车,每辆车将与前车通信并获取其位置,以计算它们的距离并保持它静止的。我是新手,我不知道如何处理它。 我试图在 handlePositionUpdate 上做这样的事情

void TraCIDemo11p::handlePositionUpdate(cObject* obj)
{
    DemoBaseApplLayer::handlePositionUpdate(obj);
    // stopped for for at least 10s?
    if (x<simTime()){ 
      TraCIDemo11pMessage* wsm1 = new TraCIDemo11pMessage();
      populateWSM(wsm1);
      wsm1->setPosition(mobility->getPositionAt(simTime())); 
      wsm1->setSpeed(mobility->getSpeed()); 
      if (dataOnSch) {
startService(Channel::sch2, 42, "Traffic Information Service");
          message to self to send later
scheduleAt(computeAsynchronousSendingTime(1,ChannelType::service), wsm1);
      }
      else {
         sendDown(wsm1);
      }
    }

【问题讨论】:

  • 这是一个关于编码或解决问题的问题吗?问题的解决方案可能非常复杂,通常需要“调整”以获得理想的行为。基本上,后面的车辆希望以与前车相同的速度行驶。但是,如果距离太大,它想走得更快一点。如果太近,会慢一点。一个简单的第一步是使速度等于加上与距离误差成比例的量。通过改变这个比率进行调整。使车辆相互跟随而不是领先。一个大错误会导致崩溃。
  • 您好,感谢您的评论,这是一个关于编码的问题。你准确地描述了我想要做什么。我希望车辆跟随其他车辆而不是领先车辆。我不知道从哪里开始以及使用哪些功能。

标签: c++ omnet++ veins sumo


【解决方案1】:

您实际上是在描述什么是队列应用程序。您可能希望将源代码基于 Plex,这是 Veins 的队列扩展。它已经配备了最先进的距离控制器,例如 PATHPloeg。更多信息请访问http://plexe.car2x.org/

【讨论】:

  • 感谢您的回复,很遗憾我无法使用 plexe。如何每 5 秒发送一次 wsm 消息,以便能够计算车辆之间的距离?
  • 我也收到该错误消息未处理的对象:(veins::TraCIDemo11pMessage) RSUExampleScenario.node[1].appl.
  • 您已经基于您的代码的演示应用程序的源代码向您展示了如何发送信标。对于如何在特定时间(或定期)后做某事,我建议看一下 subprojects/veins_inet 的示例应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2017-07-29
相关资源
最近更新 更多