1. 先写一个用于测试标志位消息发布的测试函数 test_flag_pub.cpp.
#include "ros/ros.h"
//xx
#include <xx_msgs/Flag.h>
#include <iostream>
using namespace std;
ros::Publisher to_flag_pub;
char ch;
int main(int argc,char** argv)
{
ros::init(argc, argv, "test_flag_pub");
ros::NodeHandle n;
to_flag_pub = n.advertise<xx_msgs::Flag>("flag_cv_to_nav",1);
while(ros::ok())
{
printf("please input:1:nav or 2:cv\n");
ch = getchar(); //按键模拟控制权
if(ch == '1')
{
xx_msgs::Flag flag_cv;
flag_cv.flag = "nav start,cv stop";
to_flag_pub.publish(flag_cv);
cout<<flag_cv.flag<<endl;
}
if(ch == '2')
{
xx_msgs::Flag flag_cv;
flag_cv.flag = "nav stop,cv start";
to_flag_pub.publish(flag_cv);
cout<<flag_cv.flag<<endl;
}
}
return 0;
}
2. 写一个用于测试接收标志位信息的接收函数 test_flag_sub.cpp.
#include "ros/ros.h"
//xx
#include <xx_msgs/Flag.h>
#include <iostream>
using namespace std;
ros::Subscriber recv_flag_pub;
std::string flag_cv;
int flag_nav; //导航标志
void recv_flag_callback(const xx_msgs::Flag::ConstPtr& msg)
{
flag_cv = msg->flag;
std::cout<<flag_cv<<std::endl;
if(flag_cv == "nav stop,cv start")
{
flag_nav =0;
cout<<"nav did stop"<<endl;
}
if(flag_cv == "nav start,cv stop")
{
flag_nav =1;
cout<<"nav do start"<<endl;
}
}
int main(int argc,char** argv)
{
ros::init(argc, argv, "test_flag_sub");
ros::NodeHandle n;
recv_flag_pub = n.subscribe<xx_msgs::Flag>("flag_cv_to_nav",1,recv_flag_callback);
ros::spin();
return 0;
}
测试结果: