본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 정주광 #3주차 - ROS 기본 프로그래밍

반응형

Chapter 7) ROS 기본 프로그래밍

Contents

-      퍼블리셔, 서브스크라이버 노드 작성

-      서비스 섭버와 클라이언트 노드 작성

-      파라미터 사용법

-       Roslaunch를 통해 복수의 노드 실행 또는 각 노드의 옵션 변경 방법

 

1.    ROS 프로그래밍 기본사항

        A.     표준단위

           •      SI단위로 통합

      B.     좌표 표현 방식

         •      X: forward, y: left , z: up

         •      오른손 법칙

 

      C.     프로그래밍 규칙

 

2.    메시지 통신의 종류

      •      토픽 : 퍼블리셔가 서브스크라이버 노드한테 메시지 전송(단방향, 연속성)

      •      서비스 : 클라이언트가 서비스 서버한테 요청에 대한 결과값을 서비스 클라이언트한테 전송(양방향, 일회성)

      •      액션 : 서비스랑 비슷하나, 중간 결과물을 피드백 전달

 

   Ros 패키지 생성 후 패키지 설정 파일 수정

       1)    패키지 생성

           -      $cd~/catkin_ws/src

           -      $catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp

           -      $cd ros_tutorials_topic

           -      $ls   > List 파일 확인 가능 후

           -      $Gedit package.xml

 

       패키지 설정파일 수정 (패키지 이름, 저작자, 라이선스, 의존성 패키지 등 기술)

       가장 심플한 메모장 gediter에서 기본 세팅을 수정

 

   2)    빌드 설정 파일 수정

      -      $gedit CMakeLists.txt

  3)    메시지 파일 작성

      -      $roscd ros_tutorials_topic > 패키지 폴더 이동

      -      $mkdir msg > 패키지에 msg라는 메시지 폴더를 신규 작성

      -      $cd msg > 작성한 msg 폴더로 이동

      -      Gedit MsgTutorial.msg > MsTutorial.msg 파일 신규 작성 및 내용 수정

    >  형식 + 데이터 : 메시지를 전송할 때 시각과 데이터를 보내기 위함

 

 퍼블리셔 노드와 서브스크라이버 노드 작성 후

퍼블리셔 실행

   -      노드실행 전 roscore 실행하기!

   -      $rosrun ros_tutorials_topic topic_publisher

 

 

노드를 생성하고 다양하게 rosrun을 접근하였지만 topic_publisehr을 찾을 수 없다는 에러시간 날 때 다시 해보겠습니다 ㅜㅜ..

 

Roslaunch

 

    -      이전 까지 rosrun으로 하나의 노드를 실행했따면 하나 이상의 정해진 노드를 실행할 수 있다.

    -      $roscd ros_tutorials_topic

    -      $mkdir launch

    -      $cd launch

    -      $gedit  union.launch

 

: <launch>  태그 안에  roslaunch  명령어로 노드 실행 때 필요한 태그들 기술

 

<옵션>

     -      Pkg 패키지의 이름

     -      Type 실제 실행할 노드의 이름

     -      Name type 해당 노드가 실행 될 때 이름

<실행>

     -      $ roslaunch ros_tutorials_topic union.launch—screen

 

rqt_graph를 통해 퍼블리쉬 노드와 서브스크라이버 노드를 각각 두개씩 구동하여 별도의 메시지를 통신

 

<해결방안>

     -   $roscd ros_tutorials_service_launch

     -   $gedit union.launch

 

union.launch를 통해서 별도의 그룹으로 <launch>태그 안의 내용들을 수정 가능

 

반응형