ROS

ROS - Custom Message

스테디음 2022. 3. 1. 23:23

폴더 구조

사진 출처: 프로그래머스 자율주행데브코스 강의자료

 

 

Custom message 사용 방법

메시지 파일 생성 및 작성

$ cd ~/xycar_ws/src
$ roscd msg_send
$ mkdir msg
$ cd msg
$ gedit my_msg.msg

 

my_msg.msg 안에 입력할 내용

string first_name
string last_name
int32 age
int32 score
string phone_number
int32 id_number

 

 

package.xml 수정

$ gedit package.xml

 

파일 아래 쪽에 내용 추가

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

이렇게!

 

 

CMakeLists.txt 수정

한 줄 추가
주석 풀고 다음과 같이 내용 변경
주석 풀기
한 줄 추가

 

 

 

Custom Message 설정 및 확인

 

실행

$ cm

※ 이 명령어를 실행하기 위해서는 ~/​.bashrc 파일 하단alias cm='cd ~/xycar_ws && catkin_make' 라는 내용을 적어주어야 한다.
($ sudo vi ~/.bashrc 명령어를 입력하면 수정할 수 있다.)

 

결과 확인

$ rosmsg show my_msg

결과

 

 

내 코드 안에서 Custom Message 사용하기

코드 안에 include or import 하는 법

(C++) #include "msg_send/my_msg.h"
(파이썬) from msg_send.msg import my_msg

 

다른 패키지에서도 custom msg 사용 가능

 

 

 

my_msg 사용 예제

메시지 발행 Publisher 노드

$ gedit msg_sender.py
#!/usr/bin/env python

import rospy
from msg_send.msg import my_msg  # my_msg 사용

rospy.init_node('msg_sender', anonymous=True)
pub = rospy.Publisher('msg_to_xycar', my_msg)

# my_msg 안에 데이터 채워넣기
msg = my_msg()
msg.first_name = "nayoung"
msg.last_name = "Choi"
msg.id_number = 20210815
msg.phone_number = "010-9072-7247"

rate = rospy.Rate(1)
while not rospy.is_shutdown():
	pub.publish(msg)  # my_msg 토픽 발행하기 
	print("sending message")
	rate.sleep()

 

메시지 발행 Subscriber 노드

$ gedit msg_receiver.py
#!/usr/bin/env python

import rospy
from msg_send.msg import my_msg  # my_msg 사용

# my_msg 데이터 꺼내기
def callback(msg):
    print ("1. Name: ", msg.last_name + msg.first_name)
    print ("2. ID: ", msg.id_number)
    print ("3. Phone Number: " , msg.phone_number)
    
rospy.init_node('msg_receiver', anonymous=True)

# my_msg 토픽 구독하기
sub = rospy.Subscriber('msg_to_xycar', my_msg, callback)

rospy.spin()

 

실행 권한 부여하기

$ chmod +x msg_sender.py msg_receiver.py

 

빌드 및 실행

$ cm
$ roscore
$ rosrun msg_send msg_receiver.py
$ rosrun msg_send msg_sender.py

 

 

launch 파일을 이용해서 실행하기

$ gedit m_send_sr.launch
<launch>
	<node pkg="msg_send" type="msg_sender.py" name="sender1"/>
	<node pkg="msg_send" type="msg_sender.py" name="sender2"/>
	<node pkg="msg_send" type="msg_receiver.py" name="receiver" output="screen"/>
</launch>
$ roslaunch msg_send m_send_sr.launch

 

 

 

 

'ROS' 카테고리의 다른 글

ROS - 1:N, N:1, N:N 통신  (0) 2022.03.01
ROS - 노드 통신을 위한 패키지 만들기  (0) 2022.03.01
ROS - roslaunch  (0) 2022.03.01
ROS - turtlesim, publisher, subscriber  (0) 2022.03.01
ROS 설치 및 환경설정  (0) 2022.02.28