환경: Ubuntu 22.04ROS2 humble 1. driver 설치본인이 사용할 센서에 맞게 드라이버를 설치해야 한다. 이 논문은 Ouster lidar와 Xsens IMU, SBG Systems IMU를 기반으로 테스트되었기 때문에 드라이버를 설치해준다. Ouster Driverhttps://github.com/ros-drivers/ros2_ouster_drivers GitHub - ros-drivers/ros2_ouster_drivers: ROS2 Drivers for the Ouster OS-0, OS-1, and OS-2 LidarsROS2 Drivers for the Ouster OS-0, OS-1, and OS-2 Lidars - ros-drivers/ros2_ouster_driversg..
전체 글
환경: Ubuntu 22.05ros2 humble 이전 글에 이어 Nav2를 사용해서 Navigating을 실제로 하려고 한다.https://2nnsv.tistory.com/223 [ROS2] Cartographer SLAM환경: Ubuntu 22.05 ros2 humble 먼저 navigation2를 사용하기 위해서 아래 명령어를 통해 필요한 패키지를 설치한다.sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup 가제보로 시뮬레이션을 돌리고 싶2nnsv.tistory.com 먼저 환경 변수 설정을 해준다.source /opt/ros/humble/setup.bash export TURTLEBOT3_MODEL=waffle 하던 중에 아래와..
환경: Ubuntu 22.05 ros2 humble 먼저 navigation2를 사용하기 위해서 아래 명령어를 통해 필요한 패키지를 설치한다.sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup 가제보로 시뮬레이션을 돌리고 싶으면 아래 명령어로 설치할 수 있다.sudo apt install ros-humble-turtlebot3* Nav2로 맵을 만들기 전에 먼저 nav가 내 환경에서 잘 작동하도록 설정해주어야 한다.turtlebot3 model 변수를 설정해준다. export TURTLEBOT3_MODEL=waffle다음 Gazebo가 제대로 작동하는지 확인해보자.ros2 launch turtlebot3_gazebo turtlebot3_w..
Abstractground plane을 활용해 기존의 LOAM보다 가벼운 real time 6자유도 pose estimation 방법을 소개한다. LeGO-LOAM은 저전력 임베디드 시스템에서 사용할 수 있을 정도로 가볍게 실시간 위치 추정이 가능하다. 또한 segmentation과 optimization 과정에서 ground plane을 활용하는 특징이 있다. 전체 과정을 간단하게 설명하자면, noise를 1차적으로 거르고, planar과 edge feature을 추출한다. 2 step의 Levenberg-Marquardt 최적화 과정에서 planar과 edge feature을 사용해 연속적인 스캔 데이터에서 서로 다른 컴포넌트를 구분한다. 그리고 LOAM과의 성능 비교를 위해서 다양한 지형에서 테스트..
저자 : Ji Zhang, Sanjiv Singh발행연도 : 2014AbstractLOAM은 6자유도로 움직이는 2축 라이다의 range 측정을 이용한 Odometry와 mapping을 실시간으로 계산하는 SLAM 알고리즘이다. range 측정 값은 수신되는 시간이 다르고 motion estimation 에러가 Point Cloud 결과에 오정합(misregistration)을 야기한다. 기존에는 offline에서 loop closure를 활용해 drift를 최소화한 3D 맵을 만드는 데 초점이 맞추어져 있다. 그러나 LOAM에서는 이 문제를 자체적인 Odometry 알고리즘과 Mapping 알고리즘 2개로 나누어 병렬로 처리하여 low-drift, low-computational complexity 특..
1. 문제https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2. 문제 풀이이 문제는 점프와 순간 이동 중에 선택해서 에너지 사용량을 최소가 되도록 하여 최솟값을 반환해야 한다. 점프를 하면 한 번에 원하는 좌표로 이동할 수 있지만 에너지 사용량이 점프한 칸 수만큼 추가되어야 한다. 순간이동은 현재 좌표에서 2배에 해당하는 좌표로 이동할 수 있는데 에너지 사용량은 변화가 없다. 처음에는 0에서 4, 0에서 3, 0에서 2, 0에서 1까지 점프한 다음, 순간이동이 가능한지 확인했다. (현재 좌표..
ROS란ROS(Robot Operating System)은 로봇 애플리케이션 구축에 필요한 SW 라이브러리와 툴 모음을 말한다. 로봇이 움직일 때를 생각해보면, 통신, 제어, 계측 등 다양한 분야의 지식이 필요하고 이것을 유기적으로 연결해야 자연스럽게 로봇의 움직임을 만들 수 있다. 이 많은 것을 모두 공부하고 로봇을 만드려면 적어도 1년이 걸릴 텐데, 이를 쉽게 하도록 도와주는 것이 ROS이다. NodeROS에서 하나 또는 여러 목적을 달성하기 위한 기능 단위를 말한다. 바퀴 구동을 위한 모터를 조작하는 노드, 레이저의 센서 데이터를 전달하는 노드를 예로 들 수 있다. 각 노드들은 앞으로 나올 topic, service, action, parameter 들을 전달하거나 받을 수 있다. Node 확인을..
메모리에 각각의 자료구조가 어떻게 올라가는지 알아보자. 배열은 항상 메모리의 연속적인 공간에 할당된다. 메모리에서 데이터를 가져오는 시간이 CPU 연산 시간보다 길기 때문에 메인 메모리에 접근하는 시간은 전체 성능에 영향을 준다. 이때, 연속 공간에 배열을 할당하면 locality가 향상되어 메모리에서 데이터를 가져오는 시간을 줄일 수 있다. locality에 대해서는 이후 캐시 메모리에서 자세하게 배울 것이다. 그렇다면, 한 코드에서 여러 개 배열을 선언하면 어떻게 할당될까? 일반적으로 하나의 배열을 연속적인 공간에 할당되지만 서로 다른 배열은 연속적으로 할당되지 않는다. 즉, 처음 할당된 배열 다음에 항상 두번째 할당된 배열이 놓이지 않는다는 것이다. 아래처럼 배열을 선언한다고 했을 때, 각각 하..
프로그램이 실행되려면 소스 코드가 컴파일러에서 컴파일되고, 어셈블러가 기계어로 바꾼 다음 링커에서 실행 가능한 파일로 만들어야 한다. 그 중에서 링킹 과정에 대해서 자세히 알아보자. 링커는 하나의 실행 가능한 파일로 만들어주는 일이다. 아래 명령어를 통해 컴파일을 하면 아래 그림과 같은 과정으로 실행 가능한 형태로 만들어 준다. 링커에는 relocatable object file이 input으로 들어가고 링커에서 executable object file로 변경되어 나온다.gcc -Og -o prog main.c sum.c./prog 링커에서 나온 executable object file은 메모리에 올라간다. 즉 메모리의 일부에 locate되고 실행할 수 있는 형태인 것이다. linking 과정은 lin..
RISC-V에서 함수를 호출하는 규약이 존재한다. 꼭 지켜야 하는 규칙은 아니지만 대부분 이렇게 사용한다고 보면 된다. 함수 호출 과정은 약간 복잡하다. 아래와 같은 함수가 있을 때 main()에서 f1, f2로 argument x와 y를 적절하게 전달해야 한다. 메모리 공간을 할당해 함수를 실행하고, 실행 후에는 기존의 PC 값으로 돌아와야 한다. 일반 분기문과 달리, 명령어의 진행 순서가 연속적이지 않고 함수를 수행하고 나서는 꼭 원래 위치로 돌아가야 한다. 또한 아래 예시처럼 함수 수행 후 return 값이 main 함수에서 다시 사용될 수 있다. 이러한 복잡한 과정에서 아키텍쳐에서는 어떻게 구현되어 있는지 알아보자. 아래는 main에서 j 명령어를 사용해 myfn으로 이동하는 과정이다. myfn..