[ROS] custom message 생성

in #kr-dev6 years ago (edited)

ROS에서 message는 노드가 서로 주고받는 데이터를 말한다.

custom message는 기존 message type으로 표현하기 어려울 때, 직접 만들어 사용할 수 있다.

예를 들어, 로봇의 odometry는 이미 정해진 구조가 있다. 이 구조를 활용하는 편이 훨씬 좋다.

http://docs.ros.org/melodic/api/nav_msgs/html/msg/Odometry.html

나 같은 경우, 물체에 대한 정보를 서로 주고 받고싶다.

마땅히 사용할 message type이 없다면, 이 때 물체에 대한 구조를 새로 정의할 수 있다.

이걸 custom message라고 한다.


만드는 방법

http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv

나는 Object라는 message type을 만들어보려고 한다.

프로젝트 내에 msg라는 폴더를 생성하고, 원하는 메시지를 정의한다.

  • 작성자는 Object.msg라는 이름으로 만들었다.
  • 내부에는 이것저것 많이 들어있다.
  • # 은 주석이다.

Cmakelists.txt 에서 추가할 것을 본다.

  • find_package에 message_generation를 추가한다. (중요)
  • Cmakelists에서 정의한 Object.msg 를 add_message_files에 추가한다.
  • message를 추가하기 위해서는 dependencies를 설정해줘야 한다.
  • 만약에 odometry_msgs를 element로 쓰고 싶다면, 넣으면 된다.

사용 방법

위와 같이 셋팅을 한 후, catkin_make로 빌드한다.

코드 상에서 어떻게 사용하는지 보자.

사실, 다른 메시지랑 똑같이 사용하면 된다. include만 잘 하면 된다.

  • C++에서  메시지를 사용하기 위해서 메시지를 include를 해야한다.
  • #include “프로젝트 명/message 이름.h”
  • 나 같은 경우는  #include “perception/Object.h”가 된다.

다음은 publish를 해보겠다.

publisher를 정의한다.

gFacePublisher = nh.advertise<perception::Object>(“face”,1);

그리고 메시지 객체를 정의한다.

정의한 메시지 객체에 데이터를 넣고 publish!


이렇게 publish를 하면 된다.

subscriber도 다른 메시지와 사용방법이 같다.

ros::Subscriber gFaceSubscriber = nh.subscribe(“face”, 1, faceCallback);

void faceCallback(const perception::Object& faceMsg);

cout<<faceMsg.id<<endl;


Python에서도 비슷하게 사용하면 되는데

import할 때 아래처럼 하면 된다.

나머지 사용방법은 다른 메시지와 같다.

from perception.msg import Object

 


즉, msg 폴더와 Cmakelists.txt에 정의만 잘 해놓으면

다른 메시지들과 똑같이 사용하면 된다.

Sort:  

오오. ros는 처음입니다. ㅎㅎㅎ 신기하네요.

제가 이전 글에
제가 작성한 글들은 정리를 좀 해봤는데요 ㅎㅎ.

Ros 관련으로도 좀 글을 적었습니다. 도움이 됐으면 좋겠어요 ㅎㅎ

Ros는 몇년전부터 로봇 쪽에서는 되게 유용한 툴로 사용되고있습니다.

많은 하드웨어/로봇들이 ros에서 동작할 수 있도록 인터페이스를 만들고 있습니다. 다르파 참가했던 로봇이라언가 pionerr, kobuki 등

소프트웨어도 마찬가지로 ros를 연동함으로써 하드웨어 종속성을 많이 줄일수 있습니다. 많은 오픈소스들이 로스 기반에서 동작하고 있어요. ㅎㅎ

감사합니다.

짱짱맨 호출에 응답하여 보팅하였습니다. 스팀잇을 시작하시는 친구들에게도 널리 알려주세요.

Hi @jacobyu!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 2.496 which ranks you at #16361 across all Steem accounts.
Your rank has improved 162 places in the last three days (old rank 16523).

In our last Algorithmic Curation Round, consisting of 404 contributions, your post is ranked at #261.

Evaluation of your UA score:
  • Only a few people are following you, try to convince more people with good work.
  • You have already convinced some users to vote for your post, keep trying!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

Coin Marketplace

STEEM 0.21
TRX 0.25
JST 0.038
BTC 95358.83
ETH 3366.72
USDT 1.00
SBD 3.11