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