나만의 메시지 만들기

Custom Message 선언

image

  • 메시지 파일 생성 및 작성 순서
  1. msg 디렉터리 만들고 이동하기
  2. my_msg.msg 코드 입력 (아래 코드1 입력)
  3. package.xml 에 코드 추가 (파일 아래쪽에 코드2 추가)
  4. CMakeList.txt 수정
  5. $ cm으로 빌드
  6. $ rosmsg show my_msg로 결과 확인 (~/xycar_ws/devel/lib/python2.7/dist_packages/msg_send/msg 에서 확인도 가능함)
# 코드1

string first_name
string last_name
int32 age
int32 score
string phone_number
int32 id_number
# 코드2

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
  • 결과 확인

image

msg_receiver, msg_sender 코드 작성

  • $ gedit msg_receiver.py
  • $ gedit msg_sender.py
usr/bin/env python

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

def callback(msg): # my_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)

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

rospy.spin()
#!/usr/bin/env python

import rospy
from msg_send.msg import my_msg

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

msg = my_msg()
msg.first_name = "sanghun"
msg.last_name = "Park"
msg.id_number = 19980324
msg.phone_number = "010-2562-0324"

rate = rospy.Rate(1)

while not rospy.is_shutdown():
	pub.publish(msg)
	print("sending message")
	rate.sleep()
  • $ chmod +x msg_sender.py msg_receiver.py

실행

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

실행결과

image

launch 파일 작성

  • 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>

launch 실행 결과

image