Light Detection And Ranging, LIDAR

 

레이더(Radar)는 전자기파를 내보내 물체를 감지하고, 물체에 반사된 전파를 분석해 거리나 속도 등을 측정하는 부품이다. 저렴하지만, 물체의 형태를 인식하는 것은 어렵다. 라이다(LiDAR)는 전자기파 대신 레이저를 내보내 물체를 감지하고, 반사된 빛을 분석해 3D 지도로 구현하는 부품이다.

라이다는 레이저가 반사되어 돌아오는 시간 및 강도를 측정합니다. 이를 통해 방향, 속도, 온도, 물질의 농도 등의 특성을 파악할 수 있습니다.

 

라이다로 만들어진 3D 지도

 

라이더 센서 개발 초기에는 360도 회전식 스캔 장비가 주로 개발이 되었지만 

자율주행 1위 웨이모

 

현재는 고정형 라이더 센서 개발로 크기, 가격을 내리고 있습니다.

고정형 라이다 센서는 인지 각도가 작지만 크기와 가격에 대한 메리트가 있기 때문에

고정형 (Solid-state) 라이다 센서를 여러군데 부착하기도 합니다, 

개발 초기에는 가격이 약 8000만원에 가까웠지만 현재는 약 10만원 수준으로도 떨어졌다고 합니다. 

 

최근 자동차의 로고가 평평하게 바뀌었는데 이는 앰블럼 내부에 라이더 등의 센서를 장착하기 위함이라고 합니다.

 

최근 카메라 기술이 좋아져서 라이다를 대체하려고 합니다.

기존 카메라로는 악천후에서는 탐지가 불가능했지만 현재는 해상도가 높아져서 단점들이 사라지고 있다고 합니다.

일론 머스크도 라이다가 필요 없다고 하였고

실제로 테슬라에서는 레이더, 초음파센서, 카메라만으로 자율주행을 구현합니다.

또한 라이다로 거리를 대략적으로 아는 장점이 컸는데 렌즈 2개로(스테레오 방식) 거리를 파악하는 기술이 있어 이도 커버 가능하다고 합니다.

 

 

 

라이다센서와 레이더 센서의 비교와 종류, 서브시스템에 관한 기사

http://www.epnc.co.kr/news/articleView.html?idxno=82099 

 

라이다의 원리와 장단점, 구현 방식에 따른 종류 - 테크월드뉴스

[테크월드=양대규 기자] 자율주행차의 상용화가 가까워짐에 따라, 라이다(LIDAR) 기술도 빠르게 발전하고 있다. 차량용 라이다에 대해 그 개념과 이용 가능한 시스템의 유형까지 근본 원리에 대해

www.epnc.co.kr

 

'최신 트렌드' 카테고리의 다른 글

꿈의 배터리? 전고체 배터리  (0) 2020.09.20
혼합 현실 MR(Mix Reality) (+ 확장 현실 XR??)  (0) 2020.08.16
하이퍼루프(Hyperloop)  (0) 2019.12.01
PID 제어  (0) 2018.11.28
3D센싱, ToF에 대하여  (0) 2018.10.27

미국 주식 사는법!!!

1. 비대면계좌(위탁종합)개설

2. 위의 계좌로 예수금 이체

3. 환전

4. 미국 주식 매매

 

우선 40달러 받는 이벤트부터 알려드릴게요

 

https://m.kiwoom.com/nkm.MobMain.do

 

키움증권

 

m.kiwoom.com

여기서 이벤트 more -> 40달러 받고 미국주식 사자 클릭!!

 

제가 추천하는 이벤트 40달라 이벤트가 아직 진행 중이네요

아무리 생각해도 혜자 이벤트입니다.

프로세스는 비대면 계좌(미국 주식을 거래할 수 있는 위탁종합 계좌) 개설하고

40달라가 계좌로 들어오는데 그걸로 30일 이내에 주식을 사면 됩니다.

40달라는 바로 출금이 안되고 가지고 있으면 30일 이후에 사라져서 주식을 사야합니다.

추가 입금 안하고 무난하게 살만한 종목은

T(AT&T) 추천

비대면계좌는 키움계좌개설 어플을 통해서 해주시고요

참 공인인증서는 그냥 은행 인증서가 아니라

범용공인인증서가 필요합니다.

무료 범용공인인증서 있어여!

참 수수료 & 환율우대 이벤트도 신청해주시고!!

이제 위의 어플을 설치해주세요

 

가중 중요한 어플!!!

그리고 주식 계좌에 돈을 이체해줍니다.

 

그러면 원화 예수금이 생깁니다.

 

하지만 미국주식은 달러로 사야겠죠?

 

환전하고 고고!

환전은 업무탭에 있습니당

 

K메뉴 에서 업무 외화환전!!

 

