ros msg文件数组定义与使用
float32[]ranges注意这里的数组使用的是无长度限制的,也就是方扩号内没有东西。在使用的时候,不能够直接用数组赋值那样去做,它实际上是一个向量,往里面填充数据应使用c++中vector的push_back、resize之类的函数。参见官方教程中laserscan的发布,laserscan消息中的ranges就是这样一个向量,在程序中laserscan是使用的resize先设定容器大...
·
float32[] ranges
注意这里的数组使用的是无长度限制的,也就是方扩号内没有东西。在使用的时候,不能够直接用数组赋值那样去做,它实际上是一个向量,往里面填充数据应使用c++中vector的push_back、resize之类的函数。参见官方教程中laserscan的发布,laserscan消息中的ranges就是这样一个向量,在程序中laserscan是使用的resize先设定容器大小,再往里填充数据的.
1 #include <ros/ros.h>
2 #include <sensor_msgs/LaserScan.h>
3
4 int main(int argc, char** argv){
5 ros::init(argc, argv, "laser_scan_publisher");
6
7 ros::NodeHandle n;
8 ros::Publisher scan_pub = n.advertise<sensor_msgs::LaserScan> ("scan", 50);
9
10 unsigned int num_readings = 100;
11 double laser_frequency = 40;
12 double ranges[num_readings];
13 double intensities[num_readings];
14
15 int count = 0;
16 ros::Rate r(1.0);
17 while(n.ok()){
18 //generate some fake data for our laser scan
19 for(unsigned int i = 0; i < num_readings; ++i){
20 ranges[i] = count;
21 intensities[i] = 100 + count;
22 }
23 ros::Time scan_time = ros::Time::now();
24
25 //populate the LaserScan message
26 sensor_msgs::LaserScan scan;
27 scan.header.stamp = scan_time;
28 scan.header.frame_id = "laser_frame";
29 scan.angle_min = -1.57;
30 scan.angle_max = 1.57;
31 scan.angle_increment = 3.14 / num_readings;
32 scan.time_increment = (1 / laser_frequency) / (num_readings);
33 scan.range_min = 0.0;
34 scan.range_max = 100.0;
35
36 ==scan.ranges.resize(num_readings);==
37 scan.intensities.resize(num_readings);
38 for(unsigned int i = 0; i < num_readings; ++i){
39 scan.ranges[i] = ranges[i];
40 scan.intensities[i] = intensities[i];
41 }
42
43 scan_pub.publish(scan);
44 ++count;
45 r.sleep();
46 }
47 }
更多推荐
已为社区贡献1条内容
所有评论(0)