00001 /********************************************************************* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright (c) 2008, Willow Garage, Inc. 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * * Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the following 00015 * disclaimer in the documentation and/or other materials provided 00016 * with the distribution. 00017 * * Neither the name of Willow Garage nor the names of its 00018 * contributors may be used to endorse or promote products derived 00019 * from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00024 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00025 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00026 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00027 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00028 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00031 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00032 * POSSIBILITY OF SUCH DAMAGE. 00033 *********************************************************************/ 00034 00035 /* Author: Wim Meeussen */ 00036 00037 #include "pr2_doors_common/door_functions.h" 00038 #include "pr2_doors_actions/action_open_door.h" 00039 00040 00041 using namespace tf; 00042 using namespace KDL; 00043 using namespace ros; 00044 using namespace std; 00045 using namespace door_handle_detector; 00046 using namespace pr2_doors_common; 00047 using namespace actionlib; 00048 00049 static const string fixed_frame = "odom_combined"; 00050 00051 00052 OpenDoorAction::OpenDoorAction(tf::TransformListener& tf) : 00053 tf_(tf), 00054 action_server_(ros::NodeHandle(), 00055 "open_door", 00056 boost::bind(&OpenDoorAction::execute, this, _1)) 00057 { 00058 ros::NodeHandle node; 00059 tff_pub_ = node.advertise<tff_controller::TaskFrameFormalism>("r_arm_cartesian_tff_controller/command", 10); 00060 }; 00061 00062 00063 00064 OpenDoorAction::~OpenDoorAction() 00065 {}; 00066 00067 00068 00069 void OpenDoorAction::execute(const door_msgs::DoorGoalConstPtr& goal) 00070 { 00071 ROS_INFO("OpenDoorAction: execute"); 00072 00073 // open door 00074 tff_door_.mode.linear.x = tff_door_.VELOCITY; 00075 tff_door_.mode.linear.y = tff_door_.FORCE; 00076 tff_door_.mode.linear.z = tff_door_.FORCE; 00077 tff_door_.mode.angular.x = tff_door_.FORCE; 00078 tff_door_.mode.angular.y = tff_door_.FORCE; 00079 tff_door_.mode.angular.z = tff_door_.POSITION; 00080 00081 tff_door_.value.linear.x = getDoorDir(goal->door) * 0.45; 00082 tff_door_.value.linear.y = 0.0; 00083 tff_door_.value.linear.z = 0.0; 00084 tff_door_.value.angular.x = 0.0; 00085 tff_door_.value.angular.y = 0.0; 00086 tff_door_.value.angular.z = 0.0; 00087 00088 // open door 00089 while (ros::ok() && !action_server_.isPreemptRequested()){ 00090 tff_pub_.publish(tff_door_); 00091 Duration(0.1).sleep(); 00092 } 00093 00094 // preempted 00095 ROS_INFO("ActionOpenDoor: Preempted"); 00096 00097 action_server_.setPreempted(); 00098 } 00099