//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Vehicle Route creation Example // This example shows: // 1- Create a vehicle trajectory from positions and speed limits //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static void RunExampleCreateRouteCar(string host, string target_type, string x300_ip) { Console.WriteLine(); Console.WriteLine("=== Create Route Example ==="); Console.WriteLine("==> Connecting to the simulator"); RemoteSimulator sim = new RemoteSimulator(); sim.Connect(host); Console.WriteLine("==> Create New Configuration, discarding current simulator settings"); sim.Call(new New(true)); Console.WriteLine("==> Modulation Settings"); string targetId = "MyTargetId"; sim.Call(new SetModulationTarget(target_type, "", x300_ip, true, targetId)); // Select signals to simulate sim.Call(new ChangeModulationTargetSignals(0, 12500000, 12500000, "UpperL", "L1CA", -1, false, targetId)); sim.Call(new SetVehicleTrajectory("Route")); sim.Call(new EnableTrajectorySmoothing(true)); sim.BeginRouteDefinition(); PushRouteNode(sim, 50.0, 42.719943, -73.830492); PushRouteNode(sim, 50.0, 42.718155, -73.833370); PushRouteNode(sim, 60.0, 42.718110, -73.833439); PushRouteNode(sim, 60.0, 42.717620, -73.832875); PushRouteNode(sim, 60.0, 42.717296, -73.832508); PushRouteNode(sim, 60.0, 42.716674, -73.831805); PushRouteNode(sim, 60.0, 42.715545, -73.830511); PushRouteNode(sim, 60.0, 42.715469, -73.830427); PushRouteNode(sim, 60.0, 42.714831, -73.829695); PushRouteNode(sim, 60.0, 42.714155, -73.828924); PushRouteNode(sim, 60.0, 42.714200, -73.828803); PushRouteNode(sim, 80.0, 42.714720, -73.827925); PushRouteNode(sim, 80.0, 42.714759, -73.827850); PushRouteNode(sim, 80.0, 42.714769, -73.827747); PushRouteNode(sim, 80.0, 42.714752, -73.827672); PushRouteNode(sim, 80.0, 42.714681, -73.827552); PushRouteNode(sim, 80.0, 42.714338, -73.827183); PushRouteNode(sim, 80.0, 42.713316, -73.826026); PushRouteNode(sim, 60.0, 42.713257, -73.825929); PushRouteNode(sim, 60.0, 42.713235, -73.825804); PushRouteNode(sim, 60.0, 42.713235, -73.825693); PushRouteNode(sim, 60.0, 42.713248, -73.825528); PushRouteNode(sim, 60.0, 42.713708, -73.823088); PushRouteNode(sim, 40.0, 42.713837, -73.823108); PushRouteNode(sim, 40.0, 42.713902, -73.823097); PushRouteNode(sim, 40.0, 42.713979, -73.823028); PushRouteNode(sim, 40.0, 42.714546, -73.822143); int numberOfNodes; sim.EndRouteDefinition(out numberOfNodes); Console.WriteLine("==> Route created, number of nodes in Route = " + numberOfNodes); //You must call BeginVehicleInfo before getting vehicle informations sim.BeginVehicleInfo(); Console.WriteLine("==> Starting Simulation"); sim.Start(); Console.WriteLine("==> Getting vehicle statistics"); VehicleInfo vehicleInfo = sim.LastVehicleInfo(); Lla originLla = vehicleInfo.Position.ToLla(); //convert ecef origin to lla do { //sim.LastVehicleInfo() will block till a vehicle info is received, //you can use sim.HasVehicleInfo(), if you do not want a blocking behavior : //if (!sim.HasVehicleInfo()) continue; vehicleInfo = sim.LastVehicleInfo(); Lla currentLla = vehicleInfo.Position.ToLla(); //convert ecef to lla Enu currentEnu = currentLla.ToEnu(originLla); //convert lla to enu Console.WriteLine("--------------------------------------------------"); Console.WriteLine("Time (ms): " + vehicleInfo.ElapsedTime); Console.Write("ENU Position (meters): " + currentEnu.North.ToString("F2") + " "); Console.WriteLine(currentEnu.East.ToString("F2") + " " + currentEnu.Up.ToString("F2")); Console.Write("NED Attitude (deg): " + vehicleInfo.Attitude.YawDeg.ToString("F2") + " "); Console.WriteLine(vehicleInfo.Attitude.PitchDeg.ToString("F2") + ", " + vehicleInfo.Attitude.RollDeg.ToString("F2")); Console.Write("Odometer (meters): " + vehicleInfo.Odometer.ToString("F2")); Console.Write(" | Heading (deg): " + (vehicleInfo.Heading / Math.PI * 180).ToString("F2")); Console.WriteLine(" | Speed (m/s): " + vehicleInfo.Speed.ToString("F2")); //You can remove or decrease this sleep to get more resolution //A vehicle info is sent each 10 ms from simulator Thread.Sleep(1000); } while (vehicleInfo.ElapsedTime < 60 * 1000); Console.WriteLine("==> Stopping simulation"); sim.Stop(); Console.WriteLine("==> Disconnect from Simulator"); sim.Disconnect(); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Vehicle Information Example // This example shows: // 1- Get Information about the simulated Vehicle during the simulation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static void RunExampleVehicleInfo(string host, string target_type, string x300_ip) { Console.WriteLine("=== Simulation Statistics Example ==="); Console.WriteLine("==> Connecting to the simulator"); RemoteSimulator sim = new RemoteSimulator(); sim.Connect(host); Console.WriteLine("==> Create New Configuration, discarding current simulator settings"); sim.Call(new New(true)); Console.WriteLine("==> Modulation Settings"); string targetId = "MyTargetId"; sim.Call(new SetModulationTarget(target_type, "", x300_ip, true, targetId)); // Select signals to simulate sim.Call(new ChangeModulationTargetSignals(0, 12500000, 12500000, "UpperL", "L1CA", -1, false, targetId)); Console.WriteLine("==> Vehicle Settings"); sim.Call(new SetVehicleTrajectoryCircular("Circular", 0.7853995339022749, -1.2740964277717111, 0, 50, 3, true)); Console.WriteLine("==> Starting the simulation"); Console.WriteLine("==> Begin receiving vehicle informations"); //You must call BeginVehicleInfo before getting vehicle informations sim.BeginVehicleInfo(); sim.Start(); Console.WriteLine("==> Getting vehicle statistics"); VehicleInfo vehicleInfo = sim.LastVehicleInfo(); Lla originLla = vehicleInfo.Position.ToLla(); //convert ecef origin to lla do { //sim.LastVehicleInfo() will block till a vehicle info is received, //you can use sim.HasVehicleInfo(), if you do not want a blocking behavior : //if (!sim.HasVehicleInfo()) continue; vehicleInfo = sim.LastVehicleInfo(); Lla currentLla = vehicleInfo.Position.ToLla(); //convert ecef to lla Enu currentEnu = currentLla.ToEnu(originLla); //convert lla to enu Console.WriteLine("--------------------------------------------------"); Console.WriteLine("Time (ms): " + vehicleInfo.ElapsedTime); Console.Write("ENU Position (meters): " + currentEnu.North.ToString("F2") + " "); Console.WriteLine(currentEnu.East.ToString("F2") + " " + currentEnu.Up.ToString("F2")); Console.Write("NED Attitude (deg): " + vehicleInfo.Attitude.YawDeg.ToString("F2") + " "); Console.WriteLine(vehicleInfo.Attitude.PitchDeg.ToString("F2") + ", " + vehicleInfo.Attitude.RollDeg.ToString("F2")); Console.Write("Odometer (meters): " + vehicleInfo.Odometer.ToString("F2")); Console.Write(" | Heading (deg): " + (vehicleInfo.Heading / Math.PI * 180).ToString("F2")); Console.WriteLine(" | Speed (m/s): " + vehicleInfo.Speed.ToString("F2")); //You can remove or decrease this sleep to get more resolution //A vehicle info is sent each 10 ms from simulator Thread.Sleep(1000); } while (vehicleInfo.ElapsedTime < 90000); Console.WriteLine("==> Stop simulation when elapsed time is 90 sec..."); sim.Stop(); sim.EndVehicleInfo(); Console.WriteLine("==> Disconnect from Simulator"); sim.Disconnect(); }