[ROS] 노드 통신 프로그래밍 3 : 나만의 메시지

happy_quokka·2023년 10월 16일
0

ROS

목록 보기
20/25

나만의 메세지 만들기

1. 메시지 파일 생성 및 작성

$ 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

2. package.xml 수정

$ gedit package.xml

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

3. CMakeLists.txt 수정

$ gedit CMakeLists.txt 

  • message_generation 추가

  • add_message_files 주석 풀고 my_msg.msg 추가

  • generate_message 주석 풀기

  • CATKIN_DEPENDS message_runtime 추가

4. 빌드

$ cm

5. 잘 됐는지 확인

$ rosmsg show msg_send/my_msg
또는
$ rosmsg show my_msg

6. msg 관련 파일을 자세하게 알고 싶으면

$ cd devel/lib/python2.7/dist-packages/msg_send/msg/
$ cat _my_msg.py 

나만의 메시지 사용하기

1. msg_send/src 폴더로 이동

$ cs
$ cd msg_send/src/

2. msg_sender.py 파일 만들기 (publisher 노드)

$ gedit msg_sender.py
#!/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 = "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)
	print("sending message")
	rate.sleep()

3. msg_receiver.py 만들기(subscriver)

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

import rospy
from msg_send.msg import 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)

sub = rospy.Subscriber('msg_to_xycar', my_msg, callback)

rospy.spin()

4. 권한 부여, 빌드

$ chmod +x msg_sender.py msg_receiver.py 
$ cm

5. 실행

  • terminal 1 : $ roscore

  • terminal 2 : $ rosrun msg_send msg_receiver.py

  • terminal 3 : $ rosrun msg_send msg_sender.py

  • terminal 4 : $ rqt_graph

0개의 댓글