Programming/ROS 15

LiDAR(YDLIDAR G2)를 이용한 실습(turtlesim_node + LaserScan)

YDLIDAR G2를 사용하여 라이다의 전방 60도 범위, 20cm 이하 거리안에 장애물이 검출되면 무한회전하는 turtlesim의 거북이를 정지시키는 실습을 해보았습니다. 1. LaserScan 형식의 /ydlidar_node에서 발행하는 /scan 토픽을 받습니다. 2. 전방 60도 범위라는 조건을 수행하기위해 라이다의 resolution에 따른 ranges의 범위 계산하였습니다. 3. 거리 20cm 이하에서 장애물이 검출되도록 거리 정보를 담은 ranges의 요소들에 조건을 달았습니다. 4. 위 두 조건에 부합하면, 거북이를 정지하도록 하였습니다. 결과 아래는 작성된 코드입니다. #! /usr/bin/env python import rospy from geometry_msgs.msg import T..

Programming/ROS 2022.02.24

경로 계획 방법론(DWA)

DWA(지역 경로 계획) 로봇에서 사용하는 내비게이션이란 Dynamic Window Approach(DWA)라고 하는데 로봇의 속도 탐색 영역(velocity searxh space)에서 로봇과 충돌 가능한 장애물을 회피하면서 목표점까지 빠르게 다다를 수 있는 속도를 선택하는 방법입니다. 위 그림을 보면, 실제 로봇은 로봇의 선속도(v)와 각속도(w)를 각각 한 축으로 하는 속도 공간에서 최대 허용 속도(다이나믹 윈도우)를 정의한 뒤 목적함수(G(v,w))를 이용하여 로봇의 방향, 속도, 충돌을 고려한 목적함수가 최대가 되는 v,w를 구한 뒤 목표점으로의 경로 생성, 현재 속도 유지, 장애물과의 여유 거리를 고려한 비용함수에 대하여 최적의 속도를 추출합니다. DWA 기술은 ROS에서 사용되는 대부분의 로..

Programming/ROS 2022.02.23

내비게이션을 위한 위치 추정 필터

내비게이션을 사용하기 위해서는 위치추정 필터를 사용해야합니다. 위치추청 필터는 대표적으로 ① 칼만 필터(Kalman Filter), ② 파티클 필터(Particle Filter)를 사용합니다. 칼만 필터 칼만 필터(Kalman Filter)는 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀 필터입니다. 이 필터는 베이스 확률을 기반으로 하는데 예측(Prediction)과 보정(update)을 계속하게 됩니다. 여기서 예측(Prediction)이란, 모델의 상정하고 이 모델을 이용하여 이전 상태로부터 현재 시점의 상태를 예측하는 의미를 가지고, 보정(update)이란 앞 단계의 예측 값과 외부 계측기로 얻은 실제 측정 값 간의 오차를 이용하여 더욱 정확한 상태의 상태 값을 추정하는 걸 ..

Programming/ROS 2022.02.23

Navigation 정의

내비게이션은 주어진 환경에서 로봇이 현재 위치부터 지정한 목적지까지 이동하는 것으로, 이를 위해서는 주어진 환경의 가구, 물체, 벽 등의 기하학적인 정보(Geometry, geo-: 토지, metry: 측정)가 담긴 지도가 필요합니다. 앞서 설명한 SLAM 기술을 이용하여 로봇이 자신의 위치 정보와 센서로부터 얻은 거리 정보에서 지도를 얻을 수 있었습니다. 내비게이션은 이 지도와 로봇의 엔코더, 관성 센서, 거리 센서 등을 이용하여 현재 위치부터 지도상에 지정된 목적지까지 이동하게 됩니다. 이를 수행하는 순서는 아래와 같습니다. ① 센싱(Sensing) - 지도 지도상에서 로봇은 엔코더와 관성 센서(IMU 센서) 등으로 자신의 오도메트리(Odometry) 정보를 갱신하면서 거리 센서가 장착된 위치부터 장..

Programming/ROS 2022.02.23

터틀봇3 SLAM 분석

터틀봇3는 위와 같은 사진의 노드 흐름으로 SLAM에 따른 위치 추정 및 지도 작성을 구현하게 됩니다. ① sensor_node : 로봇의 센서데이터를 불러오는 노드 LDS센서 실행 거리 정보 수집 scan정보를 전달 ② turtlebot3_teleop : 로봇을 원격으로 조작하기 위한 노드 키보드를 통해 값 수신 (이동 정보) turtlebot3_core에 이동속도, 회전 속도등 명령어 전달 ③ turtlebot3_core : 터틀봇의 코어로 주행기록계와 바퀴에서 링크로 따른 레이저의 위치를 가지고 있습니다. 로봇 이동 자신의 위치 계측/측정한 정보인 odom정보 전송 odom전송시 3단계 순서로 각 상대 좌표를 tf형태로 퍼블리시 ④ turtlebot3_slam_gmapping 지도 작성 Scan :..

