00001 #include "ros/ros.h" 00002 #include "sensor_msgs/Joy.h" 00003 #include "geometry_msgs/Twist.h" 00004 #include "bipedRobin_msgs/SetModeService.h" 00005 #include "std_srvs/Empty.h" 00006 00007 /* 00008 Dieser Knoten verarbeitet die joy_msg von joy/joy_node und erzeugt daraus eine geometry_msgs::Twist die x y und rotation um die Z achse and den bipedRobin_teleop/biped_teleop knoten weitergibt. 00009 Weiters werden mit den Tasten auf dem Joypad verschiedene Services im bipedRobin_driver/biped_serializer Knoten aufgerufen 00010 Und es kann die Freigabe zum gehen and den bipedRobin_navigation/navigation_master gesendet werden 00011 */ 00012 ros::ServiceClient acknowledge_client; //zum Aufrufen des Acknowledge services 00013 ros::ServiceClient setMode_client; //zum Aufrufen des setMode services 00014 ros::ServiceClient stop_client; //zum Aufrufen des stop services 00015 ros::ServiceClient walk_client; //zum Aufrufen des stop services 00016 00017 void joyCallback( const sensor_msgs::Joy::ConstPtr& joy_msg ) 00018 { 00019 bipedRobin_msgs::SetModeService setMode; //Nachrichten für services 00020 std_srvs::Empty empty; 00021 00022 if(joy_msg->buttons[0] == 1){ //Knopf 1 setServiceMode 0 00023 setMode.request.desiredMode = 0; 00024 setMode_client.call(setMode); 00025 } 00026 00027 if(joy_msg->buttons[1] == 1){ //Knopf 2 setServiceMode 2 00028 setMode.request.desiredMode = 2; 00029 setMode_client.call(setMode); 00030 } 00031 00032 if(joy_msg->buttons[2] == 1){ //Knopf 3 setServiceMode 3 00033 setMode.request.desiredMode = 3; 00034 setMode_client.call(setMode); 00035 } 00036 00037 if(joy_msg->buttons[3] == 1){ //Knopf 4 walk_srv 00038 walk_client.call(empty); 00039 } 00040 00041 if(joy_msg->buttons[8] == 1){ //Knopf SE acknowledge service 00042 acknowledge_client.call(empty); 00043 } 00044 00045 if(joy_msg->buttons[9] == 1){ //Knopf ST stop service 00046 stop_client.call(empty); 00047 } 00048 } 00049 00050 int main(int argc, char** argv) 00051 { 00052 ros::init(argc, argv, "biped_teleop_joy_node"); 00053 ros::NodeHandle n; 00054 00055 //subscriber for joy/joy_node 00056 ros::Subscriber joy_sub = n.subscribe( "joy", 10, &joyCallback ); 00057 //service clients for bipedRobin_driver/biped_serializer 00058 setMode_client = n.serviceClient<bipedRobin_msgs::SetModeService>("setMode_srv"); 00059 acknowledge_client = n.serviceClient<std_srvs::Empty>("acknowledge_srv"); 00060 stop_client = n.serviceClient<std_srvs::Empty>("stop_srv"); 00061 //service client fo bipedRobin_navigation/navigation_master, 00062 walk_client = n.serviceClient<std_srvs::Empty>("walk_srv"); 00063 00064 ros::Rate loop_rate(100); 00065 while( ros::ok() ) //publishen der Twist message mit 20 Hz 00066 { 00067 ros::spinOnce(); 00068 00069 loop_rate.sleep(); 00070 } 00071 } 00072