SMACC2
Loading...
Searching...
No Matches
cl_px4_mr::CpKmlMissionLoader Class Reference

#include <cp_kml_mission_loader.hpp>

Inheritance diagram for cl_px4_mr::CpKmlMissionLoader:
Inheritance graph
Collaboration diagram for cl_px4_mr::CpKmlMissionLoader:
Collaboration graph

Public Member Functions

 CpKmlMissionLoader ()
 
virtual ~CpKmlMissionLoader ()
 
void onInitialize () override
 
KmlLoadResult loadFile (const std::string &absolutePath)
 
void setMission (std::vector< GeoPoint > points, const std::string &source)
 
bool hasMission () const
 
std::vector< GeoPoint > getMission () const
 
std::string getSource () const
 
void clear ()
 
- Public Member Functions inherited from smacc2::ISmaccComponent
 ISmaccComponent ()
 
virtual ~ISmaccComponent ()
 
virtual std::string getName () const
 

Static Public Member Functions

static std::vector< GeoPoint > parseKmlString (const std::string &xml, std::string &error)
 

Private Attributes

std::mutex mutex_
 
std::vector< GeoPoint > mission_
 
std::string source_
 

Additional Inherited Members

- Protected Member Functions inherited from smacc2::ISmaccComponent
template<typename TOrthogonal , typename TClient >
void onComponentInitialization ()
 
template<typename EventType >
void postEvent (const EventType &ev)
 
template<typename EventType >
void postEvent ()
 
template<typename TOrthogonal , typename TSourceObject >
void onStateOrthogonalAllocation ()
 
