ROS는 두 개의 레코드를 쓰기 학습 4-- 주제 기반의 통신 노드를

제로 서문

노드 사이에는 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

그림 삽입 설명 여기
니스! 해!

게시 63 개 원래 기사 · 원 찬양 38 ·은 20000 +를 볼

추천

출처blog.csdn.net/u011017694/article/details/105134499