ROS (Robot Operating System) is an open-source, meta-perating system for your robot. It provides the services you would expect from an operating system, including hardware abstraction, low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management. It also provides tools and libraries for obtaining, building, writing, and running code across multiple computers. ROS is Meta-Operating-System.
Meta-Operating-System : 어플리케이션과 분산 컴퓨팅 자원간 가상화 레이어로 분산 컴퓨팅 자원을 활용하여, 스케쥴링 및 로드, 감시, 오류 처리 등을 실행하는 시스템
ROS의 특징
1) 통신 인프라 : 노드 간 통신을 제공하며, Middlewere Interface 지원 (메시지 전달)
- 메시지 파싱 기능 (캡슐화 및 코드 재사용을 촉진하는 노드 간 메시지 전달 인터페이스 역할)
- 메시지 기록 및 재생
- 다양한 프로그래밍 언어를 이용해 메시지를 이용 가능
- 분산 매개 변수 시스템 (시스템 변수를 글로벌 변수로 작성하여 각 노드에서 공유 및 실시간 수정 가능)
2) 로봇 관련 기능 지원
- 로봇에 대한 표준 메시지 정의
- 로봇 기하학 라이브러리 (센서 데이터를 트리화하는 TF 제공)
- 로봇 기술 언어
- 진단 시스템
- 센싱 및 인식
- 네비게이션
- 매니퓰레이션
3) 다양한 개발 도구
- Command Line Tools
- RViz (레이저, 카메라 등 센서 데이터를 3D 시각화)
- RQT (GUI Qt 기반 프레임워크, 노드 사이의 그래프 정보 표시)
- Gazebo (물리 엔진을 탑재한 3D 시뮬레이터)
ROS 설치
wget
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh
&& chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh
ROS installation
http://wiki.ros.org/kinetic/Installation/Ubuntu
ROS environment setting
http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment
ROS Setting
vim ~/.bashrc
alias eb ='nano ~/.bashrc'
alias sb ='source ~/.bashrc'
alias cw ='cd ~/catkin_ws'
alias cs ='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
#export ROS_MASTER_URI=http://192.168.1.100:11311
#export ROS_HOSTNAME=192.168.1.100
ROS Test (turtlesim)
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun rqt_graph rqt_graph
ROS Terms
Node : 최소 단위의 실행 가능한 프로세서(프로그램)
Package : 하나 이상의 노드 (노드 실행을 위한 정보 등을 묶어 놓은 것)
Message : 노드 간 토픽(topic)을 통해 전송되는 데이터 (int, float, point, boolean 등 데이터 타입을 가진 변수 형태)
Topic : 단방향 통신
Service : 반이중 통신 (클라이언트의 서비스 요청 및 서버의 응답)
Action : 반이중 통신 (클라이언트의 목표 전달, 서버의 여러 번의 피드백 및 결과 전달)
ROS Shell Commands
명령어 | 풀이 | 설명 |
roscd | ros + cd | ROS 패키지 디렉토리로 이동 |
rosls | ros + ls | ROS 패키지 파일 목록 확인 |
rosed | ros + ed (editor) | ROS 패키지 파일 편집 |
roscp | ros + cp | ROS 패키지 파일 복사 |
rospd | ros + pushd | ROS 디렉토리 인덱스에 디렉토리 추가 |
rosd | ros + directory | ROS 디렉토리 인덱스 확인 |
ROS Execution Commands
명령어 | 풀이 | 설명 |
roscore | ros + core | master (ROS name service) rosout (로그 기록) parameter server (파라미터 관리) |
rosrun | ros + run | 노드 실행 |
roslaunch | ros + launch | 노드 여러개 실행 |
rosclean | ros + clean | ROS 로그 파일 검사 혹은 삭제 |
ROS Information Commands
명령어 | 풀이 | 설명 |
rostopic | ros + topic | ROS 토픽 정보 확인 |
rosservice | ros + service | ROS 서비스 정보 확인 |
rosnode | ros + node | ROS 노드 정보 확인 |
rosparam | ros + param | ROS 파라미터 정보 확인 |
rosbag | ros + bag | ROS 메시지 기록 및 재생 |
rosmsg | ros + msg | ROS 메시지 정보 확인 |
rossrv | ros + srv | ROS 서비스 정보 확인 |
rosversion | ros + version | ROS 버전 정보 확인 |
roswtf | ros + wtf | ROS 시스템 검사 |
ROS Package Commands
명령어 | 풀이 | 설명 |
rospack | ros + package | ROS 패키지와 관련 정보 보기 |
rosinstall | ros + install | ROS 패키지 추가 설치 |
rosdep | ros + dependencies | 의존성 파일 설치 |
roslocate | ros + locate | ROS 패키지 정보 관련 명령어 |
roscreate-pkg | ros + create package | ROS 패키지 자동 생성 |
rosmake | ros + make | ROS 패키지 빌드 |