Học liệu

Viết một Node Service đơn giản ( C++)

  • 12/01/2021
  • Học liệu

1. Chương trình 

Di chuyển đến thư mục beginner_tutorials  bằng lệnh:

roscd beginner_tutorials

Tạo tệp src / add_two_ints_server.cpp trong gói beginner_tutorials và dán nội dung sau vào bên trong:

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"

bool add(beginner_tutorials::AddTwoInts::Request  &req,
         beginner_tutorials::AddTwoInts::Response &res)
{
  res.sum = req.a + req.b;
  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  return true;
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_server");
  ros::NodeHandle n;

  ros::ServiceServer service = n.advertiseService("add_two_ints", add);
  ROS_INFO("Ready to add two ints.");
  ros::spin();

  return 0;
}

2. Giải thích 

Bây giờ, chúng ta hãy chia nhỏ mã.

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"

beginner_tutorials/AddTwoInts.h là tệp tiêu đề được tạo từ tệp srv mà chúng tôi đã tạo trước đó.

bool add(beginner_tutorials::AddTwoInts::Request  &req,
         beginner_tutorials::AddTwoInts::Response &res)

Hàm này cung cấp dịch vụ để thêm hai int, nó nhận kiểu yêu cầu và phản hồi được xác định trong tệp srv và trả về một boolean.

{
  res.sum = req.a + req.b;
  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  return true;
}

Ở đây hai int được thêm vào và lưu trữ trong phản hồi. Sau đó, một số thông tin về yêu cầu và phản hồi được ghi lại. Cuối cùng dịch vụ trả về true khi nó hoàn tất.

  ros::ServiceServer service = n.advertiseService("add_two_ints", add);

Ở đây dịch vụ được tạo và quảng cáo qua ROS.

 

 

 

 

Các tin khác