turtlebot3 개념

leeact·2023년 5월 15일
2

거북이 로봇

목록 보기
4/4
post-thumbnail

ROS

  • 로봇 프로그래밍을 위한 라이브러리와 도구들의 모음.
  • 운영체제가 아닌 로봇 개발을 위한 라이브러리

    로봇 운영체제(ROS,Robot Operating System)는 로봇 응용 프로그램을 개발할 때 필요한 하드웨어 추상화, 하위 디바이스 제어, 일반적으로 사용되는 기능의 구현, 프로세스간의 메시지 패싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구를 제공한다. ROS는 로봇 응용 프로그램 개발을 위한 운영체제와 같은 로봇 플랫폼이다.

출처: 위키피디아

ROS의 구조

  • ROS는 노드라고 하는 작은 프로그램의 집합이며, 각각의 노드끼리 서로 message를 주고 받고 할 수 있다.

터틀봇의 RVIZ의 좌표계 표시 색
빨, 초, 파 = x, y, z축 = 앞, 왼쪽

Publisher와 Subscriber

Publisher

  • 메세지를 발행하는 역할
  • 발행하는 메세지는 수신인이 없음(subscriber 필수)

Subscriber

  • 메시지를 받는거

논문

amcl_pose: odom에서 전달해주는 로봇의 위치와 라이다와 같은 장치의 신호를 가지고 맵위에서 로봇의 위치를 추정해서 발행되는 토픽
odom: 로봇이 측정한 자신의 위치,

amcl로 localiztion 하면서 move_base

순서

  1. 로봇의 좌표를 구하기 위해 amcl_pose 토픽 사용

https://pinkwink.kr/1344

ros2 launch nav2_map_server nav2_map_server map:=$HOME/map.yaml

노드

실행가능한 최소한의 프로세서 단위 ROS는 노드 단위로 프로그램을 작성하며 노드 사이에 메시지를 주고 받으면서 통신, 예를 들어 지난번 글에서는 구독 노드와 발행 노드 2개의 노드를 실행시켜 토픽 메시지를 주고 받는 것 확인.

패키지

하나 이상의 노드가 기능적 단위로 묶인 것을 패키지라고 한다.

토픽

토픽은 노드 사이에 통신을 하는 방법 중 하나. 즉, 통신 채널
메시지는 노드 사이에 정보를 주고 받을 때 사용하는 데이터의 포맷형식
토픽은 msg 형태의 메시지를 사용합니다.

발행자가 msg 형태의 메시지를 토픽을 통해 발행하고 토픽을 구독하고 있는 구독자가 메시지를 받으면서 통신할 수 있다.

토픽 종류

  1. cmd_vel

토픽 발행

$ 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 <토픽명>
  1. rviz2 실행
ros2 launch rviz2 rviz2.launch
  1. map 토픽 구독

Node

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

Rviz2 실행

ros2 run rviz2 rviz2

4개의 댓글

comment-user-thumbnail
2023년 5월 15일

와 뭔가 잘되어가는 느낌이네요~~

1개의 답글
comment-user-thumbnail
2023년 5월 16일

잘보고갑니다 ~~ @}---,---`--

1개의 답글