여호영 / 2020.05.15
Ros에서 정해준 타입 뿐만 아니라 우리가 원하는 형식의 message를 만들 순 없을까?
ROS1, ROS2에 따라서 message를 어떻게 만드는지 알아보자!(현재 페이지는 ROS1을 기반으로 작성되었다.)
Custom message를 사용하려면 당연히 msg 파일을 만들어야 한다.
msg 파일들은 msg 폴더에 저장하게 되는데, [ros1_workspace]/src/[package]
폴더에 'msg'라는 이름의 폴더를 만든다.
그 후에 msg 폴더 안에 들어가서 nano, vim 같은 것을 이용해 텍스트를 작성한다.
아래 예시과 같이 원하는 메시지 타입(ex. uint16)과 이름(ex. aps_act_feedback)을 작성한다. (#은 주석을 의미)
여기서 메시지 타입은 공식적으로 존재하는 공식 Ros message타입을 따라야하며 이름은 원하는 대로 지으면 된다.
단, 이름은 모두 영문으로 소문자로 작성할 것!
#Artiv Message_ver3.0
#2020.04.28
std_msgs/Header header
uint16 aps_act_feedback #APS Feedback
uint16 brake_act_feedback #Brake ACT Feedback
uint8 gear_position_feedback #Gear position Feedback
int16 steering_angle_feedback #Steering angle Feedback
uint8 estop_switch #Switch State/E-Stop
uint8 autostandby_switch #Switch State/Auto-Standby
uint8 apm_switch #Switch State/APM S/W
uint8 asm_switch #Switch State/ASM S/W
uint8 agm_switch #Switch State/AGM S/W
uint8 override_feedback #Override Feedback
float32 avgspeed #Vehicle Speed
uint8 lampsignal #Turn_Sig_feed
uint8 bps_feedback #BPS_Feed
uint8 aps_feedback #APS_Feed
uint8 door_fl #Door_Front_Left
uint8 door_fr #Door_Front_Right
uint8 safety_belt_driver #Safety_belt(Driver)
uint8 trunk #TRUNK
uint8 door_rl #Door_Rear_Left
uint8 door_rr #Door_Rear_Right
float32 ws_fl #Wheel Speed Front Left
float32 ws_fr #Wheel Speed Front Right
float32 ws_rl #Wheel Speed Rear Left
float32 ws_rr #Wheel Speed Rear Right
위 처럼 텍스트 작성후 이름은 '[원하는 이름].msg'로 저장한다.
Custom message를 이용하기 위한 환경설정이라 하믄 CMakeLists.txt, package.xml을 수정하는 것이다.
복잡해보일 수 있는 파일이지만 천천히 따라오면 어렵지 않다!
CMakeLists.txt 파일을 먼저 수정해보자.
[ros1_workspace]/src/[package]
다음과 같은 디렉토리에 있는 CMakeLists.txt 파일을 수정해보자.
아마 패키지를 새로 만든 상황이라면 주석을 포함해 엄청 많은 것들이 적혀있을 것이다.
쫄지말고 다음과 같은 예시에 있는 내용만 남겨놓자.
cmake_minimum_required(VERSION 2.8.3)
project(candb)
find_package(catkin REQUIRED COMPONENTS
std_msgs
message_generation
)
add_message_files(
FILES
Artivmsg.msg
ERPmsg.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
CATKIN_DEPENDS
message_runtime
std_msgs
)
include_directories(
${catkin_INCLUDE_DIRS}
)
위 내용 중 'find_package', 'add_message_files'등 여러 함수(?)가 주석처리 되어 있을 것이다.
주석을 다 지우고 'find_package'에는 'std_msgs', 'message_generation'을 추가.
'add_message_files'에는 방금 작성한 '[원하는 이름].msg'을 추가.
'generate_messages'에는 'std_msgs'를 추가.
'catkin_package'에는 'std_msgs', 'message_runtime'을 추가.
(모든 곳에 std_msgs는 이미 입력되어 있을 수도...)
CMakeList.txt파일 수정은 끝!
다음으로는 비교적 html같이 만만해보이는 package.xml 파일을 수정해보자.
이 파일도 CMakeList.txt 처럼 주석이 엄청 많을텐데 예시처럼 그냥 다 지우면 된다.
이번에도 아래 예시를 먼저 보고 천천히 따라와보자.
<?xml version="1.0"?>
<package format="2">
<name>candb</name>
<version>0.0.0</version>
<description>The candb package</description>
<maintainer email="hoyeong@dgist.ac.kr">hoyeong</maintainer>
<license>TODO</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>message_generation</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>message_runtime</exec_depend>
<export>
</export>
</package>
위에서부터 'xml version'~'buildtool_depend'까지는 있었던 대로 두면 될 것 같다.(잘 모름)
'build_depend'에 'message_generation' 추가.
'exec_depend'에 'message_runtime' 추가.
('roscpp', 'rospy', 'std_msgs'는 기본적으로 입력되어 있을텐데 만약 없다면 입력하도록.)
package.xml 파일도 수정 완료!
이로써 Custom message를 이용하기 전에 필요한 제작 과정은 끝났다.
막상 수정해보니 별거 아니다~
이제는 코드를 통해서 파이썬에서 어떻게 사용되는지 확인해보자.
이는 'Custom message는 어떻게 사용할까?'페이지에서 확인해보자.