joint_trajectory_action.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  * Copyright (c) 2011
00003  * GPS GmbH
00004  *
00005  * Author:
00006  * Alexey Zakharov
00007  *
00008  *
00009  * This software is published under a dual-license: GNU Lesser General Public
00010  * License LGPL 2.1 and BSD license. The dual-license implies that users of this
00011  * code may choose which terms they prefer.
00012  *
00013  * Redistribution and use in source and binary forms, with or without
00014  * modification, are permitted provided that the following conditions are met:
00015  *
00016  * * Redistributions of source code must retain the above copyright
00017  * notice, this list of conditions and the following disclaimer.
00018  * * Redistributions in binary form must reproduce the above copyright
00019  * notice, this list of conditions and the following disclaimer in the
00020  * documentation and/or other materials provided with the distribution.
00021  * * Neither the name of GPS GmbH nor the names of its
00022  * contributors may be used to endorse or promote products derived from
00023  * this software without specific prior written permission.
00024  *
00025  * This program is free software: you can redistribute it and/or modify
00026  * it under the terms of the GNU Lesser General Public License LGPL as
00027  * published by the Free Software Foundation, either version 2.1 of the
00028  * License, or (at your option) any later version or the BSD license.
00029  *
00030  * This program is distributed in the hope that it will be useful,
00031  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00032  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00033  * GNU Lesser General Public License LGPL and the BSD license for more details.
00034  *
00035  * You should have received a copy of the GNU Lesser General Public
00036  * License LGPL and BSD license along with this program.
00037  *
00038  ******************************************************************************/
00039 
00040 
00041 #ifndef JOINTTRAJECTORYACTION_H
00042 #define JOINTTRAJECTORYACTION_H
00043 
00044 #include <ros/ros.h>
00045 #include <control_msgs/FollowJointTrajectoryAction.h>
00046 #include <sensor_msgs/JointState.h>
00047 #include <actionlib/server/simple_action_server.h>
00048 #include <brics_actuator/JointPositions.h>
00049 #include <brics_actuator/JointVelocities.h>
00050 
00051 namespace KDL
00052 {
00053 class Trajectory_Composite;
00054 }
00055 
00056 typedef actionlib::SimpleActionServer<control_msgs::FollowJointTrajectoryAction> Server;
00057 
00058 class JointStateObserver;
00059 
00060 class JointTrajectoryAction
00061 {
00062 public:
00063     JointTrajectoryAction(JointStateObserver* jointStateObserver);
00064     JointTrajectoryAction(JointStateObserver* youbot,
00065                           double velocityGain, double positionGain, double frequency);
00066     JointTrajectoryAction(const JointTrajectoryAction& orig);
00067     virtual ~JointTrajectoryAction();
00068 
00069     void execute(const control_msgs::FollowJointTrajectoryGoalConstPtr& goal, Server* as);
00070 
00071     void jointStateCallback(const sensor_msgs::JointState& joint_state);
00072     void jointStateCallback(const brics_actuator::JointPositions& position,
00073                             const brics_actuator::JointVelocities& velocity);
00074 
00075     void setVelocityGain(double velocityGain);
00076     double getVelocityGain() const;
00077 
00078 
00079     void setPositionGain(double positionGain);
00080     double getPositionGain() const;
00081 
00082     void setFrequency(double frequency);
00083     double getFrequency() const;
00084 
00085 
00086 
00087 private:
00088 
00089     double velocityGain;
00090     double positionGain;
00091     double frequency;
00092 
00093     sensor_msgs::JointState current_state;
00094     JointStateObserver* jointStateObserver;
00095 
00096 private:
00097 
00098     double calculateVelocity(double actualAngle,
00099                              double actualVelocity,
00100                              const KDL::Trajectory_Composite& trajectoryComposite,
00101                              double elapsedTimeInSec);
00102 
00103     void controlLoop(const std::vector<double>& actualJointAngles,
00104                      const std::vector<double>& actualJointVelocities,
00105                      const KDL::Trajectory_Composite* trajectoryComposite,
00106                      int numberOfJoints,
00107                      ros::Time startTime,
00108                      std::vector<double>& velocities);
00109 
00110     void setTargetTrajectory(double angle1,
00111                              double angle2,
00112                              double duration,
00113                              KDL::Trajectory_Composite& trajectoryComposite);
00114 
00115 };
00116 
00117 #endif  /* JOINTTRAJECTORYACTION_H */
00118 


youbot_driver_ros_interface
Author(s): Sebastian Blumenthal
autogenerated on Thu Jun 6 2019 20:43:35