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
4344namespace hydra {
4445
45- using kimera_pgmo::MeshDeltaTypeAdapter;
4646using pose_graph_tools::PoseGraphTypeAdapter;
4747using BaseInterface = rclcpp::node_interfaces::NodeBaseInterface;
4848using rclcpp::CallbackGroupType;
@@ -66,7 +66,8 @@ void declare_config(RosFrontendPublisher::Config& config) {
6666}
6767
6868RosFrontendPublisher::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
8586void 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