일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 우분투
- Node
- ROS
- ros rqt_tf_tree
- 노드
- ros 파라미터
- ros 공부
- ros 로봇
- ROS 노드
- ros 제어
- ROS 기초
- ros rviz
- ros 3d
- ros 입문
- piracer
- ros launch
- ros network
- 리눅스
- ros node
- ros 정적 파라미터
- 가상환경
- ros 동적 파라미터
- 라즈베리파이
- ROS 초보
- ros link
- ros rqt
- ros 실시간
- ros tf
- ROS topic
- ros cfg
- Today
- Total
대원의 블로그
[ROS #03] ROS Node 이해하기 본문
이번 글에서는 ROS를 본격적으로 시작을 해보고자 한다.
참고자료:
[구선생 로보틱스]
https://www.youtube.com/watch?v=1UGs5PML5Ag&list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&index=2
https://www.youtube.com/watch?v=IbGid_qvByM&list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&index=3
https://www.youtube.com/watch?v=bRTmMrRx4cM&list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&index=4
ROS의 장점
- 모듈성: ROS는 패키지라는 형태로 다양한 모듈을 제공한다. 각각의 패키지는 특정한 기능(예: 센서 데이터 처리, 네비게이션)을 수행하며, 필요한 패키지를 조합하여 시스템을 구성할 수 있다.
- 통신 시스템: ROS는 노드라는 독립적인 프로그램들이 서로 통신할 수 있는 구조를 갖추고 있다. 노드 간의 통신은 주로 퍼블리셔/서브스크라이버(Publisher/Subscriber) 구조나 서비스 요청/응답(Service) 구조로 이루어진다. 이를 통해 서로 다른 기능을 하는 노드들이 데이터를 주고받으며 협력할 수 있다.
- 하드웨어 추상화: ROS는 다양한 로봇 플랫폼에서 작동할 수 있도록 하드웨어 추상화를 제공한다. 동일한 소프트웨어가 다양한 로봇 하드웨어에서 동작할 수 있게 해주며, 개발자들은 하드웨어에 크게 구애받지 않고 소프트웨어를 개발할 수 있다.
- 시뮬레이션 도구: ROS는 Gazebo와 같은 시뮬레이션 도구와 통합되어 있어, 실제 로봇이 없어도 가상의 환경에서 로봇의 동작을 테스트하고 검증할 수 있다.
- 광범위한 커뮤니티와 지원: ROS는 오픈소스 프로젝트로, 전 세계의 개발자들이 참여하여 다양한 패키지를 개발하고 공유하고 있다. 덕분에 풍부한 예제 코드와 튜토리얼이 제공되며, 커뮤니티에서 문제를 해결하는 데 도움을 받을 수 있다.
ROS node란?
ROS node는 ROS에서 실행되는 단위 프로세스를 의미한다.
특정 소스코드를 작성하고 실행하면 그것이 노드가 된다.
ROS node 실행 방법
1. ROS 실행
roscore를 실행해준다. roscore은 ros의 전원 개념이라고 한다.
roscore
* 주의: roscore를 2번 이상 실행시키면 안된다.
2. node 실행
rosrun 명령어를 통해서 node를 실행할 수 있다.
예시 코드들은 ROS에 기본적으로 설치가 되어 있는 node들이다.
rosrun [패키지 이름] [실행파일 이름]
# 예시
rosrun turtlesim turtlesim_node #거북이 등장
rosrun turtlesim turtle_teleop_key #키보드로 거북이 조종
그러면 다음과 같이 실행이 가능하다.
3. node 관리하기
# 실행 중인 node 보기
rosnode list
# node 정보 보기
rosnode info [노드_이름]
# node 종료
rosnode kill [노드_이름]
- rosnode list
rosout은 roscore에 해당하는 node라고 한다.
- rosnode info [노드_이름]
정보가 나오긴 하는데 아직 뭔지 잘 모르겠다.
- rosnode kill [노드_이름]
다음과 같이 노드를 종료할 수 있다.
ROS node 만들기
1. 작업 환경을 만들기
우선 내가 작업할 환경을 만들어줘야 한다.
practice라는 폴더를 만든뒤에 src라는 폴더를 만들어주고 그 안에 들어가서 아래의 명령어를 입력한다.
catkin_create_pkg [패키지 이름] [의존성 패키지]
#ros에선... roscpp라는 의존성 패키지를 사용한다고 한다.
catkin_create_pkg basic_tutorial roscpp
그러면 basic_tutorial이라는 폴더가 생기는데 다시 안으로 들어가서 src로 들어가주고 소스코드를 적는다.
nano basic.cpp라고 해주면 basic.cpp를 쓸 수 있는 창이 나온다.
2. 소스코드 정의
#include <ros/ros.h> #ROS 기본 헤더파일
int main(int argc, char **argv)
{
ros::init(argc, argv, "basic_node"); #basic_node는 rosnode list를 했을때 나오는 이름
ros::NodeHandle n; #Topic이나 서비스 노드에서 사용
ros::Rate loop_rate(60); #노드의 동작 주파수 설정
while (ros::ok()) # 노드가 종료되면 false를 반환
{
ROS_INFO("Hello World!"); # 무엇인가 출력을 하기 위한 코드 딱히 중요하지는 않음
ros::spinOnce(); #Topic이나 서비스 노드에서 사용
loop_rate.sleep(); # 정의한 Hz에 맞춰서 움직이게 해주는 코드
}
return 0;
}
3. cmake 컴파일하기
cpp 파일을 컴파일 해주기 위해서는 cmake를 통해서 빌드를 진행해주어야 한다.
** 패키지 안에 있는 CmakeList.txt 파일을 열어준다.
CMakelist.txt 파일에 들어왔다면 다음과 같이 수정을 해주면 된다. 주요 수정 내용은 밑의 코드와 같다.
add_executable(basic_node src/basic.cpp)
target_link_libraries(basic_node ${catkin_LIBRARIES})
2줄의 코드를 작성할 때, basic_node라는 이름은 같아야 한다.
코드의 주요 내용은 아래와 같다.
add_executable(basic_node src/basic.cpp)
# src/basic.cpp에 위치하는 소스파일을 basic_node라는 이름의 실행파일로 만들겠다.
# rosrun에서 사용되는 실행파일의 이름임!
# ros::init에서 사용한 node 이름과 동일하게 설정하는 것을 권장함.
target_link_libraries(basic_node ${catkin_LIBRARIES})
# 실행파일에 링크될 라이브러리를 지정한다.
# basic_node라는 실행파일에 catkin_LIBRARIES라는 라이브러리를 지정한 것
이제 CmakeList.txt 수정은 완료가 되었다.
그렇다면 워크스페이스 practice로 이동하여 CMake 빌드를 진행해준다.
catkin_make
이제 roscore를 실행하고, 내가 만든 결과물을 인식할 수 있도록 한다.
source devel/setup.bash
이것을 입력하면 이제 환경에 내가 만든 파일이 인식이 된다.
혹시나 이것으로도 안 된다면
rospack find [패키지 이름]
을 입력하면 자동으로 인식이 되는 것을 확인할 수 있다.
4. 실행
이제 위에서와 같이 패키지에 있는 실행파일을 실행시켜주면 된다.
rosrun basic_tutorial basic_node
rosnode list에도 basic_node로 잘 나오는 것을 볼 수 있다.
지금까지 ROS node에 대해서 알아보았다.
'개발 > ROS' 카테고리의 다른 글
[ROS #05] ROS Topic 이해하기 (0) | 2024.10.15 |
---|---|
[ROS #04] ROS 환경 구조 이해하기 (1) | 2024.10.15 |
[ROS #02] ROS noetic 개발툴 설치하기 (qtcreator ros, Terminator 설치) (0) | 2024.10.14 |
[ROS #01] ROS noetic 설치하기 (0) | 2024.10.14 |
[ROS #00] 우분투 설치하기 (윈도우 + 우분투 멀티부팅) (0) | 2024.10.14 |