제로 서문
노드 사이에는 ROS 주제를 통해 서로 통신 할 수 있습니다. 키 입력 노드 문제 주제에 메시지 및 주제 노드 B는 메시지를 수신하기 위해 가입한다.
ROS 위키의 설명에 따르면, 우리는 쉽게 메시지와 주제, 통신 메커니즘의 주제 사이의 관계를 알 수 있으며, 메시지는 데이터 구조 주제입니다.
ROS는 명령 줄과 도구, 자세한 사용이 위키 ROS에서 볼 수 있습니다 무엇인지 뉴스와 시각 찾기의 사용에 대한 주제 명령을 볼 수 있습니다 ROS 주제를 이해하는
우리의 메시지를 생성에 따라, 당신은 더 같은 것을 발견 할 것이다 C 언어 구조.
A. 메시지를 작성
우리는 새로운 패키지 기능을 만듭니다
catkin_create_pkg top roscpp std_msgs message_generation message_runtime
ROS 위키의 원래 단어 봐 :
다음으로, 중요한 단계가있다 : 우리는 확실히 MSG 파일을 C 소스 코드로 변환되어 있는지 확인하려면 ++, 파이썬과 다른 언어 :
보기 package.xml 만들 확신이 두 문장에 대해 포함 :
<build_depend> message_generation </ build_depend>
<exec_depend > message_runtime </ exec_depend>
그렇지 않은 경우에 첨가 하였다. 내장 때, 우리는 "message_generation"필요합니다. 그러나 런타임에, 우리는 "message_runtime"을해야합니다.
오, 나의 하나님, 우리를 위해 생성 된 패키지를 만들 때.
그리고 우리의 메시지를 작성하는 것입니다 :
우리는 다음 수정 CMakeList.txt
우리는 다음 명령을 수정할 수 있도록 다음은
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
의 주석 및 수정
add_message_files(
FILES
Name.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
그렇지 않으면 오류가 발생하지, message_runtime없이, find_package 만 message_generation을 확인합니다.
컴파일 후 우리는 성공을 보면 :
송신 및 수신 노드의 집합의 II. 제조
당신은 평균 특정 코드를 이야기하지 않습니다 무엇을, 나중에로 설명합니다
1. 송신 노드
쓰기 쓰기 상단 / src에 내부 puber.cpp
:
#include "ros/ros.h"
#include "top/Name.h"
#include "sstream"
int main(int argc, char **argv)
{
std::stringstream ss;
top::Name msg;
ros::init(argc, argv, "publisher");
ros::NodeHandle h;
ros::Publisher puber = h.advertise<top::Name>("Name_Info", 10);
ros::Rate loop_rate(1);
ss << "A B";
while (ros::ok())
{
ss >> msg.first_name;
ss >> msg.last_name;
ROS_INFO("I Send [%s %s]", msg.first_name.c_str(), msg.last_name.c_str());
puber.publish(msg);
}
return 0;
}
2. 수신 노드
쓰기suber.cpp
#include "ros/ros.h"
#include "top/Name.h"
void infoCallback(const top::Name::ConstPtr& msg)
{
ROS_INFO("Name Changed [%s %s]", msg->last_name.c_str(), msg->first_name.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "suber");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("Name_Info", 1000, infoCallback);
ros::spin();
return 0;
}
3. 수정 CMakeList.txt
메시지를 만들 때 또한, 우리가 사용하는 메시지의 주제에 구성된 CMakeList, 그것은 추가, 이제 노드 구성입니다 수정 :
add_executable(puber src/puber.cpp)
target_link_libraries(puber ${catkin_LIBRARIES})
add_executable(suber src/suber.cpp)
target_link_libraries(suber ${catkin_LIBRARIES})
4. 컴파일 및 실행
roscore
rosrun top puber
rosrun top suber
rqt_graph
니스! 해!