Go to the documentation of this file.00001 #include <ros/ros.h>
00002 #include <string.h>
00003 #include <stdio.h>
00004 #include <math.h>
00005 #include <stdlib.h>
00006 #include <Ivy/ivy.h>
00007 #include <Ivy/ivyloop.h>
00008 #include "quad_esc/Esc.h"
00009 #include <Ivy/timer.h>
00010
00011 quad_esc::Esc esc;
00012 ros::Publisher esc_message;
00013
00014
00015
00016
00017
00018
00019 void ESCCallback (IvyClientPtr app, void* data , int argc, char **argv)
00020 {
00021
00022 int n = sscanf(argv[0],"%*d %*d %*d %*d %*d %*d %*d %*d %d %d %d %d %d %d %d %d",&esc.Front_rpm, &esc.Front_pwm, &esc.Back_rpm, &esc.Back_pwm, &esc.Left_rpm, &esc.Left_pwm, &esc.Right_rpm, &esc.Right_pwm);
00023
00024 esc.header.stamp = ros::Time::now();
00025
00026 esc_message.publish(esc);
00027 }
00028
00029 void ROSCallback (TimerId id, void *user_data, unsigned long delta)
00030 {
00031 if (!ros::ok()){
00032 IvyStop();
00033 exit(0);
00034 }
00035 }
00036
00037 int main(int argc, char **argv)
00038 {
00039
00040
00041 ros::init(argc, argv, "quad_esc");
00042 ros::NodeHandle nh("~");
00043
00044 esc_message = nh.advertise<quad_esc::Esc>("esc", 1000);
00045
00046
00047 IvyInit ("quad_status", "'Quad ESC' is READY!", 0, 0, 0, 0);
00048 IvyStart("127.255.255.255");
00049 TimerRepeatAfter (TIMER_LOOP, 500, ROSCallback, 0);
00050
00051
00052 IvyBindMsg(ESCCallback, 0, "ISR_STUFF(.*)");
00053
00054 IvyMainLoop();
00055
00056 return 0;
00057 }