94 UPDATE_TRANSFORMS = 2,
101 UPDATE_SCENE = 8 + UPDATE_STATE + UPDATE_TRANSFORMS + UPDATE_GEOMETRY
132 const std::string& name =
"");
138 PlanningSceneMonitor(
const rclcpp::Node::SharedPtr& node,
const robot_model_loader::RobotModelLoaderPtr& rml,
139 const std::string& name =
"");
146 PlanningSceneMonitor(
const rclcpp::Node::SharedPtr& node,
const planning_scene::PlanningScenePtr& scene,
147 const std::string& robot_description,
const std::string& name =
"");
154 PlanningSceneMonitor(
const rclcpp::Node::SharedPtr& node,
const planning_scene::PlanningScenePtr& scene,
155 const robot_model_loader::RobotModelLoaderPtr& rml,
const std::string& name =
"");
162 return monitor_name_;
204 planning_scene::PlanningScenePtr
205 copyPlanningScene(
const moveit_msgs::msg::PlanningScene& diff = moveit_msgs::msg::PlanningScene());
211 bool updatesScene(
const planning_scene::PlanningSceneConstPtr& scene)
const;
217 bool updatesScene(
const planning_scene::PlanningScenePtr& scene)
const;
223 return robot_description_;
229 return default_robot_padd_;
235 return default_robot_scale_;
241 return default_object_padd_;
247 return default_attached_padd_;
261 void monitorDiffs(
bool flag);
266 void startPublishingPlanningScene(SceneUpdateType event,
267 const std::string& planning_scene_topic = MONITORED_PLANNING_SCENE_TOPIC);
270 void stopPublishingPlanningScene();
273 void setPlanningScenePublishingFrequency(
double hz);
278 return publish_planning_scene_frequency_;
285 return current_state_monitor_;
290 return current_state_monitor_;
298 void updateFrameTransforms();
303 void startStateMonitor(
const std::string& joint_states_topic = DEFAULT_JOINT_STATES_TOPIC,
304 const std::string& attached_objects_topic = DEFAULT_ATTACHED_COLLISION_OBJECT_TOPIC);
307 void stopStateMonitor();
313 void updateSceneWithCurrentState(
bool skip_update_if_locked =
false);
320 void setStateUpdateFrequency(
double hz);
325 if (dt_state_update_.count() > 0.0)
327 return 1.0 / dt_state_update_.count();
338 void startSceneMonitor(
const std::string& scene_topic = DEFAULT_PLANNING_SCENE_TOPIC);
347 bool requestPlanningSceneState(
const std::string& service_name = DEFAULT_PLANNING_SCENE_SERVICE);
356 void providePlanningSceneService(
const std::string& service_name = DEFAULT_PLANNING_SCENE_SERVICE);
359 void stopSceneMonitor();
369 void startWorldGeometryMonitor(
const std::string& collision_objects_topic = DEFAULT_COLLISION_OBJECT_TOPIC,
370 const std::string& planning_scene_world_topic = DEFAULT_PLANNING_SCENE_WORLD_TOPIC,
371 const bool load_octomap_monitor =
true);
374 void stopWorldGeometryMonitor();
377 void addUpdateCallback(
const std::function<
void(SceneUpdateType)>& fn);
380 void clearUpdateCallbacks();
383 void getMonitoredTopics(std::vector<std::string>& topics)
const;
388 return last_update_time_;
391 void publishDebugInformation(
bool flag);
394 void triggerSceneUpdateEvent(SceneUpdateType update_type);
401 bool waitForCurrentRobotState(
const rclcpp::Time& t,
double wait_time = 1.);
406 bool newPlanningSceneMessage(
const moveit_msgs::msg::PlanningScene& scene);
409 bool processCollisionObjectMsg(
const moveit_msgs::msg::CollisionObject::ConstSharedPtr& collision_object_msg,
410 const std::optional<moveit_msgs::msg::ObjectColor>& color_msg = std::nullopt);
413 bool processAttachedCollisionObjectMsg(
414 const moveit_msgs::msg::AttachedCollisionObject::ConstSharedPtr& attached_collision_object_msg);
420 void initialize(
const planning_scene::PlanningScenePtr& scene);
423 void lockSceneRead();
426 void unlockSceneRead();
430 void lockSceneWrite();
434 void unlockSceneWrite();
437 void configureCollisionMatrix(
const planning_scene::PlanningScenePtr& scene);
440 void configureDefaultPadding();
443 void newPlanningSceneWorldCallback(
const moveit_msgs::msg::PlanningSceneWorld::ConstSharedPtr& world);
446 void octomapUpdateCallback();
452 void currentWorldObjectUpdateCallback(
const collision_detection::World::ObjectConstPtr&
object,
455 void includeRobotLinksInOctree();
456 void excludeRobotLinksFromOctree();
458 void excludeWorldObjectsFromOctree();
459 void includeWorldObjectsInOctree();
460 void excludeWorldObjectFromOctree(
const collision_detection::World::ObjectConstPtr& obj);
461 void includeWorldObjectInOctree(
const collision_detection::World::ObjectConstPtr& obj);
463 void excludeAttachedBodiesFromOctree();
464 void includeAttachedBodiesInOctree();
468 bool getShapeTransformCache(
const std::string& target_frame,
const rclcpp::Time& target_time,
481 std::shared_ptr<rclcpp::Node>
node_;
534 std::vector<std::pair<occupancy_map_monitor::ShapeHandle, std::size_t> > >
537 std::vector<std::pair<occupancy_map_monitor::ShapeHandle, std::size_t> > >;
539 std::map<std::string, std::vector<std::pair<occupancy_map_monitor::ShapeHandle, const Eigen::Isometry3d*> > >;
552 void getUpdatedFrameTransforms(std::vector<geometry_msgs::msg::TransformStamped>& transforms);
555 void scenePublishingThread();
558 void onStateUpdate(
const sensor_msgs::msg::JointState::ConstSharedPtr& joint_state);
561 void stateUpdateTimerCallback();
564 void newPlanningSceneCallback(
const moveit_msgs::msg::PlanningScene::ConstSharedPtr& scene);
567 void getPlanningSceneServiceCallback(
const moveit_msgs::srv::GetPlanningScene::Request::SharedPtr& req,
568 const moveit_msgs::srv::GetPlanningScene::Response::SharedPtr& res);
570 void updatePublishSettings(
bool publish_geom_updates,
bool publish_state_updates,
bool publish_transform_updates,
571 bool publish_planning_scene,
double publish_planning_scene_hz);
574 std::atomic<bool> state_update_pending_;
577 std::mutex state_update_mutex_;
582 std::chrono::system_clock::time_point last_robot_state_update_wall_time_;
586 std::chrono::duration<double> dt_state_update_;
591 rclcpp::Duration shape_transform_cache_lookup_wait_time_;
596 rclcpp::TimerBase::SharedPtr state_update_timer_;
598 robot_model_loader::RobotModelLoaderPtr rm_loader_;
599 moveit::core::RobotModelConstPtr robot_model_;
603 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr callback_handler_;
610 rclcpp::Logger logger_;