00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef GRIPPER_CLICK_3D_GRIPPER
00031 #define GRIPPER_CLICK_3D_GRIPPER
00032
00033 #include "pr2_gripper_click/gripper_click_rviz_ui.h"
00034
00035
00036 #include <tf/transform_datatypes.h>
00037
00038 #include <stereo_msgs/DisparityImage.h>
00039 #include <sensor_msgs/CameraInfo.h>
00040
00041
00042 namespace Ogre {
00043 class SceneNode;
00044 }
00045
00046 namespace rviz_interaction_tools {
00047 class DisparityRenderer;
00048 }
00049
00050 namespace pr2_gripper_click {
00051
00052 class GripperClick3DGripper : public GripperClickPlugin<GripperClickPickupAction>
00053 {
00054
00055 public:
00056
00057 GripperClick3DGripper();
00058
00059 ~GripperClick3DGripper();
00060
00061
00062 virtual void init( rviz::VisualizationManager *vis_manager, Ogre::SceneManager* scene_manager, Ogre::SceneNode* camera_node );
00063
00064 virtual bool setGoal( const GripperClickPickupGoal::ConstPtr &goal );
00065
00066 virtual bool getResult(GripperClickPickupResult &result);
00067
00068 virtual void update(float wall_dt, float ros_dt);
00069
00070
00071 virtual bool hasValidResult() { return valid_transform_; }
00072
00073
00074 virtual void show( );
00075 virtual void hide( );
00076
00077 virtual void getGripperParams( bool &visible, Ogre::Vector3 &position, Ogre::Quaternion &orientation, float &angle );
00078
00079 virtual void onRenderWindowMouseEvents( wxMouseEvent& event, Ogre::Ray &mouse_ray );
00080
00081 protected:
00082
00083 struct ClickInfo
00084 {
00085 ClickInfo() : down_(false), x_(0), y_(0), ref_(0.0) {}
00086 bool down_;
00087 int x_, y_;
00088 float ref_;
00089 };
00090
00091
00092
00093
00094 btTransform computeOrientation();
00095
00096 float gripper_angle_;
00097
00098 float gripper_roll_;
00099
00100 float gripper_approach_;
00101
00102 ClickInfo rb_, mb_, lb_, dlb_, lbdown_;
00103
00104 bool valid_transform_;
00105
00106 Ogre::ManualObject* line_object_;
00107
00108 stereo_msgs::DisparityImage disparity_image_;
00109 sensor_msgs::CameraInfo camera_info_;
00110
00111 Ogre::SceneNode *scene_node_;
00112 };
00113
00114 }
00115
00116 #endif