#include <iostream>
#include <ros/ros.h>
#include <std_msgs/Bool.h>
#include <std_msgs/Int32.h>
#include <std_msgs/String.h>
std::string syntax;
ros::Publisher int_pub;
int syntax_num = 0;
void string_callback(const std_msgs::String::ConstPtr &msg);
int main(int argc, char** argv)
{
ros::init(argc, argv, "one");
ros::NodeHandle nh;
ros::Publisher bool_pub = nh.advertise<std_msgs::Bool>("/flag", 1);
int_pub = nh.advertise<std_msgs::Int32>("/syntax_num", 1);
ros::Subscriber string_sub;
string_sub = nh.subscribe<std_msgs::String>("/syntax", 1, &string_callback);
while(ros::ok())
{
ROS_INFO("Plaese Input Character");
std_msgs::Bool bool_msg;
char start;
std::cin >> start;
if(start == 's')
{
bool_msg.data = true;
bool_pub.publish(bool_msg);
break;
}
else
{
ROS_ERROR("Error Syntax : %c , Please Retry", start);
bool_msg.data = false;
bool_pub.publish(bool_msg);
continue;
}
}
ros::spin();
return 0;
}
void string_callback(const std_msgs::String::ConstPtr &msg)
{
syntax = msg->data;
ROS_INFO("Get String Message : %s", syntax.c_str());
syntax_num = syntax.length();
std_msgs::Int32 int_msg;
int_msg.data = syntax_num;
int_pub.publish(int_msg);
}
이게 1번
#include <iostream>
#include <ros/ros.h>
#include <std_msgs/Bool.h>
#include <std_msgs/Int32.h>
#include <std_msgs/String.h>
bool flag = false;
int syntax_num = 0;
ros::Publisher string_pub;
std::string syntax = "";
void bool_callback(const std_msgs::Bool::ConstPtr &msg);
void int_callback(const std_msgs::Int32::ConstPtr &msg);
int main(int argc, char** argv)
{
ros::init(argc, argv, "two");
ros::NodeHandle nh;
ROS_INFO("sequence start");
string_pub = nh.advertise<std_msgs::String>("/syntax", 1);
ros::Subscriber bool_sub;
ros::Subscriber int_sub;
bool_sub = nh.subscribe<std_msgs::Bool>("/flag", 1, &bool_callback);
int_sub = nh.subscribe<std_msgs::Int32>("/syntax_num", 1, &int_callback);
ros::spin();
return 0;
}
void bool_callback(const std_msgs::Bool::ConstPtr &msg)
{
flag = msg->data;
if(flag)
{
ROS_INFO("flag is %s, please input syntax string ", flag ? "true" : "false");
std::cin >> syntax;
std_msgs::String string_msg;
string_msg.data = syntax;
string_pub.publish(string_msg);
}
}
void int_callback(const std_msgs::Int32::ConstPtr &msg)
{
syntax_num = msg->data;
ROS_INFO("syntax %s's length is %d", syntax.c_str(), syntax_num);
}
이게 2번인데
이걸 어떻게든 뜯어보고 오라는데 혹시 해석 가능한 사람 있음?
아주 작은 거라도 힌트 좀
어디부터 손대야 할 지 전혀 감이 안 잡힘
ROS 로봇 제어 펌웨어 만드는 것 같음
advertise()는 메시지를 구독자에게 전달, subscribe() 메시지 구독자 등록? 잘 아는 분이 와서 알려주자
ros::ok() - ros 구동 준비 됐느냐?
메시지 전달 받을 때 구독자로 bool_callback() 함수 호출되고 받은 데이터를 출력함
nh.subscribe("/flag", 1, &bool_callback); 구독자 함수를 등록하는데 그 리턴타입이 Bool(bool)이고 함수 포인터로 bool_callback을 넘긴다.