티스토리 뷰

Robotics/ROS

ROS Custom Message publish

Rocknz 2017. 1. 6. 16:53
기본적으로 제공하는 msg 파일을 이용하지말고, 내가 원하는 msg파일을 만들어 publish 하고 subscribe하고 싶어졌다.

그래서 어떠한 설정을 해야할지 모르겠어서 이것저것 찾아서 해봤다.
일단 msg 파일 만들기


패키지에 msg폴더를 만듬. 
그안에 원하는 이름으로 <이름>.msg 파일을 만든다..
그리고 내부에 원하는 양식을 적는다. (기본적인 양식은 여기 있다 http://wiki.ros.org/msg )
ex) 
int64 num
string k

(팁 : 내가 msg를 만들고 잘 연결하면 내가만든 msg형식을 다른 msg의 양식으로 쓸수 있다.

여기서부터가 중요한 세팅인데


<package.xml>
 <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>
msg를 generate 하고 run할것이라는걸 적어줘야한다. 그래야  msg를 활용할 수 있도록 인식된다.

<CMakeLists.txt>

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
find_package에 맨 마지막 부분에 있는  message_generation을 “COMPONENTS로 추가" 해 주어야한다. 
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
catkin_package에 message_runtime을 depend 시켜줘야한다.

그리고 
add_message_files(
  FILES
  <이름>.msg
)
message file을 추가할 것이라고 말해줘야한다.
generate_messages(
   DEPENDENCIES
   std_msgs
)
그리고  message가 추가할때 dependencies를 알려줘야한다.
즉) 우리가  add_message_files를 할때 일반적인 int64 int32 float32 같은걸 사용하면 std_msgs만 있어도 상관 없지만.
다른 형태의 geometry_msgs라던지 아니면 우리가 사용하는 다른 패키지라던지를 이용하려면 디펜던시를 넣어줘야한다.


여기까지 하고 사용하려니.. 응 ? 어떻게 사용해야하지 ?

그냥 #include<프로젝트이름/메시지이름.h> 하면되나 ? 하고 실행했더니 
찾을수 없는 헤더라고 에러가 난다.

그래서 검색했더니.. 막상 잘 안나온다 (사실 이것때메 2시간 정도 잡아먹어서 정리해야겠다고 생각하고 글을 쓴다.)


여기서 다른사람이 질문했는데 
일단은 저사람도 헤더가 인식이 안되서 질문한것이다.
그래서 댓글을 보니 

  • In catkin_package you should add  EXPORTED_TARGETS mobility_generate_messages_cpp
  • Add this dependency to your executable: add_dependencies(mobility mobility_generate_messages_cpp)

CMakeLists.txt에 
그렇다 catkin_package 부분에 EXPORTED_TARGETS 프로젝트이름_generate_messages_cpp 를 넣고 
(질문자의 프로젝트 이름이 mobility다)
add_dependencies 부분에 executable이름 프로젝트이름_generate_messages_cpp를 추가해줘야한다.

이렇게 세팅하고 
C++에서는

#include<프로젝트이름/메시지이름.h>
를 쓰고, 

불러올때 프로젝트이름::메시지이름 으로 쓰면된다.

예를 들면  
#include<step6/Pose.h>

step6::Pose pos;

이런식으로 말이다.


결론적으로 알 수 있는건. 
맨처음 msg => generate 하면 cpp와 header 파일을 자동으로 세팅해주고

우리가 이 cpp와 헤더를 소스를 depend 하려면 프로젝트이름_generate_messages_cpp 를 depend 해주면된다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함