로봇 운영체제(ROS,Robot Operating System)는 로봇 응용 프로그램을 개발할 때 필요한 하드웨어 추상화, 하위 디바이스 제어, 일반적으로 사용되는 기능의 구현, 프로세스간의 메시지 패싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구를 제공한다. ROS는 로봇 응용 프로그램 개발을 위한 운영체제와 같은 로봇 플랫폼이다.
출처: 위키피디아
터틀봇의 RVIZ의 좌표계 표시 색
빨, 초, 파 = x, y, z축 = 앞, 왼쪽
Publisher
Subscriber
amcl_pose: odom에서 전달해주는 로봇의 위치와 라이다와 같은 장치의 신호를 가지고 맵위에서 로봇의 위치를 추정해서 발행되는 토픽
odom: 로봇이 측정한 자신의 위치,
amcl로 localiztion 하면서 move_base
ros2 launch nav2_map_server nav2_map_server map:=$HOME/map.yaml
실행가능한 최소한의 프로세서 단위 ROS는 노드 단위로 프로그램을 작성하며 노드 사이에 메시지를 주고 받으면서 통신, 예를 들어 지난번 글에서는 구독 노드와 발행 노드 2개의 노드를 실행시켜 토픽 메시지를 주고 받는 것 확인.
하나 이상의 노드가 기능적 단위로 묶인 것을 패키지라고 한다.
토픽은 노드 사이에 통신을 하는 방법 중 하나. 즉, 통신 채널
메시지는 노드 사이에 정보를 주고 받을 때 사용하는 데이터의 포맷형식
토픽은 msg 형태의 메시지를 사용합니다.
발행자가 msg 형태의 메시지를 토픽을 통해 발행하고 토픽을 구독하고 있는 구독자가 메시지를 받으면서 통신할 수 있다.
$ ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
rqt_graph
노드와 토픽이 어떻게 연결되어 있는지 그림으로 나타내준다.
❗ 그림이 안나오면 좌측 상단 새로고침을 눌러준다. 설정은 모든 노드+토픽
ros2 pkg list
ros2 pkg executables <패키지명>
패키지의 노드 실행
ros2 run <패키지명> <노드명>
실행되고 있는 노드 리스트
ros2 node list
노드 정보 확인
ros2 node info </노드명>
토픽 리스트
ros2 topic list
토픽 정보 확인
ros2 topic info <토픽명>
ros2 launch rviz2 rviz2.launch
from rclpy.node import Node
class followThreCarrot(Node):
def __init__(self):
super().__init__('path_tracking')
노드를 새로 만들 때 위 코드가 들어간다.
rclpy에 있는 Node라는 클래스를 followTheCarrot은 상속을 받고,
super().init('path_tracking')은 Node의 클래스의 생성자를 불러서 path_tracking 이라는 이름을 부여한다.
$ ros2 run nav2_map_server map_server -f /home/turtlebot/map.yaml
ros2 run rviz2 rviz2
와 뭔가 잘되어가는 느낌이네요~~