planning_scene_world_storage.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2012, Willow Garage, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Willow Garage nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 /* Author: Ioan Sucan */
36 
38 
39 #include <utility>
40 
41 const std::string moveit_warehouse::PlanningSceneWorldStorage::DATABASE_NAME = "moveit_planning_scene_worlds";
43 
46 
48  : MoveItMessageStorage(std::move(conn))
49 {
51 }
52 
54 {
55  planning_scene_world_collection_ =
56  conn_->openCollectionPtr<moveit_msgs::PlanningSceneWorld>(DATABASE_NAME, "planning_scene_worlds");
57 }
58 
60 {
61  planning_scene_world_collection_.reset();
62  conn_->dropDatabase(DATABASE_NAME);
63  createCollections();
64 }
65 
66 void moveit_warehouse::PlanningSceneWorldStorage::addPlanningSceneWorld(const moveit_msgs::PlanningSceneWorld& msg,
67  const std::string& name)
68 {
69  bool replace = false;
70  if (hasPlanningSceneWorld(name))
71  {
72  removePlanningSceneWorld(name);
73  replace = true;
74  }
75  Metadata::Ptr metadata = planning_scene_world_collection_->createMetadata();
76  metadata->append(PLANNING_SCENE_WORLD_ID_NAME, name);
77  planning_scene_world_collection_->insert(msg, metadata);
78  ROS_DEBUG("%s planning scene world '%s'", replace ? "Replaced" : "Added", name.c_str());
79 }
80 
82 {
83  Query::Ptr q = planning_scene_world_collection_->createQuery();
84  q->append(PLANNING_SCENE_WORLD_ID_NAME, name);
85  std::vector<PlanningSceneWorldWithMetadata> psw = planning_scene_world_collection_->queryList(q, true);
86  return !psw.empty();
87 }
88 
90  std::vector<std::string>& names) const
91 {
92  getKnownPlanningSceneWorlds(names);
93  filterNames(regex, names);
94 }
95 
97 {
98  names.clear();
99  Query::Ptr q = planning_scene_world_collection_->createQuery();
100  std::vector<PlanningSceneWorldWithMetadata> planning_scene_worlds =
101  planning_scene_world_collection_->queryList(q, true, PLANNING_SCENE_WORLD_ID_NAME, true);
102  for (PlanningSceneWorldWithMetadata& planning_scene_world : planning_scene_worlds)
103  if (planning_scene_world->lookupField(PLANNING_SCENE_WORLD_ID_NAME))
104  names.push_back(planning_scene_world->lookupString(PLANNING_SCENE_WORLD_ID_NAME));
105 }
106 
108  const std::string& name) const
109 {
110  Query::Ptr q = planning_scene_world_collection_->createQuery();
111  q->append(PLANNING_SCENE_WORLD_ID_NAME, name);
112  std::vector<PlanningSceneWorldWithMetadata> psw = planning_scene_world_collection_->queryList(q, false);
113  if (psw.empty())
114  return false;
115  else
116  {
117  msg_m = psw.front();
118  return true;
119  }
120 }
121 
123  const std::string& new_name)
124 {
125  Query::Ptr q = planning_scene_world_collection_->createQuery();
126  q->append(PLANNING_SCENE_WORLD_ID_NAME, old_name);
127  Metadata::Ptr m = planning_scene_world_collection_->createMetadata();
128  m->append(PLANNING_SCENE_WORLD_ID_NAME, new_name);
129  planning_scene_world_collection_->modifyMetadata(q, m);
130  ROS_DEBUG("Renamed planning scene world from '%s' to '%s'", old_name.c_str(), new_name.c_str());
131 }
132 
134 {
135  Query::Ptr q = planning_scene_world_collection_->createQuery();
136  q->append(PLANNING_SCENE_WORLD_ID_NAME, name);
137  unsigned int rem = planning_scene_world_collection_->removeMessages(q);
138  ROS_DEBUG("Removed %u PlanningSceneWorld messages (named '%s')", rem, name.c_str());
139 }
moveit_warehouse::PlanningSceneWorldStorage::PlanningSceneWorldStorage
PlanningSceneWorldStorage(warehouse_ros::DatabaseConnection::Ptr conn)
Definition: planning_scene_world_storage.cpp:47
moveit_warehouse::PlanningSceneWorldStorage::reset
void reset()
Definition: planning_scene_world_storage.cpp:59
moveit_warehouse::PlanningSceneWorldStorage::addPlanningSceneWorld
void addPlanningSceneWorld(const moveit_msgs::PlanningSceneWorld &msg, const std::string &name)
Definition: planning_scene_world_storage.cpp:66
boost::shared_ptr< DatabaseConnection >
moveit_warehouse::PlanningSceneWorldStorage::DATABASE_NAME
static const std::string DATABASE_NAME
Definition: planning_scene_world_storage.h:82
moveit_warehouse::PlanningSceneWorldStorage::hasPlanningSceneWorld
bool hasPlanningSceneWorld(const std::string &name) const
Definition: planning_scene_world_storage.cpp:81
warehouse_ros::Metadata
ROS_DEBUG
#define ROS_DEBUG(...)
moveit_warehouse::PlanningSceneWorldStorage::getPlanningSceneWorld
bool getPlanningSceneWorld(PlanningSceneWorldWithMetadata &msg_m, const std::string &name) const
Get the constraints named name. Return false on failure.
Definition: planning_scene_world_storage.cpp:107
moveit_warehouse::PlanningSceneWorldStorage::removePlanningSceneWorld
void removePlanningSceneWorld(const std::string &name)
Definition: planning_scene_world_storage.cpp:133
planning_scene_world_storage.h
name
std::string name
moveit_warehouse::PlanningSceneWorldStorage::getKnownPlanningSceneWorlds
void getKnownPlanningSceneWorlds(std::vector< std::string > &names) const
Definition: planning_scene_world_storage.cpp:96
moveit_warehouse::PlanningSceneWorldStorage::renamePlanningSceneWorld
void renamePlanningSceneWorld(const std::string &old_name, const std::string &new_name)
Definition: planning_scene_world_storage.cpp:122
moveit_warehouse::PlanningSceneWorldStorage::createCollections
void createCollections()
Definition: planning_scene_world_storage.cpp:53
moveit_warehouse::MoveItMessageStorage
This class provides the mechanism to connect to a database and reads needed ROS parameters when appro...
Definition: moveit_message_storage.h:79
std
moveit_warehouse::PlanningSceneWorldStorage::PLANNING_SCENE_WORLD_ID_NAME
static const std::string PLANNING_SCENE_WORLD_ID_NAME
Definition: planning_scene_world_storage.h:83
warehouse_ros::Query


warehouse
Author(s): Ioan Sucan
autogenerated on Sun Nov 3 2024 03:28:07