기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

 

 

ROS msg와 srv 만들기

 이번장에서는 msg와 srv 파일을 만들고 빌드하는 법, 그리고 rosmsg, rossrv, roscp 명령어를 쓰자

 

 

msg와 srv 소개

- msg : msg 파일은 ROS 메시지 속성을 정의한 텍스트 파일로  메시지에 대한 소스코드 만들때 사용

- srv : 서비스에 대해서 정의한 서비스 파일로 리퀘스트와 리스폰스 두 파트로 이뤄짐.

- msg 파일은 패키지의 msg 폴더에다가 놓고, srv파일은 srv 폴더에다가 두면 된다!

- msg 파일은 한 줄당 필드 타입과 필드 명으로 이뤄지고, 필드 타입로 이런것들을 쓸수 있다.

  ex) int8/16/32 ..., float32/64, string, time,duration, 다른 msg파일 등

  + 특별한 타입으로 Header가 있는데, 이 헤더타입은 타임스템프와 coordinate frame(?) 정보를 가진다.

 

msg 파일의 예시

Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

 

srv 설명과 예시

 srv 파일은 msg파일처럼 타입과 타입명으로 한줄한줄 쓰면되고 리퀘스트와 리스펀스는 '---'로 구분해주면 된다.

int64 A
int64 B
---
int64 Sum

 

 

2. msg 사용하기

2.1 msg 만들기

이전에 만든 beginner_tutorial에 가서 만들자

소스코드에 msg 파일을 추가할수 있도록

package.xml 파일에다가 다음 두줄을 또 넣어야한다고 한다.

어떤식으로 반영이 되는지는 아직 모르겠다.

메타 정보를 담는 package.xml에 추가했으니

 

이제 CMakelists.txt도 수정해주자

빌드할때 찾을수 있도록 message_generation을 추가하고

catkin_package에도 

CATKIN_DEPEND message_runtime를 추가하고

그리고 51번 줄쯤가면

add_message_file에다가

FILE

Num.msgs를 주석해제하거나 추가해주자

 

마지막으로 generate_messages 부분에 주석을 해주면 끝

msg파일 만들고 생성하기 진짜 힘드네

 

 

 

 

 3. rosmsg 사용하기

rosmsg show [message type]

따로 catkin_make 같은거 하지도 않았는데 이미 devel/setup.bash를 실행해놔서인지

내가 만든 Num.msg를 찾아서 보여준다.

 

 

4. rossrv 사용하기

이제 서비스 파일을 만들어보자

근데 만들기 번거로우니 roscp로 다른 패키지의 파일을 여기다가 가져오자

 

아까 package.xml에다가 메시지 생성, 런타임 의존 내용 추가했으니 넘어가고

CMakelists.txt에 아래의 파트 주석을 지워주고 저렇게 고치면 된단다.

 

 

 

4.2 rossrv 사용하기

아까 rosmsg 처럼 써보자

rosrv show [service type]

 

 

 

+ Recent posts