18 using std::runtime_error::runtime_error;
81 const std::vector<MapSegment>&
segments() const noexcept {
return m_segments; }
90 std::size_t
layerCount() const noexcept {
return m_layers.size(); }
91 const std::vector<MapLayer>&
layers() const noexcept {
return m_layers; }
92 const std::vector<MapTransition>&
transitions() const noexcept {
return m_transitions; }
99 const std::vector<MapSegment>&
layerSegments(std::size_t idx)
const noexcept;
104 bool isOnLine(
float xCm,
float yCm, std::size_t layerIdx)
const;
105 bool isOnWall(
float xCm,
float yCm, std::size_t layerIdx)
const;
108 std::vector<MapSegment>
lines()
const;
114 std::vector<MapSegment>
walls()
const;
156 float robotHeadingRad,
162 float robotHeadingRad,
168 float robotHeadingRad,
185 void setTable(
float widthCm,
float heightCm)
noexcept
187 m_tableWidthCm = widthCm;
188 m_tableHeightCm = heightCm;
195 m_transitions.clear();
196 m_tableWidthCm = 0.0f;
197 m_tableHeightCm = 0.0f;
201 float m_tableWidthCm{0.0f};
202 float m_tableHeightCm{0.0f};
205 std::vector<MapSegment> m_segments;
206 std::vector<MapLayer> m_layers;
207 std::vector<MapTransition> m_transitions;
float tableHeightCm() const noexcept
const std::vector< MapSegment > & layerSegments(std::size_t idx) const noexcept
const std::vector< MapSegment > & segments() const noexcept
void parseFtmap(const std::string &content)
float distanceToNearestLine(float xCm, float yCm) const
bool sensorIsOnWall(float robotXCm, float robotYCm, float robotHeadingRad, const SensorOffset &sensor) const
Convenience: sensorFieldPosition + isOnWall.
float tableWidthCm() const noexcept
bool isOnLine(float xCm, float yCm, std::size_t layerIdx) const
std::size_t layerCount() const noexcept
std::vector< MapSegment > lines() const
Subset of segments() with Kind::Line.
const std::vector< MapTransition > & transitions() const noexcept
bool isOnLine(float xCm, float yCm) const
bool sensorIsOnLine(float robotXCm, float robotYCm, float robotHeadingRad, const SensorOffset &sensor) const
Convenience: sensorFieldPosition + isOnLine.
float distanceToNearestWall(float xCm, float yCm) const
bool isOnWall(float xCm, float yCm) const
Point2D sensorFieldPosition(float robotXCm, float robotYCm, float robotHeadingRad, const SensorOffset &sensor) const
bool isOnBlackLine(float xCm, float yCm) const
void setTable(float widthCm, float heightCm) noexcept
const std::vector< MapLayer > & layers() const noexcept
int layerIndex(const std::string &id) const noexcept
Index of the layer with the given id, or -1 when absent.
void loadFtmap(const std::filesystem::path &path)
bool isOnWall(float xCm, float yCm, std::size_t layerIdx) const
void addSegment(const MapSegment &seg)
std::vector< MapSegment > walls() const
std::vector< MapSegment > segments
Edge geometry of a transition portal on one layer (cm, bottom-up frame).