Skip to content

Latest commit

ย 

History

History
158 lines (129 loc) ยท 3.92 KB

File metadata and controls

158 lines (129 loc) ยท 3.92 KB

์ปค์Šคํ…€ interfaces ๊ตฌํ˜„ํ•˜๊ธฐ

  1. ๊ฐœ์š”
  2. ์‹ค์Šต
    1. package ์ƒ์„ฑํ•˜๊ธฐ
    2. msg ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ
    3. ๋™์ผ package์—์„œ interface ์‚ฌ์šฉํ•˜๊ธฐ
    4. ํ•ด๋ณด๊ธฐ

1. ๊ฐœ์š”

  • ์ปค์Šคํ…€ interfaces๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (๋‚ด package์—์„œ ์ปค์Šคํ…€ interface๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ)
    • custom interfaces๋ฅผ ํŠน์ • package๋‚ด์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜์ง€๋งŒ
    • ํ•˜๋‚˜์˜ package๋‚ด์—์„œ ์„ ์–ธ, ์ƒ์„ฑ, ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋”์€ ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค! (์ถ”์ฒœํ•˜์ง€๋Š” ์•Š์Œ)

2. ์‹ค์Šต

2-1 package ์ƒ์„ฑํ•˜๊ธฐ

  • more_interfaces package ์ƒ์„ฑํ•˜๊ณ  ์ด package ๋‚ด๋ถ€์— msg ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake more_interfaces
mkdir more_interfaces/msg

2-2 msg ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ

  • more_interfaces/msg ๋‚ด๋ถ€์— AddressBook.msg ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜ ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ
uint8 PHONE_TYPE_HOME=0
uint8 PHONE_TYPE_WORK=1
uint8 PHONE_TYPE_MOBILE=2

string first_name
string last_name
string phone_number
uint8 phone_type

2-2-1 msg ํŒŒ์ผ ๋นŒ๋“œํ•˜๊ธฐ

  • package.xml ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ
<buildtool_depend>rosidl_default_generators</buildtool_depend>

<exec_depend>rosidl_default_runtime</exec_depend>

<member_of_group>rosidl_interface_packages</member_of_group>
  • CMakeLists.txt ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ
find_package(rosidl_default_generators REQUIRED)
  • ์ƒ์„ฑํ•  messages์˜ ๋ชฉ๋ก์„ ์„ ์–ธ (CMakeLists.txt)
set(msg_files
  "msg/AddressBook.msg"
)
  • message ์ƒ์„ฑ
rosidl_generate_interfaces(${PROJECT_NAME}
  ${msg_files}
)
  • runtime ์˜์กด์„ฑ
ament_export_dependencies(rosidl_default_runtime)

2-3 ๋™์ผ package์—์„œ interface ์‚ฌ์šฉํ•˜๊ธฐ

  • more_interfaces/src/publish_address_book.cpp ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜ ๋‚ด์šฉ ๋ณต์‚ฌํ•˜๊ธฐ
#include <chrono>
#include <memory>

#include "rclcpp/rclcpp.hpp"
#include "more_interfaces/msg/address_book.hpp"

using namespace std::chrono_literals;

class AddressBookPublisher : public rclcpp::Node
{
public:
  AddressBookPublisher()
  : Node("address_book_publisher")
  {
    address_book_publisher_ =
      this->create_publisher<more_interfaces::msg::AddressBook>("address_book", 10);

    auto publish_msg = [this]() -> void {
        auto message = more_interfaces::msg::AddressBook();

        message.first_name = "John";
        message.last_name = "Doe";
        message.phone_number = "1234567890";
        message.phone_type = message.PHONE_TYPE_MOBILE;

        std::cout << "Publishing Contact\nFirst:" << message.first_name <<
          "  Last:" << message.last_name << std::endl;

        this->address_book_publisher_->publish(message);
      };
    timer_ = this->create_wall_timer(1s, publish_msg);
  }

private:
  rclcpp::Publisher<more_interfaces::msg::AddressBook>::SharedPtr address_book_publisher_;
  rclcpp::TimerBase::SharedPtr timer_;
};


int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<AddressBookPublisher>());
  rclcpp::shutdown();

  return 0;
}

2-3-2 publisher ๋นŒ๋“œํ•˜๊ธฐ

  • CMakeLists.txt ์ˆ˜์ •(์ƒˆ๋กœ์šด target ์ƒ์„ฑ)
find_package(rclcpp REQUIRED)

add_executable(publish_address_book src/publish_address_book.cpp)
ament_target_dependencies(publish_address_book rclcpp)

install(TARGETS
    publish_address_book
  DESTINATION lib/${PROJECT_NAME})

2-3-3 interface์— ๋Œ€ํ•œ Link

  • CMakeLists.txt ์ˆ˜์ •(๋™์ผ package๋‚ด์—์„œ ์ƒ์„ฑ๋œ message ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€)
rosidl_target_interfaces(publish_address_book
  ${PROJECT_NAME} "rosidl_typesupport_cpp")

2-4 ํ•ด๋ณด๊ธฐ

  • ๋นŒ๋“œํ•˜๊ธฐ
cd ~/ros2_ws
colcon build --packages-up-to more_interfaces
  • publisher ์‹คํ–‰ํ•˜๊ธฐ
source install/local_setup.bash
ros2 run more_interfaces publish_address_book
  • address_book topic์œผ๋กœ publish๋˜๋Š” message ํ™•์ธํ•˜๊ธฐ (echo ๋ช…๋ น ์‚ฌ์šฉ)
source install/setup.bash
ros2 topic echo /address_book