본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 유민아 #3주차 <워크스페이스 구성하기>

반응형

- ROS 의 표준 단위 : SI 단위계 사용

  • 각도 : 라디안 
  • 주파수 : hz
  • 힘 : 뉴턴(N)
  • 전력 : 와트(W)
  • 전압 : 볼트(V)
  • 길이 : 미터(m)
  • 질량 : kg
  • 시간 : 초
  • 전류 : 암페어(A)
  • 온도 : 섭씨
  • 좌표축 :

오른손을 펼쳤을때 ( 정회전은 시계반대방향 )

 

- 프로그래밍 : 명명규칙이 아래와 같이 정해져 있음

https://wiki.ros.org/CppStyleGuide

 

CppStyleGuide - ROS Wiki

ROS C++ Style Guide This page defines a style guide to be followed in writing C++ code for ROS. This guide applies to all ROS code, both core and non-core. For Python, see the PyStyleGuide and for Javascript, see the ROS JavaScript Style Guide For general

wiki.ros.org

위처럼 명명 규칙이 정해져 있다.

 

- ROS 패키지 생성 후 패키지 설정 파일 수정하기

 

  • catkin_make_package <ros_tutorials_topic> <종속 파일>  --> 로스에서 코드를 빌드하기 위해 필요한 구성을 갖춘 패키지가 형성
  •  

- package.xml (패키지 설정 파일) : 누가 만들었는지 , 다른 의존한 패키지들은 무엇인지,, 등의 패키지의 각종 정보를 담고 있다.

xml : 태그 위주

누가 저작권을 가지는지 (maintainer, author, emial, author)   어느 깃허브를 들어가면 더 자세히 알 수 있는지 등등 

이 패키지에 대한 설명이 첨부되어야 하고, 이것이 ros의 공식 홈페이지 ros.wiki에 그대로 반영된다. 

패키지 관리자들이 실시간으로 질문받고 오류를 요청하고 있다고 한다.

<?xml version="1.0"?> 
<package format="2">
  <name>ros_tutorials_topic</name>
  <version>0.0.0</version>  //software version
  <description>The ros_tutorials_topic package</description>  //simple sentence 2~3, but important
  <maintainer email="chamssal1212@gamil.com">mina</maintainer>
  <license>TODO</license>
  <author> email = "chamssal1212@gamil.com"YouMina</author>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>


  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

 

강의와 다르점이 있다면 <run_depend> 가 있는게 아니라 <build_export_depend> 로 이름이 바뀐거 같다. 

- CmakeLists.txt (패키지 설정 파일) :

project(패키지이름, 철자 틀리면 빌드가 안된다)

find_package : 빌드될때 사용되는 패키지

add_message_files(FILES MsgTutorials.msg) 기존에 있는 메세지 형태를 사용하는 것이 아니라 새롭게 만들기 위해 작성 

cmake_minimum_required(VERSION 3.0.2)
project(ros_tutorials_topic) 오타 나면 안된다.

find_package(catkin REQUIRED COMPONENTS
  message_generation
  roscpp
  std_msgs
)
패키지 빌드하는데 필요한 다른 의존성 패키지들은 어떤것이 있느냐

# Generate messages in the 'msg' folder
add_message_files(
  FILES
  Message1.msg
  Message2.msg
)
#우리가 자체적으로 메세지 파일을 만들 것이다.

# Generate added messages and services with any dependencies listed here
generate_messages(
  DEPENDENCIES
  std_msgs
)
# 메세지 파일을 새로 만드는데 필요한 의존성 파일들,메세지 파일을 만들면 헤더파일이 자동생성 된다. 
catkin_package(
 INCLUDE_DIRS include
 LIBRARIES ros_tutorials_topic
 CATKIN_DEPENDS message_generation roscpp std_msgs
 DEPENDS system_lib
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)
총 두개의 노드를 실행시킬 것이다. 따라서 cpp 파일을 실행파일로 만들고, 어떤 의존성 패키지를 가지는지 

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})

add_executable(topic_subscriber src/topic_subscriber.cpp)
add_dependencies(topic_subscriber ${${PROJECT_NAME}_EXPORTED_TARGETS)}
${catkin_EXPORTED_TARGETS}
target_link_libraries(topic_subscriber ${catkin_LIBRARIES})

 

- 메세지 파일 만들기

mkdir msg (확장자 .msg) 로 끝남. 

내가 어떤 메세지 꾸러미로 토픽을 쏠지 정해서 만들 수 있다. 

 

catkin_build 를 하려는데 다음과 같은 오류 메세지가 등장함.

-> 해결방법 : 워크스페이스 안에 src 파일을 만들어야 하고, 그안에 빌드할 소스, msg 파일들, CmakeLists, 등등 넣어야 함. 

이제는 msg 파일을 찾지 못하는 오류가 발생함

-> 해결방법 : 1) cpp 파일에 msg include 할때 오타 발생

2) 환경변수 설정

3) 다음과 같은 코드형식으로 변환

ROS_INFO("receive msg = %d %d %d",msg->stamp.sec,msg->stamp.nsec,msg->data);

 

우여곡절끝에 빌드완료..

 

아래의 링크는 이번 워크스페이스를 꾸며본 것을 올린 내깃헙레포지다

https://github.com/chamssal/ros_example

 

GitHub - chamssal/ros_example: 강의에서 들었던 로스 워크스페이스 구현한 것들

강의에서 들었던 로스 워크스페이스 구현한 것들. Contribute to chamssal/ros_example development by creating an account on GitHub.

github.com

실행파일 생성완

- 지금은 노드 하나가 sub 혹은 pub 역할을 하나씩 맡고 있지만, 하나의 노드가 복수의 sub pub 역할을 할 수 있다.

현재 시간이 찍히고 숫자가 카운트 되고 있다.
실행파일의 위치가 중요한듯 하다. 빌드하고 나면 생성되는데,,나는왜 위치를 옮겨줘야지 실행이 되었을까

 

다음은 서비스 워크스페이스를 만들 것이다

msg 폴더 대신에 srv 폴더를 만들었고, 요청과 응답이라는 형식에 맞게 srv 파일의 형식도 다르다.

int64 a
int64 b
--- 위에는 요청 아래는 응답
int64 result

 

그리고 모라이 가상환경 준비할때, 여러노드를 동시에 동작시킬때 유용하게 사용했던 런치파일 작성 방법

반응형