전체 글

전체 글

    HDmap - JOSM 사용 과정 정리

    기존 KASA 대회에서는 국토정보플랫폼에서 제공하는 K-city UTM52N 좌표계 shp 파일을 사용하지만 제주국제대회에서는 모라이 측에서 map data 일부를 제공해주었다. 1) 모라이에서 제공하는 map data 형식은 ENU 좌표계 형식이고 우리가 사용하려는 utm52N 좌표계를 바꾸기 위해 보정치를 더해줘야한다. x값에 eastOffset, y값에 northOffset을 더한다. (northOffset : 4122635.537 eastOffset : 302459.942) 2) utm52N 좌표값으로 보정된 csv 파일에는 해당 웨이포인트의 인덱스와, 미션스테이트도 포함하는데, 전처리 과정에서 인덱스와 미션스테이트를 떼어내는 python 코드 간단하니깐 만들어보자!! 3) utm52N 좌표값을 ..

    bashrc

    bash 란? : bash는 리눅스에서 사용되는 대표적인 shell이다. shell 이란? : shell은 커널과 사용자 사이의 다리 역할을 하는데, 쉽게 말해서 터미널처럼 명령어를 입력하는 환경을 말한다 : 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할을 하기도 하고 : 사용자 환경 설정의 기능도 한다. bashrc 란? ~/.bashrc는 별칭(alias)과 bash가 수행될 때 실행되는 함수를 제어하는 지역적인 시스템 설정과 관련된 파일이다. * 터미널을 열면 자동으로 bashrc가 수행된다. * ~/.bashrc 파일 내에 다음과 같은 줄이 있는데, 이는 어떤 ws를 사용할 지 알려주기 위한 줄이다. source ~/catkin_ws/devel/setup.bash 다른 프로젝트..

    비트 플래그

    메모리의 최소 크기 단위는 1바이트이므로 변수의 크기는 적어도 1바이트 이상이다. 1바이트(8비트)는 비트가 8개이므로 8가지 상태를 저장할 수 있다. 각각의 비트로 상태를 저장하는 것은 1바이트를 사용해서 1비트만 사용하고 7비트를 낭비함으로써 1가지 상태만 저장하는 bool 자료형보다 훨씬 효율적이다. 여기서 바이트의 개별 비트를 비트 플래그(bit flag)라고 한다. 플래그(flag)는 깃발에서 유래한 용어다. 보통 깃발을 위로 올리면 on, 아래로 내리면 off를 뜻한다. 비트플래그를 사용하는 방법을 알아보면 다음과 같다. 플래그를 사용한 비트 조작 (Using bit flags to manipulate bits) 사용할 비트 플래그들 정의 const unsigned char option0 = 1

    비트단위 연산자

    비트단위 연산자(Bitwise Operators) 를 사용하는 이유 1. 메모리 낭비를 줄이기 위해서 예를 들어 bool 타입 변수를 저장할 때 1또는 0 두 가지 경우 즉, 1bit 만 필요한데 사용하는 메모리크기는 1byte(8bit)이다. 이러한 메모리 낭비를 줄이고 계산을 하기 위해 bit단위 연산자를 사용 2. 계산 속도를 높이기 위해서 left shift operator () 를 사용하면 2^n을 곱하거나 나누는 것을 pow 함수보다 더 빠르게 할 수 있다. #include #include // 2진수로 출력 가능하게 하는 라이브러리 using namespace std; int main() { /* (cin과 cout에서 사용하는 와 다르다. operator overloading 해서 다르게 ..

    Setting up your robot using tf

    Setting up your robot using tf

    http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF navigation/Tutorials/RobotSetup/TF - ROS Wiki Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. Setting up your robot using tf Description: Th wiki.ros.org TF에 대해 공부한다. TF란 Tranform의 ..

    Callbacks and Spinning

    Callbacks and Spinning

    Single-threaded Spinning 1. spin ROS에서 spin은 callback을 호출하는 기능을 한다. spin은 노드가 종료될 때까지 return되지 않는다. (노드가 종료될 때까지 반복해서 callback함수를 호출) spin을 쓰지 않으면 callback이나 service가 호출되지 않는다. 아래와 같이 spin()을 사용한 코드는 주로 subscriber 노드에서 사용한다. ros::init(argc, argv, "my_node"); ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe(...); ... ros::spin(); 2. spinOnce spinOnce는 callback함수를 특정 주기마다 호출할 때 사용한다. 예를들어 센서..

    Multi-threading 예제코드

    Multi-threading 예제코드

    멀티스레딩 관련 글 1. Multi-threading https://daehan21.tistory.com/7 2. Task-Based Parallelism (작업 기반 비동기 프로그래밍) https://daehan21.tistory.com/9 3. Multi-threading 예제코드 https://daehan21.tistory.com/10 #include #include #include #include #include #include #include #include #include #include //std::inner_product #include //parallel execution using namespace std; typedef long long ll; typedef unsigned long ..

    Task-Based Parallelism (작업 기반 비동기 프로그래밍)

    이전에 배웠던 Multi-Threading는 Thread 기반으로 multi-threading을 하기 때문에 'Thread-based multi programming'이라고 불린다. 이와 다른 개념으로 Task를 기반으로 multi-threading을 하는 경우도 있는데, 이를 'Task-based Parallelism'이라고 부른다. Thread-based multi-threading - thread 생성, 관리에 focus를 둔다 - 아래와 같이 thread에서 다루려는 변수 result의 선언이 thread와 따로 떨어져 있어서 다른 thread에서 의도치 않게 변경될 우려가 있다. #include int main() { int result; std::thread t([&] {result = 1 +..

    Multi-threading

    Multi-threading

    최근에 ROS 노드의 헤르츠를 높이기 위한 방법을 찾던 도중 Multi-threading이라는 것을 알게 되어 공부하고 정리해보았다. 홍정모교수님의 따라 배우는 C++ 강의 코드를 이용하였다. 1. Multi Threading 컨셉 예를 들어 햄버거를 만든다고 하자. '햄버거를 만드는 것'을 하나의 'Process'라고 할 때 아래는 하나의 'Process'를 표현한 것이며 각각의 작업을 'Thread'라고 한다. 1. 버거빵굽기-> 2. 패티굽기 -> 3. 야채손질 -> 4. 버거쌓기 각각의 1, 2, 3 작업을 순서대로 진행하면? 비효율적이다. 1이 진행될 때까지 2, 3 작업은 대기해야한다. 이와 같이 직렬적으로 작업을 수행하는 것은 thread를 1개만 이용하기 때문이다. 이럴 때는 1, 2, 3..