From: Björn H. <hen...@ib...> - 2011-06-06 16:10:11
|
Hi Pranay, On Friday 03 June 2011 19:42:12 wrote Pranay Sharma: > Finally, *Daniel and others in the SUMO team:* I was planning to write a > tutorial for how to use the C++ TracI API and provide some code along which > would be aimed explicitly for traffic control. I would post the same > sometime in July or August i.e after my simulation and other work is over. > I will try my best but I am not sure of the quality you guys expect. So do > you or your team members *still have time *to publishing/share code for > the OPAC algorithm sometime soon? If yes, then can you share with me by > what time that would be possible? I'm currently working again on the TraCI client interface of the Shawn network simulator with the goal to hide all protocol detail in a template library which also has the flexibility to easily extend the protocol if needed. A simple value get/set looks, for example, like this: double speed = TraCIClient::instance()->command_get_value<id::CmdGetVehicleVariable, id::VarVehicleSpeed> (vehicleId); TraCIClient::instance()->command_set_value< id::CmdGetVehicleVariable, id::VarVehicleSpeed> (vehicleId, speed / 2.0); So, you don't need to know the TraCI representation of speed as long as the compiler is able to find a proper type conversion. Compound data is handled like simple structs: Position2D pos = TraCIClient::instance()->command_get_value<id::CmdGetVehicleVariable, id::VarVehiclePosition> (vehicleId); double posX = pos.x; double posY = pos.y; VehicleStop stop; stop.edgdeId = "edge"; stop.offset = 123.5; stop.laneNum = 0; stop.duration = 2500; TraCIClient::instance()->command_set_value< id::CmdGetVehicleVariable, id::VarVehicleSpeed> (vehicleId, stop); The used structs itself are pretty simple, too, for example the Position2D: struct Position2D { DoubleType x; DoubleType y; protected: /// set order of elements in TraCI type virtual void init( ComposedContainer &queue ) { queue.push_back(&x); queue.push_back(&y); } }; As you can see more complex types are an aggregetation of existing types plus an init function to set up the correct order for TraCI. The following typedef embeds the struct into the TraCI machinery, which handles all details including the TraCI type ID prefix: typedef CompoundTraciType< MessageHandlerComposed< ComposedValue<Position2D>, id::Position2d >, true > Position2DTypeWithTypeId; There are also templates which automatically handle a leading number of items with either a static or a dynamic number of elements. If this TraCI type library is something for have a look into Shawn (shawn.sourceforge.net). It's already running and currently I'm working on some improvements. And, of course, it's completely documented. Regards Björn |