본문 바로가기

전체 글547

camera lidar calibration github 카메라와 라이더의 캘리브레이션을 위해서 깃허브 패키지를 돌리고 싶습니다. 물리적인 이해는 뒤로 하고 먼저 돌리는데 중점을 두고, 하나씩 이해해 나가도록 하겠습니다. https://github.com/swyphcosmo/ros-camera-lidar-calibration먼저 위의 사이트에 접속해서 안내대로 ROS를 셋팅합니다. 도중에 vagrant could not detect virtualbox, make sure virtualbox is properly installed 라는 에러메시지가 나옵니다. 그래서 저는 이것이 우분투를 virtualbox 에 깔아야 하나 생각했습니다. 그래서 virtualbox 를 설치하고 돌려보았으나, 돌아가지 않아서, 지금은 vmware 에서 우분투 안에 virtualbox.. 2017. 8. 3.
스택 리스트는 대표적인 선형 자료 구조 입니다. 스택이란 자료구조도 선형 자료구조의 일종입니다. 쌓아 올려진 상자더미나 쟁반 위에 쌓인 접시. 먼저 들어간 것이 나중에 나옵니다. Last-In, First-Out 구조의 자료구조라고도 불립니다. 스택 ATD의 정의스택을 대표하는 넣고, 꺼내고, 들여다 보는 연산을 가리켜 각각 push, pop, peek이라 합니다. 때문에 스택의 ADT는 다음과 같이 정의가 되며, 이것이 스택의 보편적인 ADT입니다. void StackInit(Stack * pstack); 스택의 초기화를 진행합니다. 스택 생성 후 제일 먼저 호출되어야 하는 함수입니다. int SIsEmpty(Stack * pstack); 스택이 빈 경우 TRUE를, 그렇지 않은 경우 FALSE를 반환합니다.. 2017. 8. 2.
Lidar M8 Lidar 를 통해서 물체를 검출하고, 인식하고, 거리를 측정합니다. 이의 팔로우 모델은 유투브의 동영상을 참하면 됩니다. 여러 동영상이 있지만, 제가 가장 많이 참고한 동영상은 다음과 같습니다. https://www.youtube.com/watch?v=2TEohJYcPyE 먼저 주변의 사물중에 장애물을 탐지하여 빨간색으로 나타냅니다. 다음으로 3D 클러스터링을 적용하여, 물체마다 색을 달리 합니다. 다음으로 tracking 기술을 적용하여 클러스터링 된 물체를 라이더 측정 거리까지 사물을 분리합니다. 다음으로 분류라고 하여, 자동차는 빨간색으로 보행자는 파란색, 자전거를 그린색으로 나타냅니다. 이 과정을 시도하기 위해서 github에 올라온 자료들을 하나씩 뜯어 보면서 수정하도록 하겠습니다. 먼저.. 2017. 8. 2.
C++의 형 변환 연산자 C++ 진영에서는 C 스타일의 형 변환 연산자를 가리켜 오래된 C 스타일 형 변환 연산자라 부르기도 합니다. 이렇듯 C 스타일의 형 변환 연산자는 C언어와의 호환성을 위해서 존재할 뿐, C++에서는 새로운 형 변환 연산자와 규칙을 제공하고 있스니다. #include using namespace std; class Car{private:int fuelGauge;public:Car(int fuel) : fuelGauge(fuel){ }void ShowCarState() { cout 2017. 8. 2.
예외처리 어떠한 경우에 예외의 발생위치와 예외의 처리위치가 달라야 하는지 예를 하나 들겠습니다. 대부분의 경우에 있어서 예외의 발생위치와 예외의 처리위치는 다릅니다. #include #include #include using namespace std; int StoI(char * str){int len = strlen(str);int num = 0; for (int i = 0; i str1.. 2017. 8. 2.
예외처리(Exception Handling) 예외상황과 예외처리의 이해 예외는 프로그램의 실행 도중에 발생하는 문제상황을 의미합니다. 따라서 컴파일 시 발생하는 문법적인 에러는 예외의 범주에 포함되지 않습니다. #includeusing namespace std; int main(void){int num1, num2;cout > num1 >> num2; cout 2017. 8. 1.
템플릿2 C++ 표준 라이브러리는 템플릿을 기반으로 디자인된다. 따라서 템플렛을 잘 알면, 그만큼 라이브러리에 대한 이해도와 활용능력이 향상됩니다. Point 클래스를 다음의 형태로 템플릿화 하였습니다. BoundCheckArray 클래스 템플릿을 정의하였습니다. 위으 클래스 템플릿을 기반으로 Point 템플릿 클래스의 객체를 저장할 수 있는 객체는 어떻게 생성해야 할까? 템플릿 클래스라 하여 일반 클래스와 비교해서 다른 문법체계를 지니는 것은 아니니, 우리가 알고 있는 C++ 문법의 이해를 기반으로 템플릿과 관련된 다양한 확장이 가능합니다. 특정 템플릿 클래스의 객체를 인자로 받는 일반함수의 정의와 friend 선언 함수 템플릿을 특수화하는 이유는 특정 자료형에 대해서 구분이 되는 다른 행동을 보이기 위해서 입.. 2017. 8. 1.
템플릿(Template) 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 합니다. 함수 템플릿이라는 것은 함수를 만드는 도구가 됩니다. 함수 템플릿도 다양한 자료형의 함수를 만들어 낼 수 있습니다. T는 자료형을 결정짓지 않겠다는 의미로 사용한 것입니다. 즉, 함수를 만들어 내는 템플릿을 정의하기 위해서 사용된 것입니다. #include using namespace std; template T Add(T num1, T num2){return num1 + num2;} int main(void){cout 2017. 8. 1.
String 클래스의 디자인 string 클래스를 모델로 삼아서 연산자가 어떠한 형태로 오보러딩 되어 있는지 보고, 이와 유사한 문자열 처리 클래스를 직접 구현해 보는데 목적이 있습니다. 이는 표준 string 클래스를 사용하는 것 이상의 의미가 있다고 생각합니다. #pragma warning(disable:4996) #include #include using namespace std; int main(void){string str1 = "I like ";string str2 = "string class";string str3 = str1 + str2; cout 2017. 8. 1.
연산자 오버로딩 2 대입 연산자의 오버로딩은 클래스 정의에 있어서 생성자, 복사 생성자와 하께 빠질 수 없는 요소입니다. 객체간 대입연산의 비밀: 디폴트 대입 연산자정의하지 않으면 디폴트 복사 생성자가 삽입됩니다. 디폴트 복사 생성자는 멤버 대 멤버의 복사를 진행합니다. 생성자 내에서 동적 할당을 한다면, 깊은 복사가 필요하다면 직접 정의해야 합니다. 정의하지 않으면 디폴트 대입 연산자가 삽입됩니다. 디폴트 대입 연산자는 메버 대 멤버의 복사(얕은 복사)를 진행합니다. 연산자 내에서 동적 할당을 한다면, 깊은 복사가 필요하다면 직접 정의해야 합니다. pos2도, 그리고 pos1도 이미 생성 및 초기화가 진행된 객체라는 사실입니다. #pragma warning(disable:4996) #include using namespa.. 2017. 8. 1.