mirror of
https://github.com/micro-ROS/micro-ROS-Agent.git
synced 2026-09-06 09:55:15 +02:00
Backport from galactic
This commit is contained in:
@@ -26,11 +26,21 @@ namespace agent {
|
||||
|
||||
class Agent
|
||||
{
|
||||
public:
|
||||
|
||||
private:
|
||||
Agent();
|
||||
|
||||
~Agent() = default;
|
||||
Agent(const Agent &) = delete;
|
||||
|
||||
Agent(Agent &&) = delete;
|
||||
|
||||
Agent& operator =(
|
||||
const Agent &) = delete;
|
||||
|
||||
Agent& operator =(
|
||||
Agent &&) = delete;
|
||||
|
||||
public:
|
||||
static Agent& getInstance();
|
||||
|
||||
bool create(
|
||||
int argc,
|
||||
@@ -38,12 +48,14 @@ public:
|
||||
|
||||
void run();
|
||||
|
||||
void stop();
|
||||
|
||||
private:
|
||||
|
||||
bool initialized = false;
|
||||
eprosima::uxr::AgentInstance& xrce_dds_agent_instance_;
|
||||
std::map<eprosima::fastdds::dds::DomainId_t, std::shared_ptr<graph_manager::GraphManager>> graph_manager_map_;
|
||||
std::map<eprosima::fastdds::dds::DomainId_t, graph_manager::GraphManager> graph_manager_map_;
|
||||
|
||||
std::shared_ptr<graph_manager::GraphManager> find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id);
|
||||
graph_manager::GraphManager* find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id);
|
||||
};
|
||||
|
||||
} // namespace agent
|
||||
|
||||
@@ -82,6 +82,16 @@ public:
|
||||
*/
|
||||
~GraphManager() = default;
|
||||
|
||||
void stop()
|
||||
{
|
||||
if (microros_graph_publisher_.joinable())
|
||||
{
|
||||
exit = true;
|
||||
cv_.notify_one();
|
||||
microros_graph_publisher_.join();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Implementation of the notification logic that updates the micro-ROS graph.
|
||||
*/
|
||||
@@ -304,27 +314,27 @@ private:
|
||||
std::thread microros_graph_publisher_;
|
||||
std::mutex mtx_;
|
||||
std::condition_variable cv_;
|
||||
volatile bool exit = false;
|
||||
|
||||
eprosima::fastdds::dds::DataWriterQos datawriter_qos_;
|
||||
|
||||
rmw_dds_common::GraphCache graphCache_;
|
||||
std::unique_ptr<ParticipantListener> participant_listener_;
|
||||
std::unique_ptr<DatareaderListener> datareader_listener_;
|
||||
|
||||
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> participant_info_typesupport_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> microros_graph_info_typesupport_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::DomainParticipant> participant_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::Publisher> publisher_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::Subscriber> subscriber_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::Topic> ros_discovery_topic_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::Topic> ros_to_microros_graph_topic_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::DataWriter> ros_to_microros_graph_datawriter_;
|
||||
std::unique_ptr<eprosima::fastdds::dds::DataReader> ros_discovery_datareader_;
|
||||
ParticipantListener participant_listener_;
|
||||
DatareaderListener datareader_listener_;
|
||||
|
||||
eprosima::fastdds::dds::TypeSupport participant_info_typesupport_;
|
||||
eprosima::fastdds::dds::TypeSupport microros_graph_info_typesupport_;
|
||||
eprosima::fastdds::dds::DomainParticipant* participant_;
|
||||
eprosima::fastdds::dds::Publisher* publisher_;
|
||||
eprosima::fastdds::dds::Subscriber* subscriber_;
|
||||
eprosima::fastdds::dds::Topic* ros_discovery_topic_;
|
||||
eprosima::fastdds::dds::Topic* ros_to_microros_graph_topic_;
|
||||
eprosima::fastdds::dds::DataWriter* ros_to_microros_graph_datawriter_;
|
||||
eprosima::fastdds::dds::DataReader* ros_discovery_datareader_;
|
||||
// Store a auxiliary publishers and datawriter for each participant created in micro-ROS
|
||||
std::map<
|
||||
const eprosima::fastdds::dds::DomainParticipant*,
|
||||
std::unique_ptr<eprosima::fastdds::dds::DataWriter>
|
||||
eprosima::fastdds::dds::DataWriter*
|
||||
> micro_ros_graph_datawriters_;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user