이어서 전에 설정해둔 단축키를 통해 패키지를 생성한다.
cs
catkin_create_pkg pub_sub_msg_pkg std_msgs roscpp message_generation actionlib actionlib_msgs
cm
roscd pub_sub_msg_pkg/src
위의 마지막 코드로 pub_sub_msg_pkg/src 디렉터리로 이동한다.
이후 talker와 listener를 작성할건데 각각 퍼블리셔와 서브스크라이버이다.
pub_sub_msg_pkg/src 디렉터리에서 퍼블리셔, 서브스크라이버 코드를 차례대로 작성한다.
[편집기] talker.cpp
#include "ros/ros.h"
#include "std_msgs/Int32.h"
#include <iostream>
int main(int argc, char **argv){
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<std_msgs::Int32>("/numbers", 10);
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok()){
std_msgs::Int32 msg;
msg.data = count;
ROS_INFO("%d", msg.data);
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
============================================================================
[편집기] listener.cpp
#include "ros/ros.h"
#include "std_msgs/Int32.h"
#include <iostream>
void numberCallback(const std_msgs::Int32::ConstPtr& msg){
ROS_INFO("Recieved: [%d]", msg->data);
}
int main(int argc, char **argv){
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("/numbers", 10, numberCallback);
ros::spin();
return 0;
}
그 다음 package.xml과 CMakeLists.txt를 수정하는데
나중에 많이 알아보니까 이 부분이 은근 어렵고 중요한 것 같다.. 아마도 익숙하지 않아서 그런것같다.
make의 개념과 응용에 익숙해져야 한다.
참고사이트에 나왔지만 자세히 봐야하는데 cs(= cd ~/catkin_ws/src)로 이동한 후에
pub_sub_msg_pkg 디렉터리로 이동하여 이미 존재하는 package.xml과 CMakeLists.txt를 수정한다.
cs
cd pub_sub_msg_pkg
ls //확인용도
[편집기] package.xml
// 수정할 필요없다.
[편집기] CMakeLists.txt
주어진 코드 외에도 이미 존재하는 코드들이 있었는데 코드를 지우지는 않고 추가만 했다.
(순서를 지키면서 해야한다.)
이후
cm pub_sub_msg_pkg
을 하고 이후 참고 사이트가 나같은 초보자에게는 살짝 헷갈릴 수도 있지만
cm
을 한다.
그럼 이렇게 뜨는데 이후 새로운 터미널 4개의 창에 각각
roscore
rosrun pub_sub_msg_pkg talker
rosrun pub_sub_msg_pkg listener
rqt_graph
을 순서대로 치면
이런식으로 roscore의 작동과 pub와 sub가 정상적으로 움직이는 것을 그래프로 확인할 수 있다.
원은 노드이며, 화살표 방향으로 퍼블리셔와 서브스크라이버의 관계를 알 수 있다. 화살표 위에 있는 /numbers는 어떠한 토픽으로 메시지를 송수신하고 있는지 알 수 있다.
이제 정말 어쩌면 지금까지 과정중 제일 큰 산인 실시간 스트리밍이 남았다.
'embedded > ROS' 카테고리의 다른 글
6. ROS & opencv (cv_bridge) 실시간 스트리밍...성공! (1) | 2021.09.01 |
---|---|
5. ROS & opencv (cv_bridge) 실시간 스트리밍...실패 (0) | 2021.09.01 |
3. ROS 설치완료 (0) | 2021.08.31 |
2. ROS-Melodic 설치 (0) | 2021.08.30 |
1. ROS 시작 (0) | 2021.08.30 |