NODE manipulation_unit

manipulator high-level motion planning

This is node has been ment, in the RCL#2 project, to act as a communication mean between the ROSPlan framework and the real manipulation controller, but since the RCL#3 project doesn’t require (so far) a explicit manipulation capability from ROSPlan, the node has here another function: managing the movement of the arm during the exploration of the environment.

To be more precise, this new version of the manipulation uit, when turned on, makes the robotic manipulator to assume a pose randomly choosen while the robot is moving. This enables the robot to get also hints that, with a more deterministic movement of the camera, could be missed since the robot acts always in the same way. There are some unluky cases, but most of times it seems to work fine.

Authors

Francesco Ganci

Version

v1.0

Note

This implementation supports the develop mode: waitey, debug print

Defines

NODE_NAME
LOGSQUARE(str)
OUTLABEL
TLOG(msg)
TWARN(msg)
TERR(msg)
DEVELOP_MODE
DEVELOP_PRINT
WTLOG(msg)
WTWARN(msg)
WTERR(msg)
DEVELOP_WAIKEY
WAITKEY
SS(chr)
SSS(el)
SERVICE_ROBOPLAN_MANIP
SERVICE_MANIP
TOPIC_MARMERS
TOPIC_MANIP_ASYNC
SERVICE_RANDOM_ARM_SWITCH
POSE_HOME
POSE_CAM_LEFT
POSE_CAM_RIGHT
POSE_CAM_BACK
POSE_CAM_LOW
POSE_CAM_LOW_LEFT
POSE_CAM_LOW_BACK
POSE_CAM_LOW_RIGHT
POSE_HOME_LOW

Functions

void shut_msg(int sig)
int main(int argc, char *argv[])
class node_manipulation_unit

Public Functions

inline node_manipulation_unit()

node constructor

inline void spin()

spin function: send a new pose each 5 seconds

When activated, the unit sends a new pose, randomly taken from the set of the valid ones, to the manipulation controller, and makes it running asynchronosly.

Note

currently the manipulation controller in asynchronous mode doesn’t implement a check for the progress, so the node sends a new position with a regular time interval which is assumed to be large enough to complete the transition from one position to another.

inline bool cbk_auto_manip_switch(std_srvs::SetBool::Request &req, std_srvs::SetBool::Response &res)

switch the automatic manipulation

the service allows to switch on and off the random automatic movements of the arm.

Private Members

ros::NodeHandle nh

ROS node handle.

ros::ServiceClient cl_manip

manipulation controller client

ros::Publisher pub_motion_async

subscription for the async motion

ros::ServiceServer srv_auto_manip_switch

switch for the authomatic manipulation

bool auto_manip_active = false

automatic manipulation on? (default: not active)