- ROS 의 표준 단위 : SI 단위계 사용
- 각도 : 라디안
- 주파수 : hz
- 힘 : 뉴턴(N)
- 전력 : 와트(W)
- 전압 : 볼트(V)
- 길이 : 미터(m)
- 질량 : kg
- 시간 : 초
- 전류 : 암페어(A)
- 온도 : 섭씨
- 좌표축 :
- 프로그래밍 : 명명규칙이 아래와 같이 정해져 있음
https://wiki.ros.org/CppStyleGuide
위처럼 명명 규칙이 정해져 있다.
- 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
- 지금은 노드 하나가 sub 혹은 pub 역할을 하나씩 맡고 있지만, 하나의 노드가 복수의 sub pub 역할을 할 수 있다.
다음은 서비스 워크스페이스를 만들 것이다
msg 폴더 대신에 srv 폴더를 만들었고, 요청과 응답이라는 형식에 맞게 srv 파일의 형식도 다르다.
int64 a
int64 b
--- 위에는 요청 아래는 응답
int64 result
그리고 모라이 가상환경 준비할때, 여러노드를 동시에 동작시킬때 유용하게 사용했던 런치파일 작성 방법
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] 변수양 #3주차 - ROS 기본 프로그래밍 (0) | 2024.02.13 |
---|---|
[2024 ROS 스터디] 성창엽 #4주차 - SLAM과 내비게이션 (0) | 2024.02.13 |
[2024 ROS 스터디] 손희문 #3주차 - ROS 기본 프로그래밍 (0) | 2024.02.11 |
[2024 ROS 스터디] 이강욱 #3주차 - ROS 기본 프로그래밍 (1) | 2024.02.11 |
[2024 ROS 스터디] 성창엽 #3주차 - ROS 기본 프로그래밍 (1) | 2024.02.10 |