Modules | Classes
Lanelet Primitives
Collaboration diagram for Lanelet Primitives:

Modules

 Area
 
 Lanelets
 
 LineString
 
 Point
 
 Polygon
 
 Regulatory Element
 

Classes

class  lanelet::AllWayStop
 Defines an all way stop. These are a special form of right of way, where all lanelets have to yield, depending on the order of arrival and the route through the intersection.The distance to the intersection is represented either by the distance to the stop line, if present, otherwise the distance to the end of the lanelet. More...
 
class  lanelet::Area
 Famous Area class that represents a basic area as element of the map. More...
 
class  lanelet::GenericRegulatoryElement
 A GenericRegulatoryElement can hold any parameters. More...
 
class  lanelet::Lanelet
 The famous (mutable) lanelet class. More...
 
class  lanelet::LineString2d
 A normal 2d linestring with mutable data. More...
 
class  lanelet::LineString3d
 A normal 3d linestring with mutable data. More...
 
class  lanelet::Point2d
 A mutable 2d point. More...
 
class  lanelet::Point3d
 A mutable 3d point. More...
 
class  lanelet::Polygon2d
 An mutable clockwise oriented, open (ie start point != end point) polygon in 2d. More...
 
class  lanelet::Polygon3d
 A mutable clockwise oriented, open (ie start point != end point) polygon in 3d. More...
 
class  lanelet::RightOfWay
 Defines right of way restrictions. More...
 
class  lanelet::SpeedLimit
 Represents a speed limit that affects a laneletA speed limit is defined by one ore more traffic signs and cancelled by one or more traffic signs. All lanelets affected by this refer to this traffic sign. More...
 
class  lanelet::TrafficLight
 Represents a traffic light restriction on the lanelet. More...
 
class  lanelet::TrafficSign
 Expresses a generic traffic sign rule. More...
 

Detailed Description

All primitives are first-class citizens of lanelet2. Unlike Immutable lanelet primitives they provide functionality to not only view the data but also modify it.

Design concepts

All primitives are split in a const and a non-const version that both have a std::shared_ptr to the actual data. This means that a primitive itself is very lightweight. It also means that all copys of a primitive share the same data and are therefore

Geometry

All primitives are registered with boost::geometry (see also the lanelet::geometry). This means that they can be passed directly to boost::geometry functions.

With some exceptions: Some of boost::geometry's functions require objects to contain mutable data. This is not possible for lanelet primitives. If you see errors complaining about a missing "set" function, you hit one of those functions. For these functions, you have to pass hybrid primitives (see ConstHybridLineString3d).

All primitives exist in a 2d and a 3d version and can be converted cheaply and without data loss in both directions (see also lanelet::traits::to2D and lanelet::traits::to3d). This works thanks to the fact that they still reference the same PrimitiveData object.

Modification

Be aware that some parts of lanelet2 cache data about others, e.g. Lanelet and LaneletMap. Modification is not propagated upwards in the lanelet hierarchy. E.g. If you modify the coordinates of a Point, the centerline of a lanelet relying on this point will not be updated. You have to reset these caches by yourself.

If you intend to never modify parts of a LaneletMap, better work with Immutable lanelet primitives. All primitives can be converted to a const version. See also lanelet::traits::toConst.

Thread safety

No thread safety is guaranteed when primitives are modified. You have to ensure thread safety yourself. Concurrent reads are always thread safe.



lanelet2_core
Author(s): Fabian Poggenhans
autogenerated on Tue Jun 6 2023 02:23:32