Programming 45

(1) C++ 프로그래밍

프로그래밍(Programming) 목적에 맞는 알고리즘으로부터 프로그래밍 언어를 사용하여 구체적인 프로그램을 작성하는 과정입니다. 작성된 소스파일(source file)은 먼저 실행파일(executable file)로 변환되어야 실행할 수 있습니다. C++에서 소스파일에서 실행파일을 생성하는 순서는 아래와 같습니다. 1. 소스 파일(source file)의 작성 2. 선행처리기(preprocessor)에 의한 선행처리 3. 컴파일러(compiler)에 의한 컴파일 4. 링커(linker)에 의한 링크 5. 실행 파일(executable file)의 생성 1. 소스 파일(source file)의 작성 프로그래밍에서 가장 먼저 해야 할 작업은 프로그램을 작성하는 것입니다. 에디터를 사용하여 C++ 문법에 맞..

Programming/C++ 2022.03.10

프로그래머스_신규 아이디 추천

문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이..

Programming/Python 2022.03.02

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

LiDAR(YDLIDAR G2)를 이용한 실습(LaserScan -> PointCloud)

YDLIDAR G2를 사용하여 사전에 rosbag -record로 bag 파일을 저장하였습니다. 이번에 해본 실습은 bag 파일에 저장된 LaserScan 형식의 토픽을 받아, 그 정보들을 활용하여 PointCloud 형식으로 변환하는 연산을 거친 후 퍼블리시되는 토픽을 RViz에서 확인해보는 것입니다. PointCloud의 x, y의 좌표는 거리와 각도를 알면 구할 수 때문에, theta, distance값을 받아 numpy의 cos, sin함수로 구하였습니다. 결과 아래는 작성된 코드입니다. #! /usr/bin/env python import rospy from sensor_msgs.msg import LaserScan, PointCloud from geometry_msgs.msg import Po..

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