forte_rc_teleop_wii.cpp
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);  //throttle topic pubs w/10Hz (wiimote uses 100Hz)
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]) {         // button 1
00048       operation_mode = 1;
00049 
00050   } else if (joy->buttons[1]) { // button 2
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)){      // button B
00064 
00065       vel.linear.x = -v_linear_ * joy->buttons[9];  // -Vx
00066       if (vel.linear.x==0.0){
00067         vel.linear.x = v_linear_ * joy->buttons[8];  // +Vx
00068       }
00069 
00070       vel.linear.y = -v_linear_ * joy->buttons[4];  // -Vy
00071       if (vel.linear.y==0.0){
00072         vel.linear.y = v_linear_ * joy->buttons[5];  // +Vy
00073       }
00074 
00075       vel.angular.z = -v_angular_ * joy->buttons[7]; // -W
00076       if (vel.angular.z==0.0){
00077         vel.angular.z = v_angular_ * joy->buttons[6];  // +W
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 }


forte_rc_teleop
Author(s): Ingeniarius, Ltd.
autogenerated on Sat Jun 8 2019 19:54:50