Octomap through planning scene monitor

470 views
Skip to first unread message

Hemang Chawla

unread,
Jul 27, 2017, 4:25:57 PM7/27/17
to MoveIt! Users
Hi,

My objective is to get the updated scene octomap at a fast rate.

I am currently using the get_planning_scene service through the ros service request. However, it is very slow for regularly obtaining the collision octomap from the scene. This is as shown in answers.ros.org/question/256222/how-to-save-octomap-from-moveit/
However it is too slow for real-time use of the octomap

Client_get_planning_scene = nh.serviceClient<moveit_msgs::GetPlanningScene>("/get_planning_scene", true);
scene_srv
.request.components.components = scene_srv.request.components.OCTOMAP;
if( Client_get_planning_scene.call(scene_srv) )
 
{
    ROS_INFO
("Planning_scene received");
    moveit_msgs
::PlanningScene scene_msg = scene_srv.response.scene;
    octomap_msgs
::OctomapWithPose octomap_pose = scene_msg.world.octomap;
    octomap_msgs
::Octomap octomap = octomap_pose.octomap;
    octomap
::AbstractOcTree* abstract_tree = octomap_msgs::msgToMap(octomap);
    collision_octree
= (octomap::OcTree*)abstract_tree;
 
}
 
else
 
{
    ROS_WARN
("Failed to call service /get_planning_scene");
    nh
.shutdown();
 
}



Is there a faster way to do this?
There is an occupancy map monitor as well in moveit. Is that to be used? How?

Can the planning scene monitor be used?

  planning_scene_monitor
::PlanningSceneMonitorPtr planning_scene_monitor_;
  planning_scene_monitor_
.reset( new planning_scene_monitor::PlanningSceneMonitor("robot_description") );
 
const std::string PLANNING_SCENE_SERVICE = "get_planning_scene";
  planning_scene_monitor_
->requestPlanningSceneState(PLANNING_SCENE_SERVICE);
  planning_scene_monitor_
->startWorldGeometryMonitor();
  planning_scene_monitor
::LockedPlanningSceneRW psrw = planning_scene_monitor::LockedPlanningSceneRW(planning_scene_monitor_);
  planning_scene
::PlanningScenePtr scene = psrw;


Reply all
Reply to author
Forward
0 new messages