[ROS Kinetic Kame][C++] Class를 활용한 간단한 Publisher 구현 Example
2020. 2. 20. 22:04ㆍDebugging/ROS
Subscriber 구현은 여기로
Quick Start
시작하기 앞서 package.xml, CMakeLists.txt패키지 설정이 귀찮으신 분들을 위한 예제 코드 GitHub
만들어진 catkin workspace 내 src 폴더로 이동한 후 아래 명령어를 입력해 Clone!
git clone https://github.com/MakingtheBuildKing/simple-pub-sub.git
catkin_make 후
rosrun tutorial_0 tutorial_0_publisher
를 입력하면 publisher node 실행 완료.
실행 확인하고 입맛에 맞게 바꿔 쓰면 됩니다.
Tutorial
Publisher는 ROS 공식 사이트의 예제를 그대로 형식에 맞춰 옮겨주면 쉽게 구현할 수 있다.
다음 예제는 현재 ROS time 을 받아 String 형태로 Publish 하는 Node 코드이다.
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <string>
class PUB {
public:
PUB();
~PUB();
private:
// Node Handler, Publisher 선언
ros::NodeHandle nh;
ros::Publisher time_pub;
// Publish 할 Data 선언
std::string time_sec, time_nsec;
// 작업을 진행할 함수
int task();
};
PUB::PUB() {
// Node Handler와 Publisher 초기화
nh = ros::NodeHandle();
/*
std_msgs::String Message 타입을 가지는 topic 정의
/time_publisher/ros_time 형태의 topic 생성
*/
time_pub = nh.advertise<std_msgs::String>("/time_publisher/ros_time", 10);
task();
}
PUB::~PUB(){};
int PUB::task(){
// iteration 주기 설정
ros::Rate taskRate(60);
while(ros::ok()) {
// Publisher에 맞는 Message타입 선언
std_msgs::String msg;
// data를 적절히 가공 후 msg에 할당
std::stringstream ss;
time_sec = std::to_string(ros::Time::now().sec);
time_nsec = std::to_string(ros::Time::now().nsec);
ss << time_sec << "."<< time_nsec;
msg.data = ss.str();
// msg에 할당된 data를 publish
time_pub.publish(msg);
ros::spinOnce();
taskRate.sleep();
}
return 0;
}
int main(int argc, char **argv){
// ROS 초기화
ros::init(argc, argv, "time_publisher");
// Class 객체 생성
PUB pub;
// Main iteration 주기 설정
ros::Rate spinRate(30);
while(ros::ok()){
/*
Main Loop는 30Hz 주기로 Iteration
*/
ros::spinOnce();
spinRate.sleep();
}
return 0;
}
위 예제 코드를 본인의 catkin workspace에 넣고 catkin_make 후
rostopic echo /time_publisher/ros_time
명령어를 통해 topic을 확인하면 현재 ros time이 publish 되고 있는 것을 확인할 수 있다.
'Debugging > ROS' 카테고리의 다른 글
[ROS Kinetic Kame][C++] Class를 활용한 간단한 Subscriber 구현 Example (0) | 2020.02.20 |
---|---|
[ROS Kinetic Kame] .rviz 파일 지정하여 Rviz 실행하기 (0) | 2020.02.20 |