微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Veins_Inet 示例:omnet ++

如何解决Veins_Inet 示例:omnet ++

在omnet ++的veins_inet示例中,我需要将消息(事故)发送给仅某些车辆,而不是所有车辆,这意味着我不不想在广播中发送消息,但我想在我选择的模拟时间将其发送到特定车辆?有谁知道这是怎么做到的吗 ?我想知道我是否应该更改 VeinsInetSampleApplication.cc 中的代码??也许我必须更改sendPacket 方法,但我不知道该怎么做!我花了几天时间试图更改目标地址,我使用了 senddirect() 函数,我添加了门,但我遇到了很多错误!你能帮我吗 ? :

这是示例中与我的问题相关的代码(这是将消息以广播形式发送到所有车辆而没有任何更改的代码),这不是完整的代码,但我从每个类中选择了一些我认为与我的问题有关的台词

在 VeinsInetSampleApplication.cc 中:

// host[0] should stop at t=37s
                           /*if (getParentModule()->getIndex() == 4) {
                               auto callback = [this]() {
                                   getParentModule()->getdisplayString().setTagArg("i",1,"yellow");

                                   traciVehicle->setSpeed(0);

                                   auto payload = makeShared<VeinsInetSampleMessage>();
                                   payload->setChunkLength(B(500));
                                   payload->setRoadId(traciVehicle->getRoadId().c_str());
                                   timestampPayload(payload);

                                   auto packet = createPacket("accident");
                                   packet->insertAtBack(payload);
                                   sendPacket(std::move(packet));

                                   // host should continue after 40s
                                   auto callback = [this]() {
                                       traciVehicle->setSpeed(-1);
                                   };

                                   timerManager.create(veins::TimerSpecification(callback).oneshotIn(SimTime(40,SIMTIME_S)));
                               };

                               timerManager.create(veins::TimerSpecification(callback).oneshotAt(SimTime(37,SIMTIME_S)));
                           }

静脉InetApplicationBase.cc中的sendPacketMethod:

void VeinsInetApplicationBase::sendPacket(std::unique_ptr<inet::Packet> pk)
{
    emit(packetSentSignal,pk.get());
    socket.sendTo(pk.release(),destAddress,portNumber);
}

在静脉InetApplicationBase.h:

inet::L3Address destAddress;
    const int portNumber = 9001;

在静脉InetApplicationBase.cc:

 L3AddressResolver().tryResolve("224.0.0.1",destAddress);
    ASSERT(!destAddress.isUnspecified());

    socket.setoutputGate(gate("socketout"));
    socket.bind(L3Address(),portNumber);

在 Scenario.ned :

node[0]: VeinsInetCar ;

在这里我不明白为什么只定义了节点[0]?我的模拟中有 6 个节点,我如何指定我想要将消息发送到的节点因为我不想将它发送到所有节点,我只想将我的消息发送给距离发送消息的车辆不到 500 m 的那些节点?如何根据距离指定节点的目的地址? (因为我使用 802.11p

最后在omnet.ini

[General]
network = Scenario
sim-time-limit = 140s
debug-on-errors = true
cmdenv-express-mode = true
image-path = ../../../../images

# UDPBasicApp
*.node[*].numApps = 1
*.node[*].app[0].typename = "mywork.veins_inet.VeinsInetSampleApplication"
*.node[*].app[0].interface = "wlan0"

# Ieee80211Interface
*.node[*].wlan[0].opMode = "p"
*.node[*].wlan[0].radio.typename = "Ieee80211DimensionalRadio"
*.node[*].wlan[0].radio.bandName = "5.9 GHz"
*.node[*].wlan[0].radio.channelNumber = 6
*.node[*].wlan[0].radio.transmitter.power = 20mW
*.node[*].wlan[0].radio.bandwidth = 10 MHz
*.node[*].wlan[*].radio.antenna.mobility.typename = "Attachedmobility"
*.node[*].wlan[*].radio.antenna.mobility.mobilityModule = "^.^.^.^.mobility"
*.node[*].wlan[*].radio.antenna.mobility.offsetX = -2.5m
*.node[*].wlan[*].radio.antenna.mobility.offsetZ = 1.5m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinX = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxX = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinY = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxY = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinZ = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxZ = 0m

# HostAutoConfigurator
*.node[*].ipv4.configurator.typename = "HostAutoConfigurator"
*.node[*].ipv4.configurator.interfaces = "wlan0"
*.node[*].ipv4.configurator.mcastGroups = "224.0.0.1"


# VeinsInetmobility
*.node[*].mobility.typename = "VeinsInetmobility"

# VeinsInetManager
*.manager.updateInterval = 0.1s
*.manager.host = "localhost"
*.manager.port = 9999
*.manager.autoShutdown = true
*.manager.launchConfig = xmldoc("enetcom.launchd.xml")
*.manager.moduleType = "mywork.veins_inet.VeinsInetCar"

# PhysicalEnvironment
*.physicalEnvironment.config = xmldoc("obstacles.xml")
*.radioMedium.obstacleLoss.typename = "IdealObstacleLoss"

# Misc
**.vector-recording = true

现在我需要知道的是我必须更改这些线路中的哪些线路,我应该如何更改它们以使消息仅发送到我在模拟中自己选择的某些车辆而不是周围的所有车辆? ?请帮我 !在此先感谢您!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。