카테고리 없음

[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 노드 작성·실행

  1. Catkin 워크스페이스 생성  (워크스페이스가 없을 때)
    $ mkdir -p ~/catkin_ws/src
    $
    cd ~/catkin_ws
    $ catkin_make
  2. 패키지 생성
    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorials_topic \ message_generation std_msgs roscpp
  3. 패키지 설정 파일 수정
    • package.xml
      1. XML 버전 선언
      2. <package> 태그 및 이름(ros_tutorials_topic)
      3. 버전, 설명(2~3줄) — 공식 패키지의 검색용
      4. 라이선스, 저자 및 maintainer 정보
      5. 버그 신고 링크, 웹사이트
      6. 빌드(tool: catkin) 및 의존성 선언
    • CMakeLists.txt
      • 메시지 생성 설정 (message_generation, message_runtime)
      • add_message_files(), generate_messages(),
        catkin_package() 등
  4. 메시지 파일 작성
    time stamp
    int32 data
  5. $ roscd ros_tutorials_topic
    $
    mkdir msg $ cd msg
    $ gedit MsgTutorial.msg
  6. 퍼블리셔 노드 구현
    • src/topic_publisher.cpp 에서 ROS 헤더, 메시지 헤더 포함
    • ros::Publisher 생성 및 루프 내 publish() 호출
  7. 서브스크라이버 노드 구현
    • src/topic_subscriber.cpp 에서 콜백 함수 정의
    • ros::Subscriber 로 MsgTutorial 메시지 수신
  8. 빌드 및 실행
    • 토픽 목록 확인:
      $ rostopic list $ rostopic info /ros_tutorial_msg
    • 통신 구조 시각화:
      $ rqt_graph
  9. $ cd ~/catkin_ws
    $ catkin_make
    $
    source devel/setup.bash # 퍼블리셔 실행
    $ rosrun ros_tutorials_topic topic_publisher
    # 서브스크라이버 실행
    $ rosrun ros_tutorials_topic topic_subscriber

Ⅲ. Service 서버·클라이언트 노드 작성·실행

  1. 패키지 생성 및 설정
    • Publisher/Subscriber와 유사하게 package.xml, CMakeLists.txt 수정
  2. 서비스 파일 작성
    int64 a int64 b --- int64 sum
     
    $ mkdir srv
    $
    cd srv
    $ gedit AddTwoInts.srv
  3. Service 서버 노드 (src/service_server.cpp)
    • ros::ServiceServer 생성
    • 콜백에서 요청(request) 처리 후 응답(response) 반환
  4. Service 클라이언트 노드 (src/service_client.cpp)
    • ros::ServiceClient 로 call() 수행
  5. 빌드 및 실행
    • rosservice 사용 예:
       
      $ rosservice call /add_two_ints 1 2
    • GUI 호출 (rqt → Service Caller)
  6. $ 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 사용법

  1. Parameter Server 활용
    • 노드 내부 설정값 외부 관리
    • rosparam 명령어로 조회·설정
    • $ rosparam set /robot_speed 1.0
      $ rosparam get /robot_speed
  2. 코드 내에서 파라미터 읽기
  3. double speed; nh.getParam("robot_speed", speed);
  4. Launch 파일에서 파라미터 선언
  5. <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 포함 등

*참고*

해당 코드 입력시
rqt의 그림이 이 그림에서

이 그림으로 변경됌

반응형