Go to the documentation of this file.00001 #include <ros/ros.h>
00002 #include <geometry_msgs/Twist.h>
00003 #include <sensor_msgs/Joy.h>
00004
00005 class Teleopforte_rc{
00006
00007 public:
00008 Teleopforte_rc();
00009
00010 private:
00011 void joyCallback(const sensor_msgs::Joy::ConstPtr& joy);
00012
00013 ros::NodeHandle nh_;
00014
00015 double v1_linear, v2_linear, v1_angular, v2_angular;
00016 double v_linear_, v_angular_;
00017 bool operation_mode = true;
00018 bool safety;
00019 ros::Publisher vel_pub_;
00020 ros::Subscriber joy_sub_;
00021
00022 };
00023
00024
00025 Teleopforte_rc::Teleopforte_rc():
00026 v1_linear(0.25),
00027 v2_linear(0.40),
00028 v1_angular(0.35),
00029 v2_angular(0.60),
00030 safety(true)
00031 {
00032 nh_.param("v1_linear", v1_linear, v1_linear);
00033 nh_.param("v2_linear", v2_linear, v2_linear);
00034 nh_.param("v1_angular", v1_angular, v1_angular);
00035 nh_.param("v2_angular", v2_angular, v2_angular);
00036 nh_.param("safety", safety, safety);
00037
00038 vel_pub_ = nh_.advertise<geometry_msgs::Twist>("cmd_vel", 1);
00039 joy_sub_ = nh_.subscribe<sensor_msgs::Joy>("joy_throttle", 10, &Teleopforte_rc::joyCallback, this);
00040 }
00041
00042
00043 void Teleopforte_rc::joyCallback(const sensor_msgs::Joy::ConstPtr& joy){
00044
00045 geometry_msgs::Twist vel;
00046
00047 if(joy->buttons[0]) {
00048 operation_mode = 1;
00049
00050 } else if (joy->buttons[1]) {
00051 operation_mode = 0;
00052 }
00053
00054 if (operation_mode){
00055 v_linear_ = v1_linear;
00056 v_angular_= v1_angular;
00057 } else {
00058 v_linear_ = v2_linear;
00059 v_angular_= v2_angular;
00060 }
00061
00062
00063 if((joy->buttons[3] + !safety)){
00064
00065 vel.linear.x = -v_linear_ * joy->buttons[9];
00066 if (vel.linear.x==0.0){
00067 vel.linear.x = v_linear_ * joy->buttons[8];
00068 }
00069
00070 vel.linear.y = -v_linear_ * joy->buttons[4];
00071 if (vel.linear.y==0.0){
00072 vel.linear.y = v_linear_ * joy->buttons[5];
00073 }
00074
00075 vel.angular.z = -v_angular_ * joy->buttons[7];
00076 if (vel.angular.z==0.0){
00077 vel.angular.z = v_angular_ * joy->buttons[6];
00078
00079 }
00080 }
00081
00082
00083 vel_pub_.publish(vel);
00084
00085 }
00086
00087 int main(int argc, char** argv){
00088
00089 ros::init(argc, argv, "forte_rc_teleop");
00090 Teleopforte_rc Teleopforte_rc;
00091
00092 ros::spin();
00093 }