Skip to content

Commit ad19ea5

Browse files
Add ability to move CollisionObjects (moveit#567)
1 parent 819e560 commit ad19ea5

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

core/include/moveit/task_constructor/stages/modify_planning_scene.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ class ModifyPlanningScene : public PropagatingEitherWay
8181
void addObject(const moveit_msgs::CollisionObject& collision_object);
8282
/// Remove an object from the planning scene
8383
void removeObject(const std::string& object_name);
84+
/// Move an object from the planning scene
85+
void moveObject(const moveit_msgs::CollisionObject& collision_object);
8486

8587
/// conviency methods accepting a single object name
8688
inline void attachObject(const std::string& object, const std::string& link);

core/src/stages/modify_planning_scene.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ void ModifyPlanningScene::removeObject(const std::string& object_name) {
7272
collision_objects_.push_back(obj);
7373
}
7474

75+
void ModifyPlanningScene::moveObject(const moveit_msgs::CollisionObject& collision_object) {
76+
if (collision_object.operation != moveit_msgs::CollisionObject::MOVE) {
77+
ROS_ERROR_STREAM_NAMED("ModifyPlanningScene", name() << ": moveObject is called with object's operation not set "
78+
"to MOVE -- ignoring the object");
79+
return;
80+
}
81+
collision_objects_.push_back(collision_object);
82+
}
83+
7584
void ModifyPlanningScene::allowCollisions(const Names& first, const Names& second, bool allow) {
7685
collision_matrix_edits_.push_back(CollisionMatrixPairs({ first, second, allow }));
7786
}
@@ -128,7 +137,7 @@ std::pair<InterfaceState, SubTrajectory> ModifyPlanningScene::apply(const Interf
128137
InterfaceState state(scene);
129138
SubTrajectory traj;
130139
try {
131-
// add/remove objects
140+
// add/remove/move objects
132141
for (auto& collision_object : collision_objects_)
133142
processCollisionObject(*scene, collision_object, invert);
134143

@@ -157,6 +166,8 @@ void ModifyPlanningScene::processCollisionObject(planning_scene::PlanningScene&
157166
const_cast<moveit_msgs::CollisionObject&>(object).operation = moveit_msgs::CollisionObject::REMOVE;
158167
else if (op == moveit_msgs::CollisionObject::REMOVE)
159168
throw std::runtime_error("cannot apply removeObject() backwards");
169+
else if (op == moveit_msgs::CollisionObject::MOVE)
170+
throw std::runtime_error("cannot apply moveObject() backwards");
160171
}
161172

162173
scene.processCollisionObjectMsg(object);

0 commit comments

Comments
 (0)