Last active
August 25, 2021 08:48
-
-
Save byq77/5188327f63b1c2a687a9f0d8669ba51b to your computer and use it in GitHub Desktop.
Mbed ros mock sensor test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <mbed.h> | |
#include <ros.h> | |
#include <std_msgs/Float32.h> | |
#define SPIN_DELAY_MS 10U | |
#define SENSOR_INTER_MEASUREMENT_MS 1000U | |
#define MOCK_PIN ADC_TEMP | |
class RosMockSensorTest : public ros::NodeHandle, private NonCopyable<RosMockSensorTest> | |
{ | |
public: | |
/** | |
* @brief Initialise ros mock sensor node. | |
*/ | |
void init() | |
{ | |
// initialise ros node | |
initNode(); | |
// prepare sensor data | |
sensor_msg.data = 0.0f; | |
// advertise publisher | |
advertise(sensor_pub); | |
// set LEDs states | |
led1 = 0; | |
led2 = 1; | |
}; | |
/** | |
* @brief Run ros mock sensor node test. | |
*/ | |
void spin() | |
{ | |
uint64_t last_publish_time = 0; | |
while (1) | |
{ | |
uint64_t time = Kernel::get_ms_count(); | |
if (time - last_publish_time >= SENSOR_INTER_MEASUREMENT_MS) | |
{ | |
// signal with LEDs | |
led1 = !led1; | |
led2 = !led2; | |
// read mock sensor data | |
sensor_msg.data = mock_sensor.read(); | |
// write log message | |
loginfo("Publishing a new sensor reading..."); | |
// publish ros message | |
sensor_pub.publish(&sensor_msg); | |
last_publish_time = time; | |
} | |
spinOnce(); | |
ThisThread::sleep_until(time + SPIN_DELAY_MS); | |
} | |
}; | |
private: | |
DigitalOut led1{LED1, 0}; | |
DigitalOut led2{LED2, 0}; | |
AnalogIn mock_sensor{MOCK_PIN}; | |
std_msgs::Float32 sensor_msg; | |
ros::Publisher sensor_pub{"mock_sensor", &sensor_msg}; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment