ROS 용어
노드: (예: 센서로 raw data를 받아오는 노드, raw data를 처리하는 노드 등)
최소 단위의 실행 가능한 프로세서. ROS에서는 노드단위로 프로그램을 나눠서 작업함.
그래서 노드 단위로 테스트가 가능함. 그리고 그냥 다른데서 이미 만들어진 노드를 갖다쓸수도 있다. (효율업)
*각 노드는 메시지통신으로 데이터를 주고받음
메시지: (예: 센서로 받아온 raw data)
메시지를 통해 노드간의 데이터를 주고받는다.
정해진 데이터타입으로 구성되고 사용자정의 메시지로 특정 데이터구조를 정의할수도 있다.
*메시지는 토픽을 통해 비동기 방식으로 교환됨.
패키지: (예: 얼굴을 감지해 문을 자동으로 열어주는 작업을 위해 있는 모든 노드의 집합)
하나 이상의 노드, 노드 실행을 위한 정보를 묶어 놓은것.
*패키지의 묶음 : 메타패키지
메시지통신 종류
토픽: (사용 예: 인식노드가 센서데이터를 발행, 처리노드가 구독해 센서데이터를 받아옴)
단방향, 연속성을가진 통신방법. 노드간 데이터를 지속적으로 스트리밍할 때 사용.
메시지를 보내는놈 : 퍼블리셔 노드 (Publisher Node)
메시지를 받는놈 : 서브스크리버 노드 (Subscriber Node)
1:1 통신부터 1:N, N:1, N:N 통신도 가능함
*즉, 단방향 비동기 통신임.
서비스: (사용 예: 데이터베이스노드에 특정 정보를 요청하고 해당 정보를 반환받아옴)
토픽과 다르게 양방향, 일회성 통신방법(요청-응답 형태). 뭘 해! 하면 뭘 함.
한번 서비스요청과 제공이 끝나면 통신 접속이 끊김.
서비스를 요청하는놈 : 서비스 클라이언트
서비스를 처리 후 응답하는놈 : 서비스 서버
*즉, 양방향 동기 통신임.
액션: (사용 예: 로봇이 이동하는동안 실시간으로 현재상태를 피드백받고 최종적으로 도착 여부를 받아옴)
액션클라이언트가 액션서버에 액션을 요청하면 액션서버가 액션을 완수하기를 알리기 전 중간에 액션 수행 피드백을 전달함. 뭘 해! 하면 어~ 이렇게 하고있어~ 하고 어~ 다했어 함.
액션을 요청하는놈 : 액션 클라이언트
액션 피드백과 결과를 제공하는놈 : 액션 서버
*즉, 양방향 비동기 통신임.
메시지통신 개념
- 마스터 구동 (roscore):
각 실행되는 노드들의 정보를 관리, 노드들의 통신을 연결시켜주는 매개체 - 노드2 = Subscriber node (rosrun pkgName nodeName) :
노드의 정보(노드이름, 토픽이름, 메시지형태, IP번호와 Port번호 등)를 마스터에게 줌 - 노드1 = Publisher node (rosrun pkgName nodeName) :
노드의 정보(노드이름, 토픽이름, 메시지형태, IP번호와 Port번호 등)를 마스터에게 줌 - 마스터는 받은 정보들을 보고 얘내가 맞겠다~ 싶으면 subscriber노드에게 새로운 publisher노드의 정보를 알린다.
- subscriber노드는 마스터에게 받은 publisher정보를 바탕으로 publisher에게 TCPROS 접속을 요청(서비스요청)한다.
- publisher노드는 자신의 TCP URI 주소와 포트번호를 subscriber노드에게 전송하며 접속에 응답(서비스응답)한다.
- TCPROS를 이용해 subscriber노드는 publisher노드와 직접 연결한다.
- publisher노드는 subscriber노드에게 메시지를 접속이 끊어질때까지 전송한다.(토픽:단방향, 연속성)
- subscriber노드가 publisher노드에게 접속 끊어달라고 요청(서비스요청)한다.
- publisher노드는 subscriber노드와의 접속을 끊으며 응답(서비스응답)한다.
*빨간색배경은 서비스, 노란색배경은 토픽에 대한 설명임.
turtlesim 예제로 이해하기
메시지통신 한눈에보기
(토픽, 서비스, 액션, 파라미터?)
ROS 메시지(?)
그래서 토픽, 서비스, 액션에서는 모두 메시지를 사용해 통신한다. 아래는 메시지의 형태다.
- 단순 자료형
예시) 정수, 부동소수점, 불리언값 등 - 메시지 안에 메시지가 있는 구조
예시) geometry_msgs/PoseStamped - 메시지들이 나열된 배열같은 구조
예시) float32[] ranges, sensor_msgs/LaserScan
http://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html
http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html
↑참조하시오
(↓그냥 일단 있다는것만 아시오)
네임:
노드, 메시지가 가지는 고유의 식별자
근데 자세한내용은 나중에 다루겠다. 나중에 노드나 메시지 이름을 변경시켜야할필요가있을때가오는데 그때 자세히 다루겠다.
이기종간의 통신에서 중요(?)
ROS 명령어
*ROS 명령어는 이후 실습과 함께 제대로 다룰 예정이라 이런것들이 있다 정도로만 끝.
ROS 셸 명령어
- roscd (ros + cd): 지정한 ROS 패키지의 디렉터리로 이동
- rosls (ros + ls): ROS 패키지의 파일목록 확인
- rosed (ros + ed): ROS 패키지의 파일편집
- roscp (ros + cp): ROS 패키지의 파일 복사
- rospd (ros + pushd): ROS 디렉토리 스택의 꼭대기에 디렉토리 추가
- rosd (ros + directory): ROS 디렉토리 스택 확인
ROS 실행 명령어
- roscore (ros + core): master(ROS 네임서비스), rosout(로그기록), parameter server(파라미터관리)
- rosrun (ros + run): 노드실행
- roslaunch (ros + launch): 노드를 여러개 실행 or 실행옵션 설정
- rosclean (ros + clean): ROS 로그파일을 검사 or 삭제
ROS 정보 명령어
- 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 서비스 정보 확인(.srv파일대상 정보확인 서비스메시지 구조 등등)
- rosversion (ros + version): ROS 패키지 배포 릴리즈 벚너 정보 확인
- roswtf (ros + wtf): ROS 시스템 검사
ROS catkin 명령어
catkin?: ROS의 컴파일, 빌드관련 시스템 빌드 혹은 의존성확인할때 쓴다.
- catkin_create_pkg (catkin + create + package): 패키지 자동 생성
- catkin_make (catkin + make): 캐킨 빌드 시스템에 기반을 둔 빌드
- catkin_eclipse (catkin + eclipse): 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경
- catkin_prepare_release (catkin + prepare + release): 릴리즈할 때 사용되는 로그 정리 및 버전 태깅
- catkin_generate_changelog (catkin + generate + changelog): 릴리즈할 때 CHANGELOG.rst 파일 생성 또는 업데이트
- catkin_init_workspace (catkin + init + workspace): 캐킨 빌드 시스템의 작업 폴더 초기화
- catkin_find (catkin + find): 캐킨 검색
ROS 패키지 명령어
- rospack (ros + pack[age]): ROS 패키지와 관련된 정보 보기.
- rosinstall (ros + install): ROS 추가 패키지 설치.
- rosdep (ros + dep[endencies]): 해당 패키지의 의존성 파일 설치.
- roslocate (ros + locate): ROS 패키지 정보 관련 명령어.
- roscreate-pkg (ros + create-pkg): ROS 패키지 자동 생성 (구 rosbuild 시스템에서 사용).
- rosmake (ros + make): ROS 패키지를 빌드 (구 rosbuild 시스템에서 사용).
ROS의 개발도구
1. RViz (ROS 시각화 툴) : 센서 및 로봇 관련 데이터 시각화 도구
- 다양한 센서데이터들을 시각화하는걸 도와줌.
- URDF로 기술해두면 종류에 상관없이 로봇 외형과 로봇 동작을 시각화할 수 있음.
- 내비게이션: 로봇이 이동하는 맵 자체를 구현, 그 안에서 로봇을 모델링해 구현, 로봇을 이동시키면 경로계획와 함께 정보들을 표현해 내비게이션 시스템이 잘 작동하는지 RViz로 확인가능.
- 매니퓰레이션: 로봇암 등 매니퓰레이터를 조작할 수 있음. 모델링체크와 경로생성과 로봇동작 등을 표현할 수 있음
- 원격제어?
(궁금한점 : RViz에서 로봇 직접제어를 하는건가?)
2.RQT (ROS의 종합 GUI툴) : 플러그인방식의 ROS의 종합 GUI Toolbox
*Qt로 개발되었기 때문에 플러그인을 개발해 추가할 수도 있고 이미 만들어진 플러그인으로 GUI Tool제작이 용이하다.
사용예)
1. rqt_image_view
$ roscore로 마스터실행(?)
$ rosrun usb_cam usb_cam_node로 노드 추가
$ rqt_image_view로 노드에서 발행하는 토픽을 선택해 메시지(raw image등)를 확인할수 있음
(rostopic list로 현재 발행중인 토픽들을 확인할 수 있다.)
2. rqt_graph
$ roscore로 마스터실행
$ rosrun turtlesim turtlesim_node로 노드추가
$ rosrun turtlesim turtle_teleop_key로 노드 추가
$ rqt_graph로 토픽과 각 노드와 노드끼리 주고받는 메시지를 확인할 수 있다.
3. rqt_plot
$ roscore로 마스터실행
$ rosrun turtlesim turtlesim_node로 노드추가
$ rosrun turtlesim turtle_teleop_key로 노드 추가
$ rqt_plot으로 시간축으로 각종 데이터들이 어떻게 변화하는지 확인할 수 있다.
4. rqt_bag
여건 이해가 잘 안되네용
3. Gazebo (물리엔진이 탑재된 3차원 시뮬레이터) : 실제 환경에서의 로봇을 시뮬레이팅 하는 물리엔진 3D 시뮬레이터
- ROS와의 호환성이 매우 좋음
- 버전이 올라가면서 각종 센서와 노이즈가 지원됨
- RViz와 다르게 Gazebo는 실제 환경 기반 물리엔진 시뮬레이터임.
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 이영상 #2주차- ROS 용어, 명령어, 도구 (0) | 2025.01.22 |
---|---|
[2025 ROS 스터디] 김예찬 #2주차-ROS의 용어/명령어/도구 (0) | 2025.01.22 |
[2025 ROS 스터디] 황희찬 #2주차- ROS 용어,명령어,도구 (0) | 2025.01.22 |
[2025 ROS 스터디] 이승찬 #2주차 - ROS의 컨셉 / 명령어와 도구 (0) | 2025.01.22 |
[2025 ROS 스터디] 홍동형 #2주차 - ROS 용어와 도구 (1) | 2025.01.22 |