폴더 구조

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 |