Skip to content

Instantly share code, notes, and snippets.

@byq77
Last active August 25, 2021 08:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save byq77/5188327f63b1c2a687a9f0d8669ba51b to your computer and use it in GitHub Desktop.
Save byq77/5188327f63b1c2a687a9f0d8669ba51b to your computer and use it in GitHub Desktop.
Mbed ros mock sensor test
#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