NODE manipulation_unit
mission manager bridge between the robocluedo ROSPlan framework and the navigation controller
This node is a bridge between the ROSPlan framework, which assumes some other node implemented the service for the navigation from rosplan, and the navigation system: a service call into a service call.
The task of this node is quite simple: when received a request from the ROSPlan module, the node associates the cartesian coordinates of the pointed waypoint, then calls the navigation service; when the navigation has finished, the node adapt and returns the response to ROSPlan.
There are also other sub-tasks performed by this node: listening for the markers in order to find the coordinates of the waypoints, for instance, using a one-shot subscriber. Or also to initialise the navigation system.
- Attention
- This implementation doesn’t supports the develop mode. 
- Authors
- Francesco Ganci 
- Version
- v1.1 
Defines
- 
NODE_NAME
- 
LOGSQUARE(str)
- 
OUTLABEL
- 
TLOG(msg)
- 
TWARN(msg)
- 
TERR(msg)
- 
SS(chr)
- 
SSS(el)
- 
SERVICE_ROBOPLAN_MANIP
- 
SERVICE_MANIP
- 
TOPIC_MARMERS
- 
POSE_HOME
- 
POSE_EXTENDED
- 
POSE_LOW
- 
POSE_FRONT_LOW
- 
POSE_FRONT_HIGH
- 
class node_manipulation_unit
- Public Functions - 
inline node_manipulation_unit()
- node constructor 
 - 
inline void spin()
- spin function: just wait for shutdown 
 - 
inline bool cbk_roboplan_manip(robocluedo_rosplan_msgs::ManipulationCommand::Request &req, robocluedo_rosplan_msgs::ManipulationCommand::Response &res)
- service implementation for the rosplan interface - this service behaves as a simple delegate, which takes the message from the ROSPlan side, associates a posture of the command which also depends on the quote of the selected marker, and then calls the real manipulation controller to perform the movement of the arm. - Note - the ROSplan action calls this function, in RCL#2, when the robot stands in front of a marker. - Parameters
- req – the command, ROSPlan side 
- res – the response to ROSPlan 
 
- Returns
- always true 
 
 - 
inline void cbk_markers(const visualization_msgs::MarkerArray::ConstPtr &data)
- “one-shot” listener for the markers from the Oracle - The callback is called once: after having read the markers from the topic, it shuts down the subscriber, in order to save a bit of performance. - Todo:
- currently the algorithm just distinguishes between “high” markers and low markers; this approach could be improved in order to perform a better manipulation. 
 - Parameters
- data – the array of markers 
 
 - Private Members - 
ros::NodeHandle nh
- ROS node handle. 
 - 
ros::ServiceServer srv_roboplan_manip
- ROSPlan manipulation controller service. 
 - 
ros::ServiceClient cl_manip
- manipulation controller client 
 - 
ros::Subscriber sub_markers
- subscription handle to markers from the Oracle 
 - 
bool found_markers = false
- signal fro the markers listener 
 - 
std::map<std::string, robocluedo_movement_controller_msgs::Pose2D> waypoints
- positions of the waypoints 
 - 
std::map<std::string, bool> waypoint_heigth
- heigth of the markers 
 
- 
inline node_manipulation_unit()