본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2025 ROS 스터디] 윤윤지 #3주차-ROS 기본 프로그래밍

반응형

Ch 07 ROS 기본 프로그래밍

 

1.ROS 프로그래밍 전 알아둬야 할 사항

 

1) 표준단위 : SI 단위 사용

 

2) 좌표 표현 방식 : x(foward), y(left), z(up), 오른손 법칙(시계 반대 방향이 (+))

 

3) 프로그래밍 규칙

 

 

 

 

2.Topic 작성

 

1) 패키지 생성

cd: change directory 라는 기본 명령어

~:틸드(홈폴더)

 

 

2) 패키지 설정 파일 수정

 

package.xml 은 패키지 정보를 담은 XML 파일로서 패키지 이름, 저작자, 라이선스, 의존성 패키지 등을 기술

 

 

3) 빌드 설정 파일 수정

 

 

4)메시지 파일 작성

 

 

5) 퍼블리셔 노드 작성

 

 

6) 서브스크라이버 노드 작성

 

topic_subscriber.cpp라는 파일을 빌드하여 topic_subscriber라는 실행 파일을 만드는 과정

 

 

 

7) ROS 노드 빌드

위 명령어로 ros_tutorials_topic 패키지의 메시지 파일, 퍼블리셔 노드, 서브스크라이버 노드를 빌드

 

 

8) 퍼블리셔 실행

 

ROS 노드 실행 명령어인 rosrun을 이용하여, ros_tutorials_topic 패키지의 topic_publisher 노드를 구동하라는 명령어

 

 

 

*rostopic

rostopic 명령어를 이용하여 현재 ROS 네트워크에서 사용중인 토픽 목록, 주기, 데이터 대역폭, 내용 확인 등이 가능

 

 

 

9) 서브스크라이버 실행

 

ROS 노드 실행 명령어인 rosrun을 이용하여 ros_tutorials_topic 패키지의 topic_subscriber 노드를 구동하라는 명령어

 

 

 

10) 실행된 노드들의 통신 상태 확인

 

 

 

 

3.Service 작성

 

1) 패키지 생성

 

 

2) 패키지 설정 파일 수정

 

 

3) 빌드 설정 파일 수정

 

 

4) 서비스 파일 작성

노드에서 사용할 메시지인 SrvTutorial.srv를 빌드할 때 포함하라는 이야기

 

--- 위의 부분이 request, 부분 아래 부분이 response

 

 

5) 서비스 서버 노드 작성

src 폴더의 sevice_server.cpp라는 파일을 빌드하여 service-server라는 실행 파일을 만드는 명령

 

 

6) 서비스 클라이언트 노드 작성

 

src 폴더의 service_client.cpp 라는 파일을 빌드하여 service_client 라는 실행 파일을 만드는 명령어

 

 

 

7) ROS 노드 빌드

위 명령어로 ros_tutorials_service 패키지의 서비스 파일, 서비스 서버 노드와 클라이언트 노드를 빌드

 

 

 

8) 서비스 서버 실행

서비스 서버는 요청이 있을때 까지 아무런 처리없이 기다리도록 프로그래밍 되었다. 그러므로 다음 명령어를 실행하면 서비스 서버는 서비스 요청을 기다림

 

 

9) 서비스 클라이언트 실행

서비스 클라이언트 실행

 

 

 

4.Parameter

 

1) 파라미터를 활용한 노드 작성

service_server.cpp 소스를 수정

 

2) 노드 빌드 및 실행

 

 

3) 매개변수 목록 보기

rosparam list 명령어로 현재 ROS 네트워크에 사용된 파라미터의 목록을 확인할 수 있다. /calculation_method가 우리가 사용한 파라미터

 

 

4) 파라미터 사용 예

 

ROS에서 파라미터는 노드 외부로부터 노드의 흐름이나 설정, 처리 등을 바꿀 수 있다.

 

5. roslaunch 사용법

rosrun:하나의 노드를 실행하는 명령어

roslaunch:하나 이상의 정해진 노드를 실행

 

 

1) roslaunch 의 활용

launch라는 파일명을 사용하고 해당 패키지 폴더에 launch 라는 폴더를 생성하고 그 폴더 안에 넣어야 한다.

 

roslaunch 파일을 작성하면 다음으로 union.launch를 실행
실행 결과

 

퍼블리쉬 노드와 서브스크라이버 노드를 각각 두 개씩 구동하여 서로 별도의 메시지 통신하게 한다라는 것은 실행되는 노드의 이름만 변경되었을 뿐 사용되는 메시지의 이름을 바꿔주지 않았다. 

->union.launch를 수정하기

 

 

변경 후의 실행된 노드들의 모습

반응형