00001 /* 00002 * avoid_joint_limits.h 00003 * 00004 * Created on: Sep 23, 2013 00005 * Author: dsolomon 00006 */ 00007 /* 00008 * Software License Agreement (Apache License) 00009 * 00010 * Copyright (c) 2013, Southwest Research Institute 00011 * 00012 * Licensed under the Apache License, Version 2.0 (the "License"); 00013 * you may not use this file except in compliance with the License. 00014 * You may obtain a copy of the License at 00015 * 00016 * http://www.apache.org/licenses/LICENSE-2.0 00017 * 00018 * Unless required by applicable law or agreed to in writing, software 00019 * distributed under the License is distributed on an "AS IS" BASIS, 00020 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00021 * See the License for the specific language governing permissions and 00022 * limitations under the License. 00023 */ 00024 00025 #ifndef JOINT_VEL_LIMITS_H_ 00026 #define JOINT_VEL_LIMITS_H_ 00027 00028 #include "constrained_ik/constraint.h" 00029 #include <vector> 00030 00031 namespace constrained_ik 00032 { 00033 namespace constraints 00034 { 00035 00038 class JointVelLimits: public Constraint 00039 { 00040 public: 00041 JointVelLimits(); 00042 virtual ~JointVelLimits() {}; 00043 00048 virtual Eigen::MatrixXd calcJacobian(); 00049 00055 virtual Eigen::VectorXd calcError(); 00056 00061 virtual bool checkStatus() const { return limited_joints_.size() == 0; } 00062 00068 virtual void init(const Constrained_IK* ik); 00069 00073 virtual void reset(); 00074 00079 virtual void update(const SolverState &state); 00080 00084 double getWeight() {return weight_;}; 00085 00089 void setWeight(const double &weight) {weight_ = weight;}; 00090 00091 protected: 00092 std::vector<int> limited_joints_; // list of joints that will be constrained 00093 Eigen::VectorXd jvel_, vel_limits_; // joint velocity 00094 double weight_, timestep_; 00095 00096 }; 00097 00098 } /* namespace constraints */ 00099 } /* namespace constrained_ik */ 00100 #endif /* JOINT_VEL_LIMITS_H_ */