안녕하세요~ 오늘은 ROS Subscriber에서 매개변수로 파라미터를 넘기는 것을 해보겠습니다.
ROS subscriber 기본 코드
#include <ros/ros.h>
#include <my_msgs/TestString>
void msgCallback(const my_msgs::TestString::ConstPtr& msg)
{
/*
*
*
*/
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_sub_node");
ros::NodeHandle nh;
int id = 1419;
ros::Subscriber sub_time = nh.subscribe("topic", 1, msgCallback);
ros::spin();
return 0;
}
ROS를 어느정도 접하신 분이라면 이 정도의 코드는 이해하실 거라 믿습니다.
"topic"이라는 이름의 토픽을 subscribe하며 queue 사이즈는 1
그리고 무한루프를 돌면서 호출된 msgCallback함수를 동작시킵니다.
===============================================================
만약 여기서 int id = 1419;
id를 콜백함수의 매개변수로 넣기 위해서는 어떻게 해야 할까요?
바로 boost 라이브러리의 bind함수를 이용하면 됩니다.
Boost 라이브러리를 이용한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <ros/ros.h>
#include <boost/bind.hpp>
#include <my_msgs/TestString>
void msgCallback(const my_msgs::TestString::ConstPtr& msg, int id)
{
/*
*
*
*/
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_sub_node");
ros::NodeHandle nh;
int id = 1419;
ros::Subscriber sub_time = nh.subscribe<my_msgs::TestString>("topic", 1, boost::bind(&msgCallback, _1, id));
ros::spin();
return 0;
}
|
cs |
#include <ros/ros.h>
#include <my_msgs/TestString>
void msgCallback(const my_msgs::TestString::ConstPtr& msg)
{
/*
*
*
*/
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_sub_node");
ros::NodeHandle nh;
int id = 1419;
ros::Subscriber sub_time = nh.subscribe("topic", 1, msgCallback);
ros::spin();
return 0;
}
// 코드 설명
#include <boost/bind.hpp>
를 통해 boost라이브러리를 include 해줍니다
기존 코드와 달라진 점이 있다면
nh.subscribe<메세지타입>("토픽이름", 큐사이즈, boost::bind(&msgCallback, _1, 파라미터1));
이 부분이 아닐까 싶습니다.
1. 메세지 타입을 정의할 것
2. subscribe함수의 3번째 인자에는 boost::bind()를 넣을 것
3. boost::bind()의 첫 번 째 인자 -> 콜백함수의 주소를 참조로 넘겨줄 것
4. placeholder 은 뒤의 파라미터의 개수에 상관없이 무조건 _1 을 넣을 것
================================================================================
잠깐, 여기서 boost라이브러리를 못 찾을 때
CMakeLists.txt에서 아래 두 줄을 추가해줍니다.
'코딩처음입니다만★ > ROS' 카테고리의 다른 글
[ROS/PCL] PointCloud2 샘플데이터 재생 rosbag (1) | 2021.02.02 |
---|---|
[PointCloud] PCL 라이브러리 설치하기! install pcl on ubuntu 18.04 (0) | 2021.02.01 |
[ROS] 간단한 publisher와 subscriber (topic tutorial) (0) | 2021.01.31 |
[ROS] ros::spin, ros::spinOnce 차이점 (0) | 2021.01.29 |