본문 바로가기

개발

ros 메시지 통신을 공부하고

오로카의 갓갓 표윤석님의 강의(https://cafe.naver.com/openrt/3043)를 그대로 따라하면서 정리한 내용이다.


우선 이 강의가 만들어질 때와 달리 버전이 바뀐 것이 있기에 달라진 설정이 있었다. 강좌의 package.xml 파일과 달리 나의 package.xml은 아래 그림과 같이 포맷 2로 쓰였다.




그래서 <run_depend> 대신에 위와 같이 <build_export_depend> , <exec_depend>가 생겼는데 그래서 다음의 문서를 참고해서 위와 같이 수정하였다.



다음으로는 직접적인 코드에서의 알아낸 내용이다. make가 끝난 뒤 roscore도 키고 아래의 명령어를 치면 ros_tutorial_msg라는 토픽이 열린다.


$ rosrun oroca_ros_tutorials ros_tutorial_msg_publisher


$ rostopic echo /ros_tutorial_msg


이걸로 실제 메시지를 볼 수가 있다.




rqt를 통해서도 이를 알 수 있는데 이 이름은 전적으로 cpp 코드를 짤 때 정해진다. 그래서 토픽 이름을 위와 같이 ros_turotial_Msg라고 해놓으면 subscriber는 읽지를 못한다.




rqt_graph 를 통해서 보아도 publisher, subscriber가 생기기만 하고 통신은 되지 않고 있다.



아래는 cpp 코드의 사진.




publish 관련 cpp 코드에서


ros::Rate loop_rate(10);

라는 부분이 있는데 10이란 것은 1초에 10번 보내겠다는 뜻이다. baudrate의 설정에 따라서 바꿀 수 있을 듯 하다.


이제는 예를 들어 publish되고 있는 topic의 데이터 타입만 알게 되면 그것을 subscribe해서 쓸 수 있게 되었다는 이야기이다. 다음의 링크를 따라서 imu data를 subscribe 해 보았다.




위와 같이 publish 되고 있는 정보들 중 /mavros/imu/data를 subscribe 하고 싶다면 일단 rqt를 통해서 그 데이터의 type을 알아낸 다음 그 형식에 맞추어서 subscriber를 짜 주면 된다~!!! 그리고 예제를 따라서 해 보았더니 실제로 잘 작동했다!!!