Ask Your Question
0

How to write laser scan node for sharp GP2Y0A02YK0F sensor using C++?

asked 2015-07-23 10:35:11 -0600

I want to write a laser node for scanning an area using sharp GP2Y0A02YK0F IR range finder. Please give me some hints or source codes to work with that Range finder. Thank you!

edit retag flag offensive close merge delete

Comments

Perhaps you should add more details about your system, e.g. how do you want to cover an area with IR-Sensors

Humpelstilzchen gravatar imageHumpelstilzchen ( 2015-07-24 02:12:17 -0600 )edit

Do you already have a hardware-interface to the sensor?

NEngelhard gravatar imageNEngelhard ( 2015-07-25 12:48:35 -0600 )edit

@Humpelstizchen Yes the system has on sharp IR sensor .It is connected to servo motor for rotation.

kaviranga gravatar imagekaviranga ( 2015-08-06 01:00:55 -0600 )edit

@NEngelhard yes I'm using beaglebone black hardware interface.

kaviranga gravatar imagekaviranga ( 2016-08-14 06:34:53 -0600 )edit

1 Answer

Sort by » oldest newest most voted
1

answered 2015-07-25 07:20:31 -0600

You can read the data form your device and send data in the format as below:

To see the structure of the message sensor_msgs/LaserScan . Use the following command:

$ rosmsg show sensor_msgs/LaserScan

std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities

Creating the laser node: create a new file:and put the following code in it:

#include <ros/ros.h>
#include <sensor_msgs/LaserScan.h>
int main(int argc, char** argv){
ros::init(argc, argv, "laser_scan_publisher");
ros::NodeHandle n;
ros::Publisher scan_pub = n.advertise<sensor_
msgs::LaserScan>("scan", 50);
unsigned int num_readings = 100;
double laser_frequency = 40;
double ranges[num_readings];
double intensities[num_readings];
int count = 0;
ros::Rate r(1.0);
while(n.ok()){
//generate some fake data for our laser scan
for(unsigned int i = 0; i < num_readings; ++i){
ranges[i] = count;
intensities[i] = 100 + count;
}
ros::Time scan_time = ros::Time::now();
Navigation Stack – Robot Setups
[ 224  ]
//populate the LaserScan message
sensor_msgs::LaserScan scan;
scan.header.stamp = scan_time;
scan.header.frame_id = "base_link";
scan.angle_min = -1.57;
scan.angle_max = 1.57;
scan.angle_increment = 3.14 / num_readings;
scan.time_increment = (1 / laser_frequency) / (num_readings);
scan.range_min = 0.0;
scan.range_max = 100.0;
scan.ranges.resize(num_readings);
scan.intensities.resize(num_readings);
for(unsigned int i = 0; i < num_readings; ++i){
scan.ranges[i] = ranges[i];
scan.intensities[i] = intensities[i];
}
scan_pub.publish(scan);
++count;
r.sleep();
}
}

As you can see, we are going to create a new topic with the name scan and the message type sensor_msgs/LaserScan .

edit flag offensive delete link more

Comments

Thank you very much for your quick reply . It was great help for me !

kaviranga gravatar imagekaviranga ( 2015-08-06 00:57:18 -0600 )edit

hi, i want to do the same thing and i want to ask you if you have managed to do it. i use IR connected to arduino Uno and rosserial thanks

Emilien gravatar imageEmilien ( 2016-04-29 11:47:57 -0600 )edit

@Emilien I'm using beagle bone black as my hardware. I've capable of directly run the wheels of the robot using beaglebone black using a program written in C++.But ros-serial is better when communicating with sharp IR sensor!

kaviranga gravatar imagekaviranga ( 2016-08-14 06:48:33 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2015-07-23 10:35:11 -0600

Seen: 602 times

Last updated: Jul 25 '15