Skip to content
This repository has been archived by the owner on Nov 13, 2017. It is now read-only.

Enable Octomap diff #602

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,12 @@ class OccupancyMapMonitor
return active_;
}

/** \brief Enable sending diffs of the occupancy map */
void enableOctomapDiff(bool enable) { octomap_diff_enable = enable; }

/** \brief Returns if sending diffs of the occupancy map is enabled */
bool isOctomapDiffEnabled() const { return octomap_diff_enable; }

private:

void initialize();
Expand All @@ -141,6 +147,7 @@ class OccupancyMapMonitor

OccMapTreePtr tree_;
OccMapTreeConstPtr tree_const_;
bool octomap_diff_enable;

boost::scoped_ptr<pluginlib::ClassLoader<OccupancyMapUpdater> > updater_plugin_loader_;
std::vector<OccupancyMapUpdaterPtr> map_updaters_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ void OccupancyMapMonitor::initialize()
tree_.reset(new OccMapTree(map_resolution_));
tree_const_ = tree_;

octomap_diff_enable = false;
if (nh_.getParam("octomap_diff", octomap_diff_enable))
{
if (octomap_diff_enable) ROS_INFO("Octomap diff enabled");
tree_->enableChangeDetection(octomap_diff_enable);
}

XmlRpc::XmlRpcValue sensor_list;
if (nh_.getParam("sensors", sensor_list))
{
Expand Down
15 changes: 15 additions & 0 deletions planning/planning_scene_monitor/src/planning_scene_monitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,11 @@ void planning_scene_monitor::PlanningSceneMonitor::scenePublishingThread()
occupancy_map_monitor::OccMapTree::ReadLock lock;
if (octomap_monitor_) lock = octomap_monitor_->getOcTreePtr()->reading();
scene_->getPlanningSceneMsg(msg);
if (octomap_monitor_)
{
octomap_monitor_->getOcTreePtr()->resetChangeDetection();
octomap_monitor_->getOcTreePtr()->enableChangeDetection(octomap_monitor_->isOctomapDiffEnabled());
}
}
planning_scene_publisher_.publish(msg);
ROS_DEBUG("Published the full planning scene: '%s'", msg.name.c_str());
Expand All @@ -339,6 +344,11 @@ void planning_scene_monitor::PlanningSceneMonitor::scenePublishingThread()
occupancy_map_monitor::OccMapTree::ReadLock lock;
if (octomap_monitor_) lock = octomap_monitor_->getOcTreePtr()->reading();
scene_->getPlanningSceneDiffMsg(msg);
if (octomap_monitor_)
{
octomap_monitor_->getOcTreePtr()->resetChangeDetection();
octomap_monitor_->getOcTreePtr()->enableChangeDetection(octomap_monitor_->isOctomapDiffEnabled());
}
}
boost::recursive_mutex::scoped_lock prevent_shape_cache_updates(shape_handles_lock_); // we don't want the transform cache to update while we are potentially changing attached bodies
scene_->setAttachedBodyUpdateCallback(robot_state::AttachedBodyCallback());
Expand All @@ -357,6 +367,11 @@ void planning_scene_monitor::PlanningSceneMonitor::scenePublishingThread()
occupancy_map_monitor::OccMapTree::ReadLock lock;
if (octomap_monitor_) lock = octomap_monitor_->getOcTreePtr()->reading();
scene_->getPlanningSceneMsg(msg);
if (octomap_monitor_)
{
octomap_monitor_->getOcTreePtr()->resetChangeDetection();
octomap_monitor_->getOcTreePtr()->enableChangeDetection(octomap_monitor_->isOctomapDiffEnabled());
}
}
publish_msg = true;
}
Expand Down