본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 안선영 #3주차 - ROS 기본 프로그래밍

반응형

https://www.youtube.com/playlist?list=PLX-Ur4rl2-qwMK8H9FjTxjyKC-XeoP8Jg

 

2024 ROS 스터디 3주차

 

www.youtube.com

3주차에는 위 강의들을 보고 진행을 하였다.

3주차 강의는 ROS 기본 프로그래밍 에 대한 내용이다.


Chapter 7. ROS 기본 프로그래밍

1. ROS 기본 프로그래밍

  • 표준 단위 : SI 단위
  • 좌표 표현 : forward(x), left(y), up(z)

2. Topic / Publisher / Subscriber

ROS에서는 단방향 통신일 때, 'Topic'이라는 메시지 통신을 사용

Publisher : 송신
Subscriber : 수신
  • 패키지 생성
$ cd ~/ros_edu_ws/src : ros_edu_ws 폴더 내에 있는 src 폴더로 이동한다.
$ catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp : 패키지를 생성한다
$ ls : 패키지가 생성되었는지 확인한다
$ cd ros_tutorials_topic : ros_tutorials_topic 폴더로 이동한다
$ ls : 폴더 내를 확인한다. include(헤더 파일 폴더), src(소스 코드 폴더), CMakeLists.txt(빌드 설정 파일), package.xml(패키지 설정 파일)이 있는 것을 확인한다.

  • 패키지 설정 파일 수정 (package.xml 수정)
package.xml은 패키지 정보를 담은 xml 파일.
패키지 이름, 저작자, 라이선, 의조넝 패키지 등을 서술
$ gedit package.xml : package.xml 수정
$ gedit package.xml
위 명령어를 터미널에 입력하면, package.xml이 뜬다.

 

gedit

<?xml version="1.0"?> : 안적어도 무방
<package> ~ </package> : 패키지 태그
<name>ros_tutorials_topic</name> : 이 패키지의 이름을 넣어줌
<version>0.1.0</version> : 버전 태그
<description>ROS tutorial package to learn the topic</description> : 만든 패키지의 간략한 설명(안쓰면 힘듦)
<license>Apache License 2.0</license> : 라이센스
<author email="pyo@robotis.com">Yoonseok Pyo</author> : 저자가 여러명이면 추가하면 됨
<maintainer email="pyo@robotis.com">Yoonseok Pyo</maintainer> : 바뀔 수 있음
<url type="bugtracker">https://github.com/ROBOTIS-GIT/ros_tutorials/issues</url>
<url type="repository">https://github.com/ROBOTIS-GIT/ros_tutorials.git</url>
<url type="website">https://www.robotis.com</url>
<buildtool_depend>catkin</buildtool_depend> : 빌드할 때 쓸 것
<build_depend>roscpp</build_depend> : 빌드할 때 의존성
<build_depend>std_msgs</build_depend>
<build_depend>message_generation</build_depend>
<run_depend>roscpp</run_depend> : 실행할 때 의존성
<run_depend>std_msgs</run_depend>
<run_depend>message_runtime</run_depend>
<export></export>
</package>

 

  • 빌드 설정 파일 수정
$ gedit CMakeLists.txt

 

# 캐킨 빌드를 할 때 요구되는 구성요소 패키지
# 의존성 패키지로 message_generation, std_msgs, roscpp이며 이 패키지들이 존재하지 않으면 빌드 도중에 에러남
find_package(catkin REQUIRED COMPONENTS message_generation roscpp std_msgs )
# 메시지 선언
add_message_files(FILES MsgTutorial.msg)
# 의존하는 메시지를 설정하는 옵션
# std_msgs가 설치되어 있지 않으면 빌드 도중에 에러남
generate_messages(DEPENDENCIES std_msgs)
# 캐킨 패키지 옵션으로 라이브러리, 캐킨 빌드 의존성, 시스템 의존 패키지를 기술함
catkin_package(LIBRARIES ros_tutorials_topic CATKIN_DEPENDS std_msgs roscpp)
# 인클루드 디렉토리를 설정함
include_directories(${catkin_INCLUDE_DIRS})
# topic_publisher 노드에 대한 빌드 옵션
# 실행 파일, 타깃 링크 라이브러리, 추가 의존성 등을 설정
add_executable(topic_publisher src/topic_publisher.cpp) add_dependencies(topic_publisher${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}) target_link_libraries(topic_publisher${catkin_LIBRARIES})
# topic_subscriber 노드에 대한 빌드 옵션
add_executable(topic_subscriber src/topic_subscriber.cpp) add_dependencies(topic_subscriber${${PORJECT_NAME}_EXPORTED_TARGERS}${catkin_EXPORTED_TARGETS}) target_link_libraries(topic_subscriber${catkin_LIBRARIES})
#
  • 메시지 파일 작성
$ roscd ros_tutorials_topic : 패키 폴더로 이동
$ mkdir msg : 패키지에 msg라는 메시지 폴더를 신규 작성
$ cd msg : 작성한 msg 폴더로 이동
$ gedit MsgTutorial.msg : MsgTutorial.msg 파일 신규 작성 및 내용 수정

  • 퍼블리셔 노드 작성
$ roscd ros_tutorials_topic/src : 패키지의 소스 폴더인 src 폴더로 이동
$ gedit topic_publisher.cpp : 소스 파일 신규 작성 및 내용 수정

 

#include "ros/ros.h" : ROS 기본 헤더파일
#include "ros_tutorials_topic/MsgTutorial.h" : MsgTutorial 메시지 파일 헤더(빌드 후 자동 생성됨)
int main(int argc, char **argv) : 노드 메인 함수
{
   ros::init(argc, argv, "topic_publisher"); : 노드명 초기화
   ros::NodeHandle nh; : ROS 시스템과 통신을 위한 노드 핸들 선언

}

 

3. rosrun

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

4. roslaunch

  • 하나 이상의 정해진 노드를 실행시킬 수 있다

 


이렇게 ROS 기본 프로그래밍에 대해 알아보았다.

반응형