나만의 메시지 만들기
Custom Message 선언
- msg 디렉터리 만들고 이동하기
- my_msg.msg 코드 입력 (아래 코드1 입력)
- package.xml 에 코드 추가 (파일 아래쪽에 코드2 추가)
- CMakeList.txt 수정
$ cm
으로 빌드
$ 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>
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
실행결과
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 실행 결과