ROS에서 노드끼리 통신을 할 때 메세지 타입을 Int32,String ,Bool 과 같은 자료형으로 지정할 수 있지만, 커스텀 메세지를 만들어서 보낼 수도 있다. 여러가지 자료형을 담을 수 있어서 필요할 때 만들어서 사용하면 용이하게 쓸 수 있다. 예를들어 아래와 같이 어떤 사람의 이름 , 키, 전화번호 등을 각각의 자료 구조에 맞는 타입으로 선언해서 보낼 수 있다. 이번에는 그 메세지를 만드는 방법에 대해서 알아보겠다.
String last_name
String first_name
float heigh
String phone_number
우선 커스텀 메세지를 사용하기 위해서는 package.xml
파일을 수정해야한다. package 를 create 하면 자동으로 생성되는 파일이다.
아래의 두줄을 추가하면 된다.
📦package.xml
...
<build_depend>message_generaion</build_depend>
<exec_depend>message_runtime</exec_depend>
...
CMakeList.txt
파일도 수정해야한다.
🗒CMakeList.txt
...
find_package(catkin REQUIRED COMPONENTS
rospy
std_msgs
message_generation //새롭게 추가
)
...
add_message_files(
FILES
my_msg.msg
) //코멘트 풀기 , .msg 파일 추가
...
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs //코멘트 풀기
)
...
catkin_package(
CATKIN_DEPENDS message_runtime //추가
# INCLUDE_DIRS include
# LIBRARIES my_motor
# CATKIN_DEPENDS rospy std_msgs
# DEPENDS system_lib
)
📬my_msg.msg
string first_name
string last_name
int32 age
int32 score
string phone_number
int32 id_number
src/msg
파일에 my_msg.msg
파일을 생성하고 위와 같이 입력한다.
my_msg
가 잘 만들어 졌는지 확인하기 위해서는 터미널 창에서 아래의 명령어로 확인 할 수 있다.
⬛Terminal
cm
rosmsg show my_msg
위 사진과 같이 잘 생성된 것을 확인 할 수 있었다. 해당 msg에 값을 담아서 보낼때는 아래와 같이 값을 부여 할 수 있다.
msg =my_msg()
msg.first_name = "First name"
msg.age = 23
...