PR2 / pr2_controllers

The controllers that run in realtime on the PR2 and supporting packages.
47 stars 35 forks source link

Arm environment server makes too many service calls (ros ticket #4100) #302

Closed ahendrix closed 11 years ago

ahendrix commented 11 years ago

I'm running the collision free arm code in the burn in room, and we discovered the code is making dozens of service calls every second. I'm commanding trajectories at about 1Hz, using the collision free arm planner.

We noticed a problem where we had 200 name lookups/second on the firewall, and that each service call corresponded to a name lookup.

The planning_environment/environment_server node has 7 service calls. Can these be changed to latched topics? For persistent use, this should cause less hits to the master and the network.

For the burn in room, we could see lots of service calls quickly.

{{{ get_trajectory_validityservice = privatehandle.advertiseService("get_trajectory_validity", &E\ nvironmentServer::getTrajectoryValidity, this); get_env_safetyservice = privatehandle.advertiseService("get_environment_safety", &Environment\ Server::getEnvironmentSafety, this); get_execution_safetyservice = privatehandle.advertiseService("get_execution_safety", &Environ\ mentServer::getTrajectoryValidity, this); set_constraintsservice = privatehandle.advertiseService("set_constraints", &EnvironmentServer\ ::setConstraints, this); get_joints_in_groupservice = privatehandle.advertiseService("get_joints_in_group", &Environme\ ntServer::getJointsInGroup, this);

get_robot_state_service_ = private_handle_.advertiseService("get_robot_state", &EnvironmentServer\

::getRobotState, this); get_state_validityservice = privatehandle.advertiseService("get_state_validity", &Environment\ Server::getStateValidity, this); allowed_contact_regionspublisher = privatehandle.advertise("\ allowed_contact_regions_array", 128); }}}

trac data:

ahendrix commented 11 years ago

[gjones] Are you setting the service calls to be persistent? In python in the ServiceProxy this means setting the third argument, currently defaulted to false, to true. I'm almost positive that a name lookup shouldn't happen if using a persistent service - I'm less sure whether or not a latched topic would represent a performance improvement.

ahendrix commented 11 years ago

[sachinc] I changed the service calls from the collision free controller to persistent service calls. This should fix the problem. Reopen this ticket if you still see issues.