옆에서 환율조회로 실시간 환율도 볼 수 있어요

 

환전은 낮에 하시는걸 추천해요

밤에 하면 가환율로 환전되서 돈이 더 나갑니다.

물론 다음날에 가환율과 실제 환율 차이만큼의 차액이 입금됩니당

 

 

그리고 주식 주문에서 원하는 주식을 사시면 끝~~

 

실시간 가격을 보려면 또 추가 비용을 내야해서 저는 그냥 시장가로 매수합니다

매매는 지금 썸머타임 적용이라 10시 30분부터 가능합니다

이상 미국 주식 매매법이였습니다~!

 

 

 

 

 

 

 

 

 

 

인터럽트 벡터 테이블을 생성하고 메모리 검사와 C 프로그램에서 사용할 스택과 힙을 생성하고 초기화 하는 등 C 프로그램이 작동하기 위한 초기화 작업 수행

 

스타트업 코드는 시스템이 C를 인식하기 전이기 때문에 어셈블리 코드로 작성해야 함

'전자공학 > 임베디드' 카테고리의 다른 글

디바이스 드라이버 (Device Driver)  (0) 2020.11.10
MCU 구조  (0) 2020.09.02
시리얼 케이블, JTAG 케이블, 이더넷/USB 케이블  (0) 2020.04.28
크로스컴파일 과정  (0) 2020.04.28
JTAG란?  (0) 2019.12.25

시리얼 케이블 : UART 통신을 위한 케이블, 모니터링 디버깅 가능

JTAG 케이블 : 타겟 시스템이 프로그램 다운로드, 플래시 메모리에 프로그램 탑재, 레지스터 값을 읽어올 수 있고 프로그램을 스텝으로 실행 가능

이더넷/USB 케이블 : 타겟 시스템에 개발한 소프트웨어 탑재 가능 

 

 

'전자공학 > 임베디드' 카테고리의 다른 글

MCU 구조  (0) 2020.09.02
스타트업 코드  (0) 2020.04.28
크로스컴파일 과정  (0) 2020.04.28
JTAG란?  (0) 2019.12.25
부트로더(Boot loader)란?  (0) 2019.10.28

test.c -> 전처리기 -> test.i -> 크로스 컴파일러 -> test.s -> 크로스 어셈블러 -> test.o ->

링커 -> 로케이터 -> test(실행파일)

 

로케이터는 타겟 메모리의 메모리 정보를 통해 프로그램 코드와 데이터 섹션들에 실제 메모리를 할당

'전자공학 > 임베디드' 카테고리의 다른 글

스타트업 코드  (0) 2020.04.28
시리얼 케이블, JTAG 케이블, 이더넷/USB 케이블  (0) 2020.04.28
JTAG란?  (0) 2019.12.25
부트로더(Boot loader)란?  (0) 2019.10.28
Startup code 스타트업 코드  (0) 2019.10.27

영상처리할 때 필수품 !

 

OpenCV

 

많은 기능들을 OpenCV로 손쉽게 사용할 수 있어요

 

설치 환경은 윈도우 10, Visual Studio 2017, OpenCV 4.3.0입니다.

 

https://opencv.org/releases/

 

Releases

 

opencv.org

 

저는 C에다가 바로 깔았어요

 

이제 환경변수 등록입니다.

(환경변수 등록을 하는 이유는 나중에 dll 에러가 나는 경우를 방지)

 

C:\opencv\build\x64\vc15\bin을 시스템 변수 Path에 추가해줍니다.

 

여기서 Visual studio가 2017보다 구버전이면 vc14로 변경하여 추가해줍니다.

 

이제 환경변수 등록도 끝났으니 Visual Studio로 가봅시다~

프로젝트를 하나 생성해주시고

디버그 옵션은 64비트로 변경!

 

소스파일에 test.cpp를 추가해줍니다.

 

현재 상황!

이제 프로젝트 속성을 변경해줍니다.

구성 모든 구성으로 하시고 C/C++ 일반에 추가 포함 디렉터리에 C:\opencv\build\include를 입력해주세요

마찬가지로 모든 구성에서 링커 일반에 추가 라이브러리 디렉터리에 C:\opencv\build\x64\vc15\lib를 입력해주세요

구성을 Debug로 바꾸고 opencv_world430d.lib를 입력해주세요.

구성을 Release로 바꾸고 opencv_world430.lib를 입력해주세요.

 

그러면 OpenCV가 잘 설치되었는지 Test코드를 실행해보겠습니다.

 

웹캠 영상을 출력하는 코드에요!

 

/**
@file videocapture_basic.cpp
@brief A very basic sample for using VideoCapture and VideoWriter
@author PkLab.net
@date Aug 24, 2016
*/

#include <opencv2\opencv.hpp>
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

