[ROS2] 인터페이스

송민영·2022년 1월 2일
0
post-thumbnail
post-custom-banner

ROS2 인터페이스

ROS2 토픽, 서비스, 액션 인터페이스

인터페이스 기초

  • 노드 간 데이터를 주고받을 때 사용되는 데이터의 형태
  • IDL(interface definition language) : msg, srv, action 등
    • 단순 자료형 : 정수, boolean, ...
    • 메시지 안에 메시지 : geometry_msgs/msgs/Twist의 Vector3 linear
    • 배열 : sensor_msgs/msgs/LaserScan 의 float32[] ranges

단순 자료형

  • 정의 방법
    fieldtype1 fieldname1
    
    fieldtype2 fieldname2
    
    fieldtype3 fieldname3

토픽 - 메시지

  • turtlesim 패키지
 $ ros2 interface show geometry_msgs/msg/Twist
 $ ros2 interface show geometry_msgs/msg/Vector3

  • geometry_msgs/msgs/Twist 메시지 =
    float64 자료형의 linear.x, linear.y, linear.z, angular.x, angular.y, angular.z

  • ros2 interface [something]

    • show
    • list : 현재 개발 환경의 모든 msg, srv, action 메시지
    • package : msg, srv, action 인터페이스를 담고 있는 패키지의 목록
    • packages : 지정한 패키지에 포함된 인터페이스들
    • proto : 인터페이스의 기본 형태
$ ros2 interface proto geometry_msgs/msg/Twist

"linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
"

서비스 인터페이스

  • /spawn 서비스 예시
    $ ros2 interface show turtlesim/srv/Spawn.srv
    
    float32 x
    float32 y
    float32 theta
    string name
    ---
    string name
  • ‘---’ 구분자
    x, y, theta, name : 서비스 요청 (클라이언트 → 서버) ⇒ name (서버에서 서비스 수행 이후 → 클라이언트)

액션 인터페이스

  • turtlesim 예시 /turtle1/rotate_absolute 액션에 사용된 RotateAbsolute.action 인터페이스
    $ ros2 interface show turtlesim/action/RotateAbsolute.action
    
    float32 theta # 목표
    ---
    float32 delta # 결과
    ---
    float32 remaining # 피드백 
  • ‘—-’ 구분자
    액션 목표(goal)), 액션 결과(result), 액션 피드백(feedback)을 구분
    x, y, theta, name : 서비스 요청 (클라이언트 → 서버) ⇒ name (서버에서 서비스 수행 이후 → 클라이언트)

인터페이스

  • 인터페이스으로만 구성된 패키지를 별도로 만들어 사용해야 의존성면에서 관리하기 편함

인터페이스 패키지 생성

  • 패키지 이름 : msg_srv_action_interface_example
    $ cd ~/robot_ws/src
    $ ros2 pkg create --build-type ament_cmake msg_srv_action_interface_example
    $ cd msg_srv_action_interface_example
    $ mkdir msg srv action 
  • msg 인터페이스

    ArithmeticArgument.msg

    • 텍스트 파일 생성하기 : touch [파일명].[확장자]
      • gedit 으로 파일 수정
        # Messages
        builtin_interfaces/Time stamp
        float32 argument_a
        float32 argument_b
  • msg : 메시지 파일은 ROS 메시지의 영역에 대해 기술한 단순한 텍스트 파일입니다. 이 파일은 다양한 언어의 소스코드에서 사용하는 메시지를 만드는 데 사용됩니다.
    • srv 인터페이스 ArithmeticOperator.srv
         # Constants
        int8 PLUS = 1
        int8 MINUS = 2
        int8 MULTIPLY = 3
        int8 DIVISION = 4
        
        # Request
        int8 arithmetic_operator
        ---
        # Response
        float32 arithmetic_result
  • action 인터페이스

    ArithmeticChecker.action

        # Constants
        int8 PLUS = 1
        int8 MINUS = 2
        int8 MULTIPLY = 3
        int8 DIVISION = 4
        
        # Request
        int8 arithmetic_operator
        ---
        # Response
        float32 arithmetic_result

패키지 설정 파일

패키지 설정 파일(package.xml) 작성 / 수정

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>msg_srv_action_interface_example</name>
  <version>0.2.0</version>
  <description>
    ROS 2 example for message, service and action interface
  </description>
  <maintainer email="passionvirus@gmail.com">Pyo</maintainer>
  <license>Apache 2.0</license>
  <author email="passionvirus@gmail.com">Pyo</author>
  <author email="routiful@gmail.com">Darby Lim</author>
  <buildtool_depend>ament_cmake</buildtool_depend>
  **<buildtool_depend>rosidl_default_generators</buildtool_depend> # 인터페이스 전용 패키지에서 필수적인 의존성 패키지
  <exec_depend>builtin_interfaces</exec_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>**
  <member_of_group>rosidl_interface_packages</member_of_group>
  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

빌드 설정 파일

빌드 설정 파일(CMakeLists.txt) 작성/수정

  • set 명령어로 msg, srv, action 파일을 지정해주고 rosidl_generate_interfaces에 해당 셋들을 기입
################################################################################
# Set minimum required version of cmake, project name and compile options
################################################################################
cmake_minimum_required(VERSION 3.5)
project(msg_srv_action_interface_example)

if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
endif()

################################################################################
# Find and load build settings from external packages
################################################################################
find_package(ament_cmake REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(rosidl_default_generators REQUIRED)

################################################################################
# Declare ROS messages, services and actions
################################################################################
**set(msg_files
  "msg/ArithmeticArgument.msg"
)

set(srv_files
  "srv/ArithmeticOperator.srv"
)

set(action_files
  "action/ArithmeticChecker.action"
)

rosidl_generate_interfaces(${PROJECT_NAME}
  ${msg_files}
  ${srv_files}
  ${action_files}
  DEPENDENCIES builtin_interfaces
)**

################################################################################
# Macro for ament package
################################################################################
ament_export_dependencies(rosidl_default_runtime)
ament_package()

빌드

$ cd ~/ros2_bashing
$ colcon build --symlink-install --packages-select msg_srv_action_interface_example
  • 구조
~/ros2_bashing/install/msg_srv_action_interface_example
├── include
│   └── msg_srv_action_interface_example
│       ├── action
│       ├── msg
│       └── srv
├── lib
│   └── python3.6
│       └── site-packages
│           └── msg_srv_action_interface_example
│               ├── action
│               ├── msg
│               └── srv
└── share
    └── msg_srv_action_interface_example
        ├── action
        ├── msg
        └── srv
post-custom-banner

0개의 댓글