mirror of
https://github.com/micro-ROS/micro-ROS-Agent.git
synced 2026-09-06 09:55:15 +02:00
Update graph manager
This commit is contained in:
@@ -80,29 +80,16 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief Default destructor.
|
* @brief Default destructor.
|
||||||
*/
|
*/
|
||||||
~GraphManager()
|
~GraphManager() = default;
|
||||||
|
|
||||||
|
void stop()
|
||||||
{
|
{
|
||||||
graphCache_.clear_on_change_callback();
|
|
||||||
|
|
||||||
exit = true;
|
|
||||||
cv_.notify_one();
|
|
||||||
|
|
||||||
if (microros_graph_publisher_.joinable())
|
if (microros_graph_publisher_.joinable())
|
||||||
{
|
{
|
||||||
|
exit = true;
|
||||||
|
cv_.notify_one();
|
||||||
microros_graph_publisher_.join();
|
microros_graph_publisher_.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
subscriber_->delete_datareader(ros_discovery_datareader_);
|
|
||||||
publisher_->delete_datawriter(ros_to_microros_graph_datawriter_);
|
|
||||||
|
|
||||||
participant_->delete_subscriber(subscriber_);
|
|
||||||
participant_->delete_publisher(publisher_);
|
|
||||||
|
|
||||||
// Delete topics
|
|
||||||
participant_->delete_topic(ros_discovery_topic_);
|
|
||||||
participant_->delete_topic(ros_to_microros_graph_topic_);
|
|
||||||
|
|
||||||
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -302,11 +289,11 @@ private:
|
|||||||
eprosima::fastdds::dds::DataWriterQos datawriter_qos_;
|
eprosima::fastdds::dds::DataWriterQos datawriter_qos_;
|
||||||
|
|
||||||
rmw_dds_common::GraphCache graphCache_;
|
rmw_dds_common::GraphCache graphCache_;
|
||||||
std::unique_ptr<ParticipantListener> participant_listener_;
|
ParticipantListener participant_listener_;
|
||||||
std::unique_ptr<DatareaderListener> datareader_listener_;
|
DatareaderListener datareader_listener_;
|
||||||
|
|
||||||
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> participant_info_typesupport_;
|
eprosima::fastdds::dds::TypeSupport participant_info_typesupport_;
|
||||||
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> microros_graph_info_typesupport_;
|
eprosima::fastdds::dds::TypeSupport microros_graph_info_typesupport_;
|
||||||
eprosima::fastdds::dds::DomainParticipant* participant_;
|
eprosima::fastdds::dds::DomainParticipant* participant_;
|
||||||
eprosima::fastdds::dds::Publisher* publisher_;
|
eprosima::fastdds::dds::Publisher* publisher_;
|
||||||
eprosima::fastdds::dds::Subscriber* subscriber_;
|
eprosima::fastdds::dds::Subscriber* subscriber_;
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ bool Agent::create(
|
|||||||
int argc,
|
int argc,
|
||||||
char** argv)
|
char** argv)
|
||||||
{
|
{
|
||||||
stop();
|
|
||||||
|
|
||||||
bool result = xrce_dds_agent_instance_.create(argc, argv);
|
bool result = xrce_dds_agent_instance_.create(argc, argv);
|
||||||
|
|
||||||
if (result && !initialized)
|
if (result && !initialized)
|
||||||
@@ -190,22 +188,21 @@ void Agent::run()
|
|||||||
void Agent::stop()
|
void Agent::stop()
|
||||||
{
|
{
|
||||||
xrce_dds_agent_instance_.stop();
|
xrce_dds_agent_instance_.stop();
|
||||||
graph_manager_map_.clear();
|
|
||||||
|
for (auto & element : graph_manager_map_)
|
||||||
|
{
|
||||||
|
element.second.stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<graph_manager::GraphManager> Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id)
|
graph_manager::GraphManager* Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id)
|
||||||
{
|
{
|
||||||
auto it = graph_manager_map_.find(domain_id);
|
auto it = graph_manager_map_.find(domain_id);
|
||||||
|
|
||||||
if (it != graph_manager_map_.end()) {
|
if (it != graph_manager_map_.end()) {
|
||||||
return it->second;
|
return &it->second;
|
||||||
}else{
|
}else{
|
||||||
return graph_manager_map_.insert(
|
return &graph_manager_map_.emplace(domain_id, domain_id).first->second;
|
||||||
std::make_pair(
|
|
||||||
domain_id,
|
|
||||||
std::make_shared<graph_manager::GraphManager>(domain_id)
|
|
||||||
)
|
|
||||||
).first->second;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,14 +28,14 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
|
|||||||
, mtx_()
|
, mtx_()
|
||||||
, cv_()
|
, cv_()
|
||||||
, graphCache_()
|
, graphCache_()
|
||||||
, participant_listener_(std::make_unique<ParticipantListener>(this))
|
, participant_listener_(this)
|
||||||
, datareader_listener_(std::make_unique<DatareaderListener>(this))
|
, datareader_listener_(this)
|
||||||
, participant_info_typesupport_(std::make_unique<
|
, participant_info_typesupport_()
|
||||||
eprosima::fastdds::dds::TypeSupport>(new graph_manager::ParticipantEntitiesInfoTypeSupport()))
|
, microros_graph_info_typesupport_()
|
||||||
, microros_graph_info_typesupport_(std::make_unique<
|
|
||||||
eprosima::fastdds::dds::TypeSupport>(new graph_manager::MicrorosGraphInfoTypeSupport()))
|
|
||||||
{
|
{
|
||||||
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles();
|
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles();
|
||||||
|
participant_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::ParticipantEntitiesInfoTypeSupport();
|
||||||
|
microros_graph_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::MicrorosGraphInfoTypeSupport();
|
||||||
|
|
||||||
// Create DomainParticipant
|
// Create DomainParticipant
|
||||||
eprosima::fastdds::dds::DomainParticipantQos participant_qos =
|
eprosima::fastdds::dds::DomainParticipantQos participant_qos =
|
||||||
@@ -55,11 +55,11 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
|
|||||||
|
|
||||||
eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none();
|
eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none();
|
||||||
participant_ = eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->
|
participant_ = eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->
|
||||||
create_participant(domain_id_, participant_qos, participant_listener_.get(), par_mask);
|
create_participant(domain_id_, participant_qos, &participant_listener_, par_mask);
|
||||||
|
|
||||||
// Register participant within typesupport
|
// Register participant within typesupport
|
||||||
participant_->register_type(*participant_info_typesupport_);
|
participant_->register_type(participant_info_typesupport_);
|
||||||
participant_->register_type(*microros_graph_info_typesupport_);
|
participant_->register_type(microros_graph_info_typesupport_);
|
||||||
|
|
||||||
// Create publisher
|
// Create publisher
|
||||||
publisher_ = participant_->create_publisher(
|
publisher_ = participant_->create_publisher(
|
||||||
@@ -71,11 +71,11 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
|
|||||||
|
|
||||||
// Create topics
|
// Create topics
|
||||||
ros_discovery_topic_ = participant_->create_topic("ros_discovery_info",
|
ros_discovery_topic_ = participant_->create_topic("ros_discovery_info",
|
||||||
participant_info_typesupport_->get_type_name(),
|
participant_info_typesupport_.get_type_name(),
|
||||||
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
|
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
|
||||||
|
|
||||||
ros_to_microros_graph_topic_ = participant_->create_topic("ros_to_microros_graph",
|
ros_to_microros_graph_topic_ = participant_->create_topic("ros_to_microros_graph",
|
||||||
microros_graph_info_typesupport_->get_type_name(),
|
microros_graph_info_typesupport_.get_type_name(),
|
||||||
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
|
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
|
||||||
|
|
||||||
// Create datawriters
|
// Create datawriters
|
||||||
@@ -116,7 +116,7 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
|
|||||||
|
|
||||||
ros_discovery_datareader_ =
|
ros_discovery_datareader_ =
|
||||||
subscriber_->create_datareader(ros_discovery_topic_,
|
subscriber_->create_datareader(ros_discovery_topic_,
|
||||||
datareader_qos, datareader_listener_.get());
|
datareader_qos, &datareader_listener_);
|
||||||
|
|
||||||
// Set graph cache on change callback function
|
// Set graph cache on change callback function
|
||||||
graphCache_.set_on_change_callback([this]()
|
graphCache_.set_on_change_callback([this]()
|
||||||
|
|||||||
Reference in New Issue
Block a user