joydrive.cpp
Go to the documentation of this file.
1 /*
2  * Rosserial Vex Cortex joystick control demo
3  *
4  * This lets you control a VEX Clawbot (or any other robot, with some modification)
5  * using a Logitech Wireless gamepad F710.
6  *
7  * install the joystick_drivers ROS system dependency: http://wiki.ros.org/joystick_drivers?distro=melodic
8  * then run `rosrun joy joy_node _autorepeat_rate:=20`
9  *
10  * This also can work with a PS3 controller / wiimote (see the ROS joystick_drivers metapackage).
11  *
12  * Or any other ROS node that publishes joystick events!
13  */
14 
15 #include "ros.h"
16 #include "main.h"
17 #include "sensor_msgs/Joy.h"
18 
19 #define MAX_SPEED 80
20 
21 // fired every joystick message, uses the message to set motor powers on robot
22 inline void moveRobot( const sensor_msgs::Joy &joy_msg) {
23  motorSet(6, joy_msg.buttons[7] * MAX_SPEED - joy_msg.buttons[5] * MAX_SPEED);
24  motorSet(7, joy_msg.buttons[6] * MAX_SPEED - joy_msg.buttons[4] * MAX_SPEED);
25 
26  int lp = 0;
27  int rp = 0;
28  if(joy_msg.axes[0] < 0.0) { lp = -MAX_SPEED; rp = MAX_SPEED; }
29  else if(joy_msg.axes[0] > 0.0) { lp = MAX_SPEED; rp = -MAX_SPEED; }
30  else if(joy_msg.axes[1] < 0.0) { lp = -MAX_SPEED; rp = -MAX_SPEED; }
31  else if(joy_msg.axes[1] > 0.0) { lp = MAX_SPEED; rp = MAX_SPEED; }
32  else {
33  lp = MAX_SPEED * (joy_msg.axes[3] + joy_msg.axes[2]);
34  rp = MAX_SPEED * (joy_msg.axes[3] - joy_msg.axes[2]);
35  }
36 
37  lp = (abs(lp) > 10) ? lp : 0;
38  rp = (abs(rp) > 10) ? rp : 0;
39 
40  motorSet(1, -lp);
41  motorSet(10, rp);
42 }
43 
44 inline void begin(void*){
45  // set up nodehandle instance and a subscriber for Joystick events
46  ros::NodeHandle nh;
48 
49  nh.initNode();
50  nh.subscribe(sub);
51 
52  // loop for subscriber does not need delay - this ensures the node handle is as reliable as possible.
53  while (1) {
54  nh.spinOnce();
55  }
56 }
57 
58 // is a setup function.
59 inline void setup()
60 {
61  taskCreate(&begin, TASK_DEFAULT_STACK_SIZE, NULL, TASK_PRIORITY_HIGHEST);
62 }
63 
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
#define MAX_SPEED
Definition: joydrive.cpp:19
void setup()
Definition: joydrive.cpp:59
void moveRobot(const sensor_msgs::Joy &joy_msg)
Definition: joydrive.cpp:22
void begin(void *)
Definition: joydrive.cpp:44


rosserial_vex_cortex
Author(s): Cannon
autogenerated on Mon Jun 10 2019 14:53:45