ros에서 사용하는 메시지는 세계에서 가장 널리 사용되는 표준 단위SI를 권장하고 있다.
퍼블리셔와 서브스크라이버 노드 작성 및 실행
1. 패키지 생성
$cd ~/catkin_ws/src
$catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp
이 패키지는 message_generation, std_msgs, roscpp패키지를 의존하므로 의존성 옵션을 달아주었다.
2. 패키지 설정 파일 수정
다음 명령어로 편집기를 이용해 파일을 열고 현재의 노드에 맞도록 수정할 수 있다.
$ gedit package.xml
3. 빌드 설정 파일 수정
ROS의 빌드 시스템인 캐킨은 기본적으로 CMake를 이용하고 있다.
다음 명령어로 수정 할수있다.
$ gedit CMakeLists.txt
4. 메시지 파일 생성
$ roscd ros_tutorials_topic 패키지 폴더로 이동
$mkdir msg 패키지에 msg메시지 폴더를 신규 작성
$cd msg 작성한 msg폴더로 이동
$gedit MsgTutorials.msg MsgTutorials.msg파일 신규 작성 및 내용수정
5. 퍼블리셔 노드작성
$roscd ros_tutorials_topic/src 패키지 소스 폴더인 src폴더로 이동
$gedit topic_publisher.cpp 소스 파일 신규 작성 및 내용수정
6. 서브스크라이버 노드 작성
$roscd ros_tutorials_topic/src 패키지 소스 폴더인 src폴더로 이동
$gedit topic_subscriber.cpp 소스 파일 신규 작성 및 내용수정
7. 노드 빌드
$cd ~/catkin_ws
$catkin_make
이를 기반으로 빌드된 결과물은 ~/catkin_ws의 /build와 /devel폴더에 각각 생성된다. build에는 캐킨빌드에서 사용된 설정 내용이 저장되며, devel lib에는 실행파일, devil include에는 메시지 헤더파일이 저장된다.
8. 퍼블리셔 실행, 서브스크라이버 실행, 실행된 노드들의 통신 상태 확인
$rosrun ros_tutorials_topic tpoic_publishrer
$rosrun ros_tutorials_topic tpoic_subscriber
$ rostopic echo /ros_tutorials_msg 퍼블리셔 노드에서 퍼블리시 중인 메시지를 확인 할 수있다.
$rqt_graph 이용해 실행된 노드들의 통신 상태를 확인 할 수있다.
Service
서비스는 요청이 있을때만 응답하는 서비스 서버와 요청하고 응답받는 서비스 클라이언트로 나뉜다.
서비스는 토픽과 달리 일회성 메시지 통신이다. 그래서 서비스의 요청과 응답이 완료되면 연결된 두노드는 접속이 끊긴다.
토픽과 비슷한 과정으로 파일을 만들 수있다.
◎서비스 파일 작성할 때, ---를 사이에 두고 요청과 응답에 대한 메시지를 넣어주게 되는데 구분자가 있다는 것만 제외하고 토픽의 메시지와 같다.
◎ 서비스는 토픽 퍼블리셔 및 서브스크라이버와는 달리 일회성이므로 rqt_graph에서 확인 할 수없다.
◎ rosservice call 명령어 사용 방법
1) rosservice call 명령어를 사용
명령어 뒤에 /ros_tutorials_srv처럼 해당하는 서비스 이름을 적고, 그다음 이어서 서비스 요청에 필요한 매개변수를 적어주면 된다.
2) rqt의 ServiceCaller를 이용하는 방법
정보를 입력후 call아이콘을 클릭하면 서비스 요청이 실행되고 ,서비스 응답에 대한 결과가 표시된다.
리눅스나 ROS명령어 사용에 익숙치 않은 사람에게 rqt의 Service Caller를 추천한다.
Parameter
◎ 서비스를 수정하여 실습하였다.
◎ 파라미터는 노드 외부로부터 노드의 흐름이나 설정, 처리 등을 바꿀 수 있다.
roslaunch
◎ rosrun이 하나의 노드를 실행하는 명령어라면 roslaunch는 하나 이상의 정해진 노드를 실행시킬 수 있다.
◎ roslaunch는 *.launch 파일을 사용하여 실행노드를 설정하는데 이는XML기반이며 태그별 옵션을 제공한다
◎ 실행 명령어는 roslaunch [패키지명] [roslaunch 파일명] 이다.
*.launch 작성
$roscd ros_tutorials_topic
$mkdir launch
$cd launch
$gedit union.launch
<launch>태그 안에는 roslaunch 명령어로 노드를 실행할때 필요한 태그들이 기술된다.
<node>는 roslaunch로 실행할 노드를 기술하게 된다. 옵션으로는 pkg(패키지의 이름), type(노드명), name(위 type에 해당하는 노드가 실행 될때 붙여지는 이름-실행명) 이 있다.
사용법
$roslaunch ros_tutorials_topic union.launch--screen
(--screen 옵션을 추가해주면 해당 터미널에 실행되는 모든 노드들의 출력들이 터미널 스크린에 표시된다.)
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 한상민 #2주차-ROS의 중요 컨셉, 명령어, 도구 (0) | 2025.04.30 |
---|---|
[2025 ROS 스터디] 전예림 #2주차 - 중요 컨셉, 명령어, 도구 (0) | 2025.04.30 |
[2025 ROS 스터디] 김승현 #2주차-ROS의 중요컨셉, 명령어, 도구 (0) | 2025.04.22 |
[2025 ROS 스터디] 조원영 #2주차- ROS 용어, 명령어, 도구 (0) | 2025.04.15 |
[2025 ROS 스터디] 장우혁 #1주차 - ROS 소개 및 설치 (0) | 2025.04.10 |