int main(int, char**)
{
	Mat frame;
	//--- INITIALIZE VIDEOCAPTURE
	VideoCapture cap;
	// open the default camera using default API
	cap.open(0);
	// OR advance usage: select any API backend
	int deviceID = 0;             // 0 = open default camera
	int apiID = cv::CAP_ANY;      // 0 = autodetect default API
								  // open selected camera using selected API
	cap.open(deviceID + apiID);
	// check if we succeeded
	if (!cap.isOpened()) {
		cerr << "ERROR! Unable to open camera\n";
		return -1;
	}

	//--- GRAB AND WRITE LOOP
	cout << "Start grabbing" << endl
		<< "Press any key to terminate" << endl;
	for (;;)
	{
		// wait for a new frame from camera and store it into 'frame'
		cap.read(frame);
		// check if we succeeded
		if (frame.empty()) {
			cerr << "ERROR! blank frame grabbed\n";
			break;
		}
		// show live and wait for a key with timeout long enough to show images
		imshow("Live", frame);
		if (waitKey(5) >= 0)
			break;
	}
	// the camera will be deinitialized automatically in VideoCapture destructor
	return 0;
}

 그리고 F5를 눌러 실행시켜줍니다.

바로 잘 되면 성공!

하지만 opencv_world.dll 오류 경고가 뜬다면 다음과 같이 해결해주시면 됩니다.

프로젝트 폴더에

C:\opencv\build\x64\vc15\bin에 있는 opencv_world430.dll, opencv_world430d.dll 파일을 넣어줍니다.

 

그리고 다시 F5로 실행하면 웹캠 영상이 잘 출력됩니다!

고생하셨습니다.

아나콘다는 파이썬에 관련된 라이브러리, 패키지를 손쉽게 설치해주는 툴입니다.

https://www.anaconda.com/distribution/

 

Anaconda Python/R Distribution - Free Download

Anaconda Distribution is the world's most popular Python data science platform. Download the free version to access over 1500 data science packages and manage libraries and dependencies with Conda.

www.anaconda.com

스크롤을 조금만 내려서 윈도우용 64비트 설치 파일을 다운받아주세요!

 

설치파일을 실행하여 Next를 쭉쭉 누르고

이 두 가지만 이렇게 설정해주시면 됩니다.

짜잔~

 

그리고 아나콘다가 제대로 설치되었는지 테스트할 겸 tensorflow를 설치해보겠습니다.

 

tensorflow 사용하실 분만 설치하시면 돼요!

 

위에 보이는 Anaconda Prompt를 관리자 권한으로 실행해줍니다.

python -m pip install --upgrade pip
conda create -n tensorflow python=3.7

 

위의 두줄을 입력해주고 proceed(y/n) Y를 입력해줍니다.

첫 번째 줄은 pip 업데이트, 두 번째 줄은 가상환경 만들기입니다.

activate tensorflow
pip install tensorflow==2.0

이제 실질적으로 tensorflow를 설치했습니다.

(그냥 pip install tensorflow하면 ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다. 에러가 떠서 2.0으로 설치했습니다. 구글링 결과 엔디비아나 GPU문제인 거 같네요)

https://webnautes.tistory.com/1395 

참고!

python
import tensorflow as tf

여기서 import가 정상적으로 되면 tensorflow 설치 성공!

고생하셨습니다~!

 

추가적으로 여기서 Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 경고가 뜰 수 있다. 경고라서 무시하셔도 됩니다.

https://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=221237740617&parentCategoryNo=&categoryNo=206&viewDate=&isShowPopularPosts=true&from=search

참고하시면 좋을듯!

 

추가적으로 AttributeError: module 'tensorflow' has no attribute 'Session' 오류가 날 수 있다.

https://blog.naver.com/jjgu24/221724029058

참고하시면 좋을듯

파이썬 사무자동화, 인공지능에 관심이 있는데 파이썬이 최고인 거 같아서 파이썬 설치하며 포스팅합니다.

 

우선 파이썬 설치파일부터 받아줍니다.
https://www.python.org/downloads/release/python-377/

 

Python Release Python 3.7.7

The official home of the Python Programming Language

www.python.org

윈도우 실행파일을 다운받아요!

빨간 박스 체크를 해줍니다. 그리고 Install Now!!!(환경변수 등록)

설치가 다 되면 Disable path length limit을 클릭해줍니다.

환경변수 길이제한을 풀어주는 거에요!

그리고 파이썬을 실행해줍니다.

일단 설치 완료!

 

다음 포스팅은 아나콘다, 파이참 포스팅 할게요!

extern

 

다른 c파일에서 변수, 함수를 공유하기 위해서 사용한다.

 

예를 들면 aaa.c에서 int a =1; 를 선언했다고 하자.