template<typename TComponent >
void requiresComponent (TComponent *&requiredComponentStorage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
 
template<typename TComponent >
void requiresComponent (std::string name, TComponent *&requiredComponentStorage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
 
template<typename TClient >
void requiresClient (TClient *&requiredClientStorage)
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createSiblingComponent (TArgs... targs)
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createSiblingNamedComponent (std::string name, TArgs... targs)
 
rclcpp::Node::SharedPtr getNode ()
 
rclcpp::Logger getLogger () const
 
ISmaccStateMachine * getStateMachine ()
 
- Protected Attributes inherited from smacc2::ISmaccComponent
ISmaccStateMachine * stateMachine_
 
ISmaccClient * owner_
 

Detailed Description

Definition at line 47 of file cp_kml_mission_loader.hpp.

Constructor & Destructor Documentation

◆ CpKmlMissionLoader()

cl_px4_mr::CpKmlMissionLoader::CpKmlMissionLoader ( )

Definition at line 146 of file cp_kml_mission_loader.cpp.

146{}

◆ ~CpKmlMissionLoader()

cl_px4_mr::CpKmlMissionLoader::~CpKmlMissionLoader ( )
virtual

Definition at line 148 of file cp_kml_mission_loader.cpp.

148{}

Member Function Documentation

◆ clear()

void cl_px4_mr::CpKmlMissionLoader::clear ( )

Definition at line 231 of file cp_kml_mission_loader.cpp.

232{
233 std::lock_guard<std::mutex> lock(mutex_);
234 mission_.clear();
235 source_.clear();
236}

References mission_, mutex_, and source_.

◆ getMission()

std::vector< GeoPoint > cl_px4_mr::CpKmlMissionLoader::getMission ( ) const

Definition at line 219 of file cp_kml_mission_loader.cpp.

220{
221 std::lock_guard<std::mutex> lock(mutex_);
222 return mission_;
223}

References mission_, and mutex_.

◆ getSource()

std::string cl_px4_mr::CpKmlMissionLoader::getSource ( ) const

Definition at line 225 of file cp_kml_mission_loader.cpp.

226{
227 std::lock_guard<std::mutex> lock(mutex_);
228 return source_;
229}

References mutex_, and source_.

◆ hasMission()

bool cl_px4_mr::CpKmlMissionLoader::hasMission ( ) const

Definition at line 213 of file cp_kml_mission_loader.cpp.

214{
215 std::lock_guard<std::mutex> lock(mutex_);
216 return !mission_.empty();
217}

References mission_, and mutex_.

◆ loadFile()

KmlLoadResult cl_px4_mr::CpKmlMissionLoader::loadFile ( const std::string & absolutePath)

Definition at line 167 of file cp_kml_mission_loader.cpp.

168{
169 KmlLoadResult result;
170
171 tinyxml2::XMLDocument doc;
172 const tinyxml2::XMLError status = doc.LoadFile(absolutePath.c_str());
173 if (status != tinyxml2::XML_SUCCESS)
174 {
175 result.error = std::string("cannot load '") + absolutePath +
176 "': " + (doc.ErrorStr() ? doc.ErrorStr() : "unknown error");
177 RCLCPP_WARN(getLogger(), "CpKmlMissionLoader: %s", result.error.c_str());
178 return result;
179 }
180
181 std::string error;
182 std::vector<GeoPoint> points = parseDocument(doc, error);
183 if (points.empty())
184 {
185 result.error = "'" + absolutePath + "': " + error;
186 RCLCPP_WARN(getLogger(), "CpKmlMissionLoader: %s", result.error.c_str());
187 return result;
188 }
189
190 {
191 std::lock_guard<std::mutex> lock(mutex_);
192 mission_ = points;
193 source_ = absolutePath;
194 }
195
196 result.ok = true;
197 result.pointCount = points.size();
198 RCLCPP_INFO(
199 getLogger(),
200 "CpKmlMissionLoader: loaded %zu backbone points from '%s' (first %.6f,%.6f last %.6f,%.6f)",
201 points.size(), absolutePath.c_str(), points.front().lat, points.front().lon, points.back().lat,
202 points.back().lon);
203 return result;
204}
rclcpp::Logger getLogger() const
std::vector< GeoPoint > parseDocument(tinyxml2::XMLDocument &doc, std::string &error)

References cl_px4_mr::KmlLoadResult::error, smacc2::ISmaccComponent::getLogger(), mission_, mutex_, cl_px4_mr::KmlLoadResult::ok, cl_px4_mr::KmlLoadResult::pointCount, and source_.

Referenced by cl_px4_mr::CbLoadKmlMission::onEntry().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ onInitialize()

void cl_px4_mr::CpKmlMissionLoader::onInitialize ( )
overridevirtual

Reimplemented from smacc2::ISmaccComponent.

Definition at line 150 of file cp_kml_mission_loader.cpp.

151{
152 RCLCPP_INFO(getLogger(), "CpKmlMissionLoader: ready (first LineString backbone only)");
153}

References smacc2::ISmaccComponent::getLogger().

Here is the call graph for this function:

◆ parseKmlString()

std::vector< GeoPoint > cl_px4_mr::CpKmlMissionLoader::parseKmlString ( const std::string & xml,
std::string & error )
static

Definition at line 155 of file cp_kml_mission_loader.cpp.

157{
158 tinyxml2::XMLDocument doc;
159 if (doc.Parse(xml.c_str(), xml.size()) != tinyxml2::XML_SUCCESS)
160 {
161 error = std::string("XML parse error: ") + (doc.ErrorStr() ? doc.ErrorStr() : "unknown");
162 return {};
163 }
164 return parseDocument(doc, error);
165}

◆ setMission()

void cl_px4_mr::CpKmlMissionLoader::setMission ( std::vector< GeoPoint > points,
const std::string & source )

Definition at line 206 of file cp_kml_mission_loader.cpp.

207{
208 std::lock_guard<std::mutex> lock(mutex_);
209 mission_ = std::move(points);
210 source_ = source;
211}

References mission_, mutex_, and source_.

Referenced by cl_px4_mr::CbLoadKmlMission::onEntry().

Here is the caller graph for this function:

Member Data Documentation

◆ mission_

std::vector<GeoPoint> cl_px4_mr::CpKmlMissionLoader::mission_
private

Definition at line 73 of file cp_kml_mission_loader.hpp.

Referenced by clear(), getMission(), hasMission(), loadFile(), and setMission().

◆ mutex_

std::mutex cl_px4_mr::CpKmlMissionLoader::mutex_
mutableprivate

Definition at line 72 of file cp_kml_mission_loader.hpp.

Referenced by clear(), getMission(), getSource(), hasMission(), loadFile(), and setMission().

◆ source_

std::string cl_px4_mr::CpKmlMissionLoader::source_
private

Definition at line 74 of file cp_kml_mission_loader.hpp.

Referenced by clear(), getSource(), loadFile(), and setMission().


The documentation for this class was generated from the following files: