Skip to content

Commit e7929c1

Browse files
committed
fix frontend delta publishing
1 parent d11c782 commit e7929c1

File tree

2 files changed

+31
-28
lines changed

2 files changed

+31
-28
lines changed

hydra_ros/include/hydra_ros/frontend/ros_frontend_publisher.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,11 @@
3434
* -------------------------------------------------------------------------- */
3535
#pragma once
3636
#include <hydra/frontend/graph_builder.h>
37-
#include <kimera_pgmo_ros/conversion/mesh_delta.h>
3837
#include <pose_graph_tools_ros/conversions.h>
3938

4039
#include <map>
41-
#include <queue>
4240

41+
#include <kimera_pgmo_msgs/msg/mesh_delta.hpp>
4342
#include <kimera_pgmo_msgs/srv/mesh_delta_query.hpp>
4443

4544
#include "hydra_ros/utils/dsg_streaming_interface.h"
@@ -49,6 +48,9 @@ namespace hydra {
4948
class RosFrontendPublisher : public GraphBuilder::Sink {
5049
public:
5150
using MeshDeltaSrv = kimera_pgmo_msgs::srv::MeshDeltaQuery;
51+
using MeshDeltaRequest = kimera_pgmo_msgs::srv::MeshDeltaQuery::Request::SharedPtr;
52+
using MeshDeltaResponse = kimera_pgmo_msgs::srv::MeshDeltaQuery::Response::SharedPtr;
53+
using MeshDeltaMsg = kimera_pgmo_msgs::msg::MeshDelta;
5254

5355
struct Config {
5456
//! @brief Configuration for dsg publisher
@@ -65,16 +67,14 @@ class RosFrontendPublisher : public GraphBuilder::Sink {
6567
std::string printInfo() const override { return "RosFrontendPublisher"; }
6668

6769
protected:
68-
void processMeshDeltaQuery(const MeshDeltaSrv::Request::SharedPtr req,
69-
MeshDeltaSrv::Response::SharedPtr resp);
70+
void processMeshDeltaQuery(const MeshDeltaRequest req, MeshDeltaResponse resp);
7071

7172
std::unique_ptr<DsgSender> dsg_sender_;
72-
mutable std::map<uint16_t, kimera_pgmo::MeshDelta::Ptr> stored_delta_;
73-
7473
pose_graph_tools::PoseGraphPublisher mesh_graph_pub_;
75-
kimera_pgmo::PgmoMeshDeltaPublisher mesh_update_pub_;
74+
rclcpp::Publisher<MeshDeltaMsg>::SharedPtr mesh_update_pub_;
7675
rclcpp::Service<MeshDeltaSrv>::SharedPtr mesh_delta_server_;
77-
rclcpp::TypeAdapter<kimera_pgmo::MeshDelta, kimera_pgmo_msgs::msg::MeshDelta>
78-
mesh_delta_converter_;
76+
77+
mutable std::map<uint16_t, MeshDeltaMsg::SharedPtr> stored_delta_;
7978
};
79+
8080
} // namespace hydra

hydra_ros/src/frontend/ros_frontend_publisher.cpp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939
#include <config_utilities/printing.h>
4040
#include <config_utilities/validation.h>
4141
#include <hydra/common/global_info.h>
42+
#include <kimera_pgmo_ros/conversion/mesh_delta.h>
4243

4344
namespace hydra {
4445

45-
using kimera_pgmo::MeshDeltaTypeAdapter;
4646
using pose_graph_tools::PoseGraphTypeAdapter;
4747
using BaseInterface = rclcpp::node_interfaces::NodeBaseInterface;
4848
using rclcpp::CallbackGroupType;
@@ -66,7 +66,8 @@ void declare_config(RosFrontendPublisher::Config& config) {
6666
}
6767

6868
RosFrontendPublisher::RosFrontendPublisher(ianvs::NodeHandle nh)
69-
: config(config::checkValid(get_config())) {
69+
: config(config::checkValid(get_config())),
70+
dsg_sender_(new DsgSender(config.dsg_sender, nh)) {
7071
auto group = nh.as<BaseInterface>()->create_callback_group(
7172
CallbackGroupType::MutuallyExclusive);
7273
mesh_delta_server_ =
@@ -75,46 +76,48 @@ RosFrontendPublisher::RosFrontendPublisher(ianvs::NodeHandle nh)
7576
this,
7677
rclcpp::ServicesQoS(),
7778
group);
78-
dsg_sender_ = std::make_unique<DsgSender>(config.dsg_sender, nh);
79-
mesh_graph_pub_ = nh.create_publisher<PoseGraphTypeAdapter>(
80-
"mesh_graph_incremental", rclcpp::QoS(100).transient_local());
81-
mesh_update_pub_ = nh.create_publisher<MeshDeltaTypeAdapter>(
82-
"full_mesh_update", rclcpp::QoS(100).transient_local());
79+
80+
const auto qos = rclcpp::QoS(100).transient_local();
81+
mesh_graph_pub_ =
82+
nh.create_publisher<PoseGraphTypeAdapter>("mesh_graph_incremental", qos);
83+
mesh_update_pub_ = nh.create_publisher<MeshDeltaMsg>("full_mesh_update", qos);
8384
}
8485

8586
void RosFrontendPublisher::call(uint64_t timestamp_ns,
8687
const DynamicSceneGraph& graph,
8788
const BackendInput& backend_input) const {
8889
// TODO(nathan) make sure pgmo stamps the deformation graph
8990
mesh_graph_pub_->publish(backend_input.deformation_graph);
91+
9092
if (backend_input.mesh_update) {
9193
backend_input.mesh_update->timestamp_ns = timestamp_ns;
92-
mesh_update_pub_->publish(*backend_input.mesh_update);
93-
stored_delta_.insert(
94-
{backend_input.mesh_update->sequence_number, backend_input.mesh_update});
95-
if (config.mesh_delta_queue_size > 0 &&
96-
stored_delta_.size() > static_cast<size_t>(config.mesh_delta_queue_size)) {
94+
auto delta_msg = std::make_shared<MeshDeltaMsg>();
95+
kimera_pgmo::conversions::to_ros(*backend_input.mesh_update, *delta_msg);
96+
mesh_update_pub_->publish(*delta_msg);
97+
98+
stored_delta_.insert({backend_input.mesh_update->info.sequence_number, delta_msg});
99+
if (config.mesh_delta_queue_size &&
100+
stored_delta_.size() > config.mesh_delta_queue_size) {
97101
stored_delta_.erase(stored_delta_.begin());
98102
}
99103
}
100104

101105
dsg_sender_->sendGraph(graph, rclcpp::Time(timestamp_ns));
102106
}
103107

104-
void RosFrontendPublisher::processMeshDeltaQuery(
105-
const MeshDeltaSrv::Request::SharedPtr req,
106-
MeshDeltaSrv::Response::SharedPtr resp) {
107-
LOG(INFO) << "Received request for " << req->sequence_numbers.size()
108-
<< " mesh deltas...";
108+
void RosFrontendPublisher::processMeshDeltaQuery(const MeshDeltaRequest req,
109+
MeshDeltaResponse resp) {
110+
LOG(INFO) << "Received request for " << req->sequence_numbers.size() << " deltas...";
109111
for (const auto& seq : req->sequence_numbers) {
110112
auto& msg = resp->deltas.emplace_back();
111-
// Check TypeAdater documentation TODO(Yun)
112113
if (!stored_delta_.count(seq)) {
113114
LOG(ERROR) << "Mesh delta sequence " << seq << " not found";
114115
continue;
115116
}
116-
mesh_delta_converter_.convert_to_ros_message(*stored_delta_.at(seq), msg);
117+
118+
msg = *stored_delta_.at(seq);
117119
}
120+
118121
LOG(INFO) << "Responding with " << resp->deltas.size() << " deltas...";
119122
}
120123

0 commit comments

Comments
 (0)