Programming/ROS 2022.02.23

Navigation 아무거나 끄적임

네비게이션은 로봇의 휠 엔코더, IMU, Lidar등을 이용하여 현재 위치로부터 지도상에 지정된 목적지까지 이동하는 것입니다. 그 순서를 말씀드리자면 먼저 robot_pose_ekf가 확장 칼만필터를 사용해 odometry, imu 센서 등 측정된 데이터를 결합하여 wheel odometry보다 나은 주행거리 측정데이터로 amcl을 위한 3d pose 추정을 하고 /odom_combined을 퍼블리쉬합니다. 그리고 base_footprint tf변환을 제공합니다. 그 다음 amcl로 tf형태로 그 정보를 전달합니다. amcl은 파티클 필터를 사용하는 확률적 위치추정 시스템으로 기존에 작성된 맵에 현재 로봇의 위치를 추적합니다. 이를 위해 testclass로부터 초기위치, map_saver로부터 맵정보, ..

Programming/ROS 2022.02.22

SLAM 정의

지도 작성에 필요한 슬램(SLAM) 기술 SLAM(Simultaneous Localization and Mapping)은 ‘슬램’이라고 읽고 우리말로 ‘동시적 위치 추정 및 지도 작성’ 정도로 번역할 수 있겠다. 즉, 로봇이 미지의 환경을 탐색하면서 로봇에 장착된 센서만으로 로봇 스스로 자신의 위치를 추정하는 동시에 미지 환경의 지도를 작성하는 것을 의미한다. 이는 내비게이션의 자율 주행을 위한 핵심 기술이다. 위치 추정에 사용되는 대표적인 센서에는 엔코더(Encoder)와 관성 센서(IMU, Inertial Measurement Unit)가 있다. 엔코더는 구동부인 바퀴의 회전량을 측정하여 추측 항법(dead reckoning)을 통해 로봇의 위치를 근삿값으로 계산한다. 이 부분에서 오차가 꽤 발생하는..

Programming/ROS 2022.02.22

Navigation stack 설명

위 그림은 ROS의 내비게이션 패키지 구동에 필요한 필수 노드와 토픽들의 관계도를 설명한 그림입니다. 이를 내비게이션에 필요한 정보(토픽)를 중심으로 설명하도록 하겠습니다. ① 오도메트리 ( "odom", nav_msgs/Odometry ) 로봇의 오도메트리 정보는 국부 이동 경로 계획(local path planning) 에서 사용하게 되는데 로봇의 현재 속도 등의 정보를 받아서 국부 이동 경로를 생성하거나 장애물 회피 등에 사용됩니다. ② 상대 위치 변환 ( "/tf", tf/tfMessage ) 로봇의 센서의 위치를 예를들어 base_scan 라고 할 때, 이 센서 위치는 로봇의 하드웨어적 구성에 따라 위치가 상대적으로 바뀌기 때문에 ROS에서는 tf 라는 상대 위치 변환을 이용합니다. 이는 단순히..

Programming/ROS 2022.02.22

ROS 런치 파일

Launch 파일 사용하기 - 파이썬 파일을 여러개 실행하기 위해 rosrun 을 여러 번 치는 것은 매우 불편하다. 따라서, *.launch 파일을 사용해서 여러 노드를 한꺼번에 실행시킬 수 있다. - 사용법은 아래와 같다. roslaunch [options] [package name] [arg_name:=value...] Launch 파일 작성에 사용되는 Tag - node 태그 실행할 노드 정보를 입력할 때 사용되는 태그 - include 태그 다른 launch 파일을 불러오고 싶을 때 사용하는 태그 #$(를 사용해서 패키지 폴더를 자동으로 찾아준다. - param 태그 ROS 파라미터 서버에 변수를 등록하고 그 변수에 값을 설정하기 위한 태그 여기서 type에 사용할 수 있는 종류..

Programming/ROS 2022.02.14

오일러와 쿼터니언

오일러 각도(Euler Angle) 오일러 각도는 x, y, z 등 3개의 축을 기준으로 회전시키는 각도계를 의미한다. 오일러 각도는 짐벌락(Gimbal-Lock)이라는 문제가 있어 모든 각도 변환을 표현하는데 한계가 있기 때문에 보완하여 만들어진게 쿼터니언(Qauternion)이다. 설명하자면, 아래와 같이 x, y, z축을 가진 오브젝트가 있고 화살표가 가리키는 방향을 유의해서 볼 때, x축(빨강)을 90도 회전하고, y축(초록)을 90도 회전하면 z축(파랑)과 x축(빨강)이 한 축으로 겹치면서 한쪽 축에 대한 계산이 불가능해지는데, 이 현상을 짐벌락이라고 한다. 이러한 짐벌락 현상이 생기는 이유는 오일러 각도가 자체적으로 설정되어있는 순서로 해당 축들을 개별적으로 계산하기 때문이다. (예를 들면, ..

Programming/ROS 2022.02.10