【ros】3.ros的C++代码使用

3.ros代码

需要包含#include "ros/ros.h"和消息类型的头文件

发送topic

int main(int argc,char **argv){
    
    
	ros::init(argc, argv, "light_box_publisher");	//ros节点初始化,节点名light_box_publisher必须是唯一的
	ros::NodeHandle node_light;	//创建ros节点句柄
	// 创建一个Publisher,发布traffic_pkg::BoxVector类型的消息到/light_detection的topic上
	ros::Publisher light_box_pub =
		node_light.advertise<traffic_pkg::BoxVector>("/light_detection", 1);
	//通常会在xx.h头文件中声明	ros::Publisher light_box_pub;然后在xx.cc文件中给light_box_pub赋值:light_box_pub = node_light.advertise<traffic_pkg::BoxVector>("/light_detection", 1);
	//因为需要发送的消息类型多了,为便于处理, light_box_pub.publish()一般在自己回调函数中被调用,所以需要作为成员函数,而不是直接在main()函数中直接声明直接用。
	ros::Rate delayhz(10);      //每秒发送多少次消息

	while(ros::ok()){
    
    
	  /*
		code: 一系列赋值操作
	  */
	  light_box_pub.publish(light_box_image_vector);	//发送消息,light_box_image_vector是traffic_pkg::BoxVector类型
	  delayhz.sleep();	//按照循环频率延时
	}	// end while
	
	return 0;
}

如果不使用int argc,char **argv参数,初始化节点还可以写为

  int argc = 0;	 //必须这么写
  ros::init(argc, NULL, "light_box_publisher"); //不能写成ros::init(0, NULL, "light_box_publisher");

订阅topic

int main(int argc,char **argv){
    
    
	ros::init(argc, argv, "light_box_subscriber");
	ros::NodeHandle node;

	//订阅topic消息,并进行回调函数处理。OnTrafficLightDetections是回调函数,该回调函数的参数是话题/light_detection中的消息类型。
	// 如果处理完了之后还需要把处理之后的消息msg_b再通过ros发给下一个节点,那么.publish(msg_b)也写在这个回调函数OnTrafficLightDetections中。
	ros::Subscriber light_box_sub =
	  node.subscribe("/light_detection", 10, OnTrafficLightDetections);		

	ros::spin(); //循环等待回调函数
	
	return 0;
}

自定义.msg常用类型

特别注意枚举类型enum

直接在Color.msg文件中定义,在订阅后面加上"="赋值即是枚举.

int32 BLACK = 0
int32 RED = 1
int32 YELLOW = 2
int32 GREEN = 3
int32 UNKNOWN = 4

catkin_make编译过后,会生成一个Color.h文件,其中有一部分是如下内容:

## 以下是 Color.h 头文件部分内容,不是全部内容
  enum {
    
    
    BLACK = 0,
    RED = 1,
    YELLOW = 2,
    GREEN = 3,
    UNKNOWN = 4,
  };
#文件位置:geometry_msgs/Vector3.msg
float64 x
float64 y
float64 z
 
#定义加速度项,包括线性加速度和角加速度
#文件位置:geometry_msgs/Accel.msg
Vector3 linear
Vector3 angular
 
#定义数据的参考时间和参考坐标
#文件位置:std_msgs/Header.msg
uint32 seq #数据ID
time stamp #数据时间戳
string frame_id #数据的参考坐标系
 
#定义超声传感器
#文件位置:自定义msg文件
Header header
uint16 front_left
uint16 front_center
uint16 front_right
uint16 rear_left
uint16 rear_center
uint16 rear_right
 
#消息代表空间中旋转的四元数
#文件位置:geometry_msgs/Quaternion.msg
float64 x
float64 y
float64 z
float64 w
 
#消息包含了从惯性原件中得到的数据,加速度为m/^2,角速度为rad/s
#如果所有的测量协方差已知,则需要全部填充进来如果只知道方差,则
#只填充协方差矩阵的对角数据即可
#位置:sensor_msgs/Imu.msg
Header header
Quaternion orientation
float64[9] orientation_covariance
Vector3 angular_velocity
float64[9] angular_velocity_covariance
Vector3 linear_acceleration
float64[] linear_acceleration_covariance
 
#平面内的激光测距扫描数据,注意此消息类型仅仅适配激光测距设备
#如果有其他类型的测距设备(如声呐),需要另外创建不同类型的消息
#位置:sensor_msgs/LaserScan.msg
Header header #时间戳为接收到第一束激光的时间
float32 angle_min #扫描开始时的角度(单位为rad)
float32 angle_max #扫描结束时的角度(单位为rad)
float32 angle_increment #两次测量之间的角度增量(单位为rad)
float32 time_increment #两次测量之间的时间增量(单位为s)
float32 scan_time #两次扫描之间的时间间隔(单位为s)
float32 range_min #距离最小值(m)
float32 range_max #距离最大值(m)
float32[] ranges #测距数据(m,如果数据不在最小数据和最大数据之间,则抛弃)
float32[] intensities #强度,具体单位由测量设备确定,如果仪器没有强度测量,则数组为空即可
 
#空间中的点的位置
#文件位置:geometry_msgs/Point.msg
float64 x
float64 y
float64 z
 
#消息定义自由空间中的位姿信息,包括位置和指向信息
#文件位置:geometry_msgs/Pose.msg
Point position
Quaternion orientation
 
#定义有时空基准的位姿
#文件位置:geometry_msgs/PoseStamped.msg
Header header
Pose pose
 
#表示空间中含有不确定性的位姿信息
#文件位置:geometry_msgs/PoseWithCovariance.msg
Pose pose
float64[36] covariance
 
#表示电源状态,是否开启
#文件位置:自定义msg文件
Header header
bool power
######################
bool ON = 1
bool OFF = 0
 
#定义空间中物体运动的线速度和角速度
#文件位置:geometry_msgs/Twist.msg
Vector3 linear
Vector3 angular
 
#消息定义了包含不确定性的速度量,协方差矩阵按行分别表示:
#沿x方向速度的不确定性,沿y方向速度的不确定性,沿z方向速度的不确定性
#绕x转动角速度的不确定性,绕y轴转动的角速度的不确定性,绕z轴转动的
#角速度的不确定性
#文件位置:geometry_msgs/TwistWithCovariance.msg
Twist twist
float64[36] covariance #分别表示[x; y; z; Rx; Ry; Rz]
 
#消息描述了自由空间中位置和速度的估计值
#文件位置:nav_msgs/Odometry.msg
Header header
string child_frame_id
PoseWithCovariance pose
TwistWithCovariance twist

猜你喜欢

转载自blog.csdn.net/u011754972/article/details/121509550
今日推荐