카테고리 없음
[2025 ROS 스터디] <문승주> #3주차-<ROS의 기본 프로그래밍>
shul77whdl
2025. 5. 5. 23:58
반응형
I. ROS 프로그래밍 전에 알아둬야 할 사항
- 표준 단위: SI 단위 사용
- 좌표 표현 방식 (오른손 법칙)
- x‑축: 전방(Forward)
- y‑축: 좌측(Left)
- z‑축: 상향(Up)
- 정회전(Positive rotation): 시계 반대 방향(+)
- 프로그래밍 규칙: wiki.ros.org/CppStyleGuide 참고
Ⅱ. Publisher 및 Subscriber 노드 작성·실행
- Catkin 워크스페이스 생성 (워크스페이스가 없을 때)
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin_make - 패키지 생성
$ cd ~/catkin_ws/src
$ catkin_create_pkg ros_tutorials_topic \ message_generation std_msgs roscpp - 패키지 설정 파일 수정
- package.xml
- XML 버전 선언
- <package> 태그 및 이름(ros_tutorials_topic)
- 버전, 설명(2~3줄) — 공식 패키지의 검색용
- 라이선스, 저자 및 maintainer 정보
- 버그 신고 링크, 웹사이트
- 빌드(tool: catkin) 및 의존성 선언
- CMakeLists.txt
- 메시지 생성 설정 (message_generation, message_runtime)
- add_message_files(), generate_messages(),
catkin_package() 등
- package.xml
- 메시지 파일 작성
time stamp
int32 data -
$ roscd ros_tutorials_topic
$ mkdir msg $ cd msg
$ gedit MsgTutorial.msg - 퍼블리셔 노드 구현
- src/topic_publisher.cpp 에서 ROS 헤더, 메시지 헤더 포함
- ros::Publisher 생성 및 루프 내 publish() 호출
- 서브스크라이버 노드 구현
- src/topic_subscriber.cpp 에서 콜백 함수 정의
- ros::Subscriber 로 MsgTutorial 메시지 수신
- 빌드 및 실행
- 토픽 목록 확인:
$ rostopic list $ rostopic info /ros_tutorial_msg - 통신 구조 시각화:
$ rqt_graph
- 토픽 목록 확인:
-
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash # 퍼블리셔 실행
$ rosrun ros_tutorials_topic topic_publisher # 서브스크라이버 실행
$ rosrun ros_tutorials_topic topic_subscriber
Ⅲ. Service 서버·클라이언트 노드 작성·실행
- 패키지 생성 및 설정
- Publisher/Subscriber와 유사하게 package.xml, CMakeLists.txt 수정
- 서비스 파일 작성
int64 a int64 b --- int64 sum
$ cd srv
$ gedit AddTwoInts.srv - Service 서버 노드 (src/service_server.cpp)
- ros::ServiceServer 생성
- 콜백에서 요청(request) 처리 후 응답(response) 반환
- Service 클라이언트 노드 (src/service_client.cpp)
- ros::ServiceClient 로 call() 수행
- 빌드 및 실행
- rosservice 사용 예:
$ rosservice call /add_two_ints 1 2
- GUI 호출 (rqt → Service Caller)
- rosservice 사용 예:
- $ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash # Master 실행
$ roscore # 서비스 서버 실행
$ rosrun ros_tutorials_topic service_server # 서비스 클라이언트 실행
$ rosrun ros_tutorials_topic service_client
Ⅳ. Action 서버·클라이언트 노드 작성·실행
Ⅴ. Parameter 사용법
- Parameter Server 활용
- 노드 내부 설정값 외부 관리
- rosparam 명령어로 조회·설정
-
$ rosparam set /robot_speed 1.0$ rosparam get /robot_speed
- 코드 내에서 파라미터 읽기
-
double speed; nh.getParam("robot_speed", speed);
- Launch 파일에서 파라미터 선언
-
<param name="robot_speed" type="double" value="1.0"/>
Ⅵ. Roslaunch 사용법
- 하나 이상의 노드를 XML 기반 파일(*.launch)로 한 번에 실행
- 주요 태그
- <launch>: 시작·끝
- <node pkg="..." type="..." name="...">
- <arg> launch 파일 내에 변수를 정의 가능, 매개변수 변경 가능 (자주 쓰임)
- <param>, <rosparam>, <remap>, <include>, <group> 등
- 실행 예:
$ roslaunch ros_tutorials_topic tutorial.launch
- 주요 옵션
- --screen: 터미널에 로그 출력
- 네임스페이스, 환경 변수 설정, 다른 launch 포함 등
*참고*


반응형