问题描述
我尝试通过将移动性更改为固定移动性来使用 VeinsInetCar 模块作为 rsu
# VeinsInetmobility
*.node[*].mobility.typename = "VeinsInetmobility"
*.wifirsu.mobility.typename = "Stationarymobility"
我为车辆使用了 VeinsInetSampleApplication,并为 rsu 稍微更改了它。创建了一个新的 VeinsInetApplicationBase 并删除了traci 和mobility 部分。
void VeinsInetApplicationBase::handleStartOperation(LifecycleOperation* operation)
{
mobility = veins::VeinsInetmobilityAccess().get(getParentModule());
traci = mobility->getCommandInterface();
traciVehicle = mobility->getVehicleCommandInterface();
L3AddressResolver().tryResolve("224.0.0.1",destAddress);
ASSERT(!destAddress.isUnspecified());
然后移除与traci相关的变量并将其替换为RSU的veinesInetSampleApplication中的虚拟变量。现在,当我尝试运行模拟时,它会导致此错误。
check_and_cast(): Cannot cast (inet::physicallayer::Ieee80211ScalarTransmission*) to type 'const inet::physicallayer::DimensionalTransmission *' -- in module (inet::physicallayer::Ieee80211Radio) Scenario.node[0].wlan[0].radio
解决方法
我的猜测是您为名为 node[*]
的节点配置了一组参数,为名为 wifirsu
的节点配置了另一组参数。可能您的 .ini
文件主要列出名为 node[*]
的节点的参数,并将许多参数保留为名为 wifirsu
的节点的默认值。这可能会导致您的模拟对一种类型的节点使用“标量”无线电,而对其他类型的节点使用“维度”无线电,这会导致您显示的错误消息。