using ros serial to publish joint angles

Dependencies:   mbed ros_lib_indigo

main.cpp

Committer:
robot_fan4
Date:
2017-09-26
Revision:
0:6370e1a55ca5

File content as of revision 0:6370e1a55ca5:

///*
// * rosserial ADC Example
// *
// * This is a poor man's Oscilloscope.  It does not have the sampling
// * rate or accuracy of a commerical scope, but it is great to get
// * an analog value into ROS in a pinch.
// */
//
//#include "mbed.h"
//#include <ros.h>
//#include <geometry_msgs/Vector3Stamped.h>
//#include <ros/time.h>
//
////AnalogIn analog_value1(A0);
////AnalogIn analog_value2(A1);
////AnalogIn analog_value3(A2);
//DigitalOut led(LED1);
//
//ros::NodeHandle nh;
//
//geometry_msgs::Vector3Stamped joint_angle;
//
//ros::Publisher p("adc", &joint_angle);
//
//
////We average the analog reading to elminate some of the noise
//int averageAnalog(PinName pin) {
//    int v=0;
//    for (int i=0; i<4; i++) v+= AnalogIn(pin).read_u16();
//    return v/4;
//}
//
//int main() {
//    nh.initNode();
//    nh.advertise(p);
//
//    while (1) {
//        joint_angle.vector.x= averageAnalog(A0);
//        joint_angle.vector.y= averageAnalog(A1);
//        joint_angle.vector.z= averageAnalog(A2);
//        joint_angle.header.stamp = nh.now();
//        p.publish(&joint_angle);
//        nh.spinOnce();
//        wait_ms(10);
//    }
//}

/*
 * rosserial ADC Example
 *
 * This is a poor man's Oscilloscope.  It does not have the sampling
 * rate or accuracy of a commerical scope, but it is great to get
 * an analog value into ROS in a pinch.
 */

#include "mbed.h"
#include <ros.h>
#include <std_msgs/Float64.h>
#include <ros/time.h>

//AnalogIn analog_value1(A0);
//AnalogIn analog_value2(A1);
//AnalogIn analog_value3(A2);
DigitalOut led(LED1);

ros::NodeHandle nh;

std_msgs::Float64 feedback;

ros::Publisher p("state", &feedback);


//We average the analog reading to elminate some of the noise
int averageAnalog(PinName pin) {
    int v=0;
    for (int i=0; i<4; i++) v+= AnalogIn(pin).read();
    return v*2000/4-1000;
}

int main() {
    nh.initNode();
    nh.advertise(p);

    while (1) {
        feedback.data = averageAnalog(A0);
        p.publish(&feedback);
        nh.spinOnce();
        wait_ms(10);
    }
}