Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed QEI ros_lib_melodic
main.cpp
- Committer:
- florine_van
- Date:
- 2019-11-12
- Revision:
- 10:be9de79cf6b0
- Parent:
- 8:57aa8a35d983
- Child:
- 11:35809512ec11
File content as of revision 10:be9de79cf6b0:
#include "mbed.h"
#include <ros.h>
#include <std_msgs/Empty.h>
#include <std_msgs/Int32.h>
#include <std_msgs/String.h>
#include <mbed_custom_msgs/lidar_msg.h>
#include "Sensor.h"
#include "Motor.h"
// Set up serial to pc
//Serial pc(SERIAL_TX, SERIAL_RX);
// Set up I²C on the STM32 NUCLEO-401RE
#define addr1 (0x29)
#define addr2 (0x2A)
#define addr3 (0x2B)
#define addr4 (0x2C)
#define S1 PC_8
#define S2 PC_9
#define S3 PC_10
#define S4 PC_11
#define S5 PC_12
#define S6 PD_2
#define S7 PG_2
#define S8 PG_3
// VL6180x sensors
Sensor sensor_back(I2C_SDA, I2C_SCL, S1);
Sensor sensor_left(I2C_SDA, I2C_SCL, S3);
Sensor sensor_forward(I2C_SDA, I2C_SCL, S5);
Sensor sensor_right(I2C_SDA, I2C_SCL, S7);
// Motors
Motor motor_left(PC_6, PB_15, PB_13);
Motor motor_right(PA_15, PC_7, PB_4);
/*
void avoidObstacle(const std_msgs::Empty& avoid_obstacle_msg)
{
// When obstacle ahead
if (sensor_forward.getIsObstacle())
{
if ( (sensor_right.getIsObstacle()) && (sensor_left.getIsObstacle()) )
{
//Turn backward
while(!sensor_back.getIsObstacle())
{
motor_left.moveForward();
motor_right.moveBackward();
}
}
if (sensor_left.getIsObstacle())
{
//Turn to the right
motor_left.moveForward();
motor_right.moveBackward();
}
else
{
// By default : turn to the left
motor_left.moveBackward();
motor_right.moveForward();
}
}
// No obstacle
else
{
motor_left.moveForward();
motor_right.moveForward();
}
}
*/
/*
TODO REMOVE COMMENT WHEN CUSTOM MSGS READY
void controlMotor(const std_msgs::Int32& motor_dir)
{
switch (motor_dir)
{
// Move forward
case 1:
motor_left.moveForward();
motor_right.moveForward();
break;
// Move left
case 2:
motor_left.moveBackward();
motor_right.moveForward();
break;
// Move right
case 3:
motor_left.moveForward();
motor_right.moveBackward();
break;
}
}
*/
/*
TODO REMOVE COMMENT WHEN CUSTOM MSGS READY
// ROS subscriber for motors control
ros::Subscriber<std_msgs::Int32> motor_sub("motor_control", &controlMotor);
*/
int main()
{
ros::NodeHandle nh;
nh.initNode();
// ROS publisher for sensor readings
mbed_custom_msgs::lidar_msg int_lidar_msg;
ros::Publisher lidar_pub("lidar_reading", &int_lidar_msg);
/*
std_msgs::Int32 int_msg;
ros::Publisher lidar_pub("lidar_reading", &int_msg);
*/
nh.advertise(lidar_pub);
/*
TODO REMOVE COMMENT WHEN CUSTOM MSGS READY
nh.subscribe(motor_sub);
*/
// load settings onto VL6180X sensors
sensor_forward.init();
// change default address of sensor 2
sensor_forward.changeAddress(addr2);
sensor_right.init();
// change default address of sensor 3
sensor_right.changeAddress(addr3);
sensor_back.init();
// change default address of sensor 4
sensor_back.changeAddress(addr4);
sensor_left.init();
//Set Speeds
motor_left.setSpeed(0.5f);
motor_right.setSpeed(0.5f);
while (1)
{
int_lidar_msg.sensor_forward = sensor_forward.read();
int_lidar_msg.sensor_right = sensor_right.read();
int_lidar_msg.sensor_back = sensor_back.read();
int_lidar_msg.sensor_left = sensor_left.read();
lidar_pub.publish(&int_lidar_msg);
/*
int_msg.data = sensor_forward.read();
lidar_pub.publish(&int_msg);
*/
/*
int range;
range = sensor_forward.read();
pc.printf("Range = %d\r\n", range);
*/
nh.spinOnce();
wait_ms(10);
}
}