bbb.c에서 a를 참조하려면 extern int a; 로 a 변수를 참조할 수 있다.

 

 

static

 

extern과 달리 다른 c파일에서 참조하는 것을 막기위해 사용한다.

 

한 파일 내에서는 전역변수로 사용한다.

 

aaa.c에서 static int a = 1;로 선언하면 bbb.c에서 aaa.c가 선언한 a를 참조할 수 없다.

 

그냥 지역변수는 선언된 블록 내에서 사용 가능하다.

 

const 

 

이미 assign  된 값을 변경할 수 없게 해준다.

 

예외도 있다.

 

const int i = 0;

*(int*)(&i) = 1; 은 가능하다.

 

여기서 #define a = 1; vs const a = 1; 의 차이점은

 

const는 메모리가 할당됨으로써 디버깅 시에 메모리 값을 확인할 수 있다,

 

volatile  

 

const와 반대로 변수가 언제 어떻게 바뀔지 모른다고 알려주기위해 사용한다.

 

컴파일러는 volatile 변수는 최적화에서 제외하여 항상 메모리에 접근하도록 한다.

 

예를 들어 

int main()
{
	int i=0;

	while (i < 10)
		i++;

}

위의 코드를 아래와 같이 최적화 시킨다.

int main()
{
	int i = 10;


}

하지만 volatile을 사용하면

int main()
{
	volatile int i=0;

	while (i < 10)
		i++;

}

그냥 코드 그대로 컴파일한다.

 

extern const volatile int a;

 

const, volatile은 반대 개념인대 위와 같이 사용했다면

 

a가 하드웨어에 의해 변경될 수 있지만 (volatile), 프로그램 내부에서는 값이 변경될 수 없음을 뜻한다. (const)

 

https://dojang.io/mod/page/view.php?id=749

 

C 언어 코딩 도장: 85.15 volatile 변수

변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다. volatile 자료형 변수이름; volatile int num1 = 10; // 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듦 volatile로 선언한 변수는 사용할 때 항상 메모리에 접근합니다. 즉, 이 변수는 언제든지 값이 바뀔 수 있으니까 항상 메모리에 접근하라고 컴파일러에게 알려주는 것입니다. 예를 들어 다음과

dojang.io

https://littlepenguin.tistory.com/7

 

C 언어 키워드 정리 (const / register / static / volatile / inline)

리눅스 커널 코드를 보면서 자주 만나던 키워드들과 기타 키워드들을 정리해봤다. const declaration할 때 assign된 값을 변경할 수 없게 해주는 키워드다. const int a = 10; a = 11; 따위를 할 수 없다. *(&a) =..

littlepenguin.tistory.com

 

register

 

많이 사용하는 변수를 register 에 넣고 사용한다.

 

최적화 옵션을 켜면 자동으로 자주 사용하는 변수는 register에 넣어진다.

 

 

비트 필드란?

 

보통 구조체는 기본 데이터 형들이 모여 구성됩니다.

 

예를들면 이로케?

struct Person
{
	double height; 
	float weight;
	int age;
};


struct Family
{
	Person son, mom, dad;
};

하지만 이러면 메모리가 부족할 때 좀 알뜰하게 사용하는데에는 무리가 있습니다.

 

예를 들면 1바이트에 7개의 비트를 활용하고 싶을때나

 

메모리를 최대한 아끼고 싶을 때 등등이 있겠죠

 

아래는 제가 인터넷에 돌아다니는 예제를 활용해 다듬은 코드입니다.

 

아래의 코드를 통해 알 수 있는 점은

 

hwf의 x, y, z 변수에 똑같은 2진수 1111을 넣었지만

 

x는 1비트, y는 2비트 z는 3비트 할당 받았기 때문에 결과값이 다르게 출력됩니다.

#include<stdio.h>

struct flags {
	unsigned int x : 1;
	unsigned int y : 2;
	unsigned int z : 3;
};

void printbit(unsigned int);

int main(void)
{
	struct flags hwf;

	hwf.x = 0b1111;
	hwf.y = 0b1111;
	hwf.z = 0b1111;

	printf("\nhwf.x= ");
	printbit(hwf.x);
	printf("\nhwf.y= ");
	printbit(hwf.y);
	printf("\nhwf.z= ");
	printbit(hwf.z);
	getchar();
}

void printbit(unsigned int inputt)
{
	unsigned int mask = 1;

	for (int i = 3; i >= 0; i--)
	{
		mask = 1 << i;
		printf("%d", inputt & mask ? 1 : 0);
	}

}

x는 1비트 할당 받았으니까 1111중에 1만 

 

y는 2비트 할당 받았으니까 1111 중에 11까지만

 

z는 3비트 할당 받았으니까 1111 중에 111까지!

 

유용한 비트필드 포스팅 끝~~~~

+ Recent posts