[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 |