RC Car

RC Car
FPV 장비 (카메라, 고글, 베터리)

 

FPV 화질이 기대보다는 좋지 못하다.

- 일반적 촬영 Cam과 조종용 FPV는 차이가 많이 난다.

  (FPV 장비를 고가로 갈수록 화질은 개선된다. 송/수신 모듈, 고글)

- 생각보다 가격이~~~~

 

 

'일상' 카테고리의 다른 글

캠핑 모닥불  (0) 2019.10.25
그림  (0) 2019.10.25

* 간단하지만 고민하게 되는 각도 구하기~~

 

0~360중 목표 각도(targetAngle)로 이동시 현재 각도(detectAngle)에서 최소 이동 각도 산출 (방향성 + - 포함)

 

inline double GetShortAngle(double  targetAngel, double detectAngle)
{
	double fTA = fmod(targetAngel, 360.0);
	double fDA = fmod(detectAngle, 360.0);
	double fRA = fTA - fDA;
	
	if (abs(fRA) > 180.0)
	{
		fRA = (360.0 - abs(fRA));
		if (targetAngel > detectAngle) fRA *= (-1.0);
	}
	return fRA;
}

감지 위치별 목표각도까지의 회전각 예시

'작업 > C,C++' 카테고리의 다른 글

유니코드 변환 & Unicode, Multi Byte Code변환 함수  (0) 2020.01.09

파나소닉 S/W PANATERM에서 변경

1) 모터 방향 변경(Direction)

  기타 -> 개체 편집기 -> 6000h -> 607Eh (Polarity) : 정수 0(초기 설정) 에서 224(역방향)로 변경

* Driver Reset

 

2) Limit 센서 설정(일반적 센서 감지 시 동작으로 설정 시)

매개 변수 -> 분류 5(확장 기능) -> 05(분류), 004(번호) ->구동 금지 입력 설정 : 1->0으로 변경 (내용 매뉴얼 참고)

매개 변수 -> 분류5(확장 기능) -> 05(분류), 005(번호) ->구동 금지 시 시퀀스: 0->2으로 변경 (내용 매뉴얼 참고)

 

3) 위치 편차 에러 설정

매개 변수 -> 분류5(확장 기능) -> 00(분류), 014(번호) ->위치편차 과대 설정: 기본값 10배 추가(내용 매뉴얼 참고)

 

4) 과속도 레벨 에러 설정

매개 변수 -> 분류 5(확장 기능) -> 05(분류), 013(번호) ->과속도 레벨 설정: 1000으로 변경 (내용 매뉴얼 참고)

 

5) Limit 센서 설정(PANATERM에서는 어렵고, 사용 중인 상위 제어기에서 설정)

*입력 Link에 따라 SI1~SI8까지 중에서 설정.

매개 변수 -> 분류 4(IO/모니터) -> SI1, SI2설정

ex) SI2(NOT 설정) 기본은 0x828282 => 0x818181 ( "-" Limit으로 변경)

     SI3(POT 설정) 기본은 0x818181 => 0x828282 ( "+" Limit으로 변경)

 

6) 오토 튜닝이 완료되고 설정값을 매뉴얼로 돌려야 설정값이 유지된다.

 *오토 모드로 되어있으면 계속 바뀌게 되어 더 안 좋아진다.*(ㅡ,.ㅡ.)

매개 변수 -> 분류 0(기본) -> 05(분류), 002(번호) ->실시간 오토 튜닝 설정: 1에서 0으로 변경 (내용 매뉴얼 참고)

 

 

 

'작업 > 설비' 카테고리의 다른 글

Line Scan Camera Hyper Terminal Setting.  (0) 2025.05.22
인쇄기 Align동작 영상  (0) 2020.07.17
Dxf File 가공라인 전환  (0) 2020.04.01
Bending 궤적 Simulation  (0) 2019.10.25
UVW Stage 공식 #2  (0) 2019.10.25

 

 

인쇄기 Align

'작업 > 설비' 카테고리의 다른 글

Line Scan Camera Hyper Terminal Setting.  (0) 2025.05.22
파나소닉 A6 모터 설정(리니어, 볼스크류)  (1) 2020.08.12
Dxf File 가공라인 전환  (0) 2020.04.01
Bending 궤적 Simulation  (0) 2019.10.25
UVW Stage 공식 #2  (0) 2019.10.25

OpneCV를 사용하는 MFC Project에서 처리시간 측정을 위한 코드.

double t = cvGetTickCount();
//--------------
//측정하고자 하는 코드.
.
.
.
//--------------
t = cvGetTickCount() - t;
double nLoadingTime_ms = t / ((double)cvGetTickFrequency()*1000.0);
CString strMsg;
strMsg.Format(L"%0.1fms", nLoadingTime_ms);
AfxMessageBox(strMsg);

'작업 > OpenCV' 카테고리의 다른 글

OpenCV Version 정리  (0) 2022.02.24
CvvImage 추가 3.4 까지  (0) 2021.11.09
OpneCV Test(4.1.2, 3.8.4, 3.4.0)  (0) 2019.11.22
OpenCV 컴파일(3.4.0, 3.4.8, 4.1.2)  (0) 2019.11.21
OpenCV 4.x.x 사용 C++ Runtime Library Debug  (0) 2019.11.20

Cuda Thread, Grid, Block 설정 시에 참고하세요.

Grid->Block->Thread와 각 Thread에 위치 정보와 Data 전달 개념을 잡아가야 합니다. 

 

그림 참조 : https://phychai.wordpress.com/2015/05/26/cuda-programming-thread-block-grid/

//=====================================================================================
//Cuda102.cuh
	typedef struct _XYPos_
	{
		int x;
		int y;

		int blockIdx_x;
		int blockDim_x;
		int threadIdx_x;

		int blockIdx_y;
		int blockDim_y;
		int threadIdx_y;
	}XYPos;
	class CudaProc
	{
	public:
		CudaProc(void);
		virtual ~CudaProc(void);
	//----------------------------------------------------------
	public:
		int ProcBlockThread(int nXCnt, int nYCnt, XYPos *pXYList);
	};



//=====================================================================================
//Cuda102.cu
__global__ 
void XYPosCheck(int nXCnt, int nYCnt, XYPos *pXYList)
{
	//1) 2차원 배열 접근 형태의 tidX와 tidY를 구한다.
	int tidX = blockIdx.x * blockDim.x + threadIdx.x;
	int tidY = blockIdx.y * blockDim.y + threadIdx.y;

	//2) tidX와 tidY는 16의 배수형태로 Thread가 할당되어 주어진 Memory보다 많게 된다.
	//  Count X와 Count Y의 범위 내에서만 메모리에 접근하여 Data를 체워준다.
	if (tidX < nXCnt && tidY < nYCnt)
	{
		pXYList[tidX + (nXCnt * tidY)].x = tidX;
		pXYList[tidX + (nXCnt * tidY)].y = tidY;

		pXYList[tidX + (nXCnt * tidY)].blockIdx_x = blockIdx.x;
		pXYList[tidX + (nXCnt * tidY)].blockDim_x = blockDim.x;
		pXYList[tidX + (nXCnt * tidY)].threadIdx_x = threadIdx.x;

		pXYList[tidX + (nXCnt * tidY)].blockIdx_y= blockIdx.y;
		pXYList[tidX + (nXCnt * tidY)].blockDim_y= blockDim.y;
		pXYList[tidX + (nXCnt * tidY)].threadIdx_y = threadIdx.y;
	
		float fAsphericZ_mm = K_Aspheric(12.3, (float)tidX, (float)tidY);
	}
}
__host__
int CudaProc::ProcBlockThread(int nXCnt, int nYCnt, XYPos *pXYList)
{
	int nCnt_X = nXCnt;
	int nCnt_Y = nYCnt;

	//1)처리를 위한 data 생성.
	int nThreadCnt = (nCnt_X*nCnt_Y);
	int nRetMemsize = nThreadCnt * sizeof(XYPos);

	XYPos  *C_pRet_XY = nullptr;
	cudaMalloc((void**)&C_pRet_XY, nRetMemsize);

	//2) Cudat Thread, Block 할당.

	dim3 threads(16, 16);

	int nGridCntX = nCnt_X / threads.x + (nCnt_X % threads.x > 0 ? 1 : 0);
	int nGridCntY = nCnt_Y / threads.y + (nCnt_Y % threads.y > 0 ? 1 : 0);
	dim3 grid(nGridCntX, nGridCntY);
	//a) 기본 Thread Count는 16*16의 크기로 256개를 잡는다.
	//b) grid는 입력된 X Data의 X성분을 16개의 X성분 Thread로 나누어 준다.
	//c) grid는 입력된 Y Data의 Y성분을 16개의 Y성분 Thread로 나누어 준다.
	//d) 나눈 나머지가 발생하면 Grid항목 1(thread 16개)을 추가 한다.
	//(XYPosCheck()안에서 tidX와 tidY의 법위가 넘는것은 Thread수의 배수로 증가 해서이다.)

	//3) Data 처리
	XYPosCheck << < grid, threads >> > (nXCnt, nYCnt, C_pRet_XY);

	//4) 결과 Data 전달.
	cudaMemcpy((void*)pXYList, (void*)C_pRet_XY, nRetMemsize, cudaMemcpyDeviceToHost);

	//5) 생성 메모리 처리.
	cudaFree(C_pRet_XY);
	return 1;
}
//=====================================================================================
//CudaTestDlg.cpp
void CCudaTestDlg::OnBnClickedBtCudaTest()
{
	CudaProc HWAccGPU;
	int nXCnt = 210;
	int nYCnt = 260;

	XYPos *pXYList= new XYPos[nXCnt * nYCnt];
	//Cuda Object
	HWAccGPU.ProcBlockThread(nXCnt, nYCnt, pXYList);

	for (int iy = 0; iy < nXCnt * nYCnt; iy++)
	{
		TRACE(L"==.....>>>>>>%d) X:%d, Y:%d\r\n", iy, pXYList[iy].x, pXYList[iy].y);
		TRACE(L"==.....            X) %d, %d, %d\r\n", 
        		pXYList[iy].blockIdx_x, pXYList[iy].blockDim_x, pXYList[iy].threadIdx_x);
		TRACE(L"==.....            Y) %d, %d, %d\r\n", 
        		pXYList[iy].blockIdx_y, pXYList[iy].blockDim_y, pXYList[iy].threadIdx_y);
	}

	delete[] pXYList;
}
//=====================================================================================
//결과

==.....>>>>>>0) X:0, Y:0
==.....            X) 0, 16, 0
==.....            Y) 0, 16, 0
==.....>>>>>>1) X:1, Y:0
==.....            X) 0, 16, 1
==.....            Y) 0, 16, 0
==.....>>>>>>2) X:2, Y:0
==.....            X) 0, 16, 2
==.....            Y) 0, 16, 0
==.....>>>>>>3) X:3, Y:0
==.....            X) 0, 16, 3
==.....            Y) 0, 16, 0
==.....>>>>>>4) X:4, Y:0
==.....            X) 0, 16, 4
==.....            Y) 0, 16, 0
==.....>>>>>>5) X:5, Y:0
==.....            X) 0, 16, 5
==.....            Y) 0, 16, 0
==.....>>>>>>6) X:6, Y:0
==.....            X) 0, 16, 6
==.....            Y) 0, 16, 0


...

== .....>>>>>>54594) X:204, Y : 259
== .....               X) 12, 16, 12
== .....               Y) 16, 16, 3
== .....>>>>>>54595) X:205, Y : 259
== .....               X) 12, 16, 13
== .....               Y) 16, 16, 3
== .....>>>>>>54596) X:206, Y : 259
== .....               X) 12, 16, 14
== .....              Y) 16, 16, 3
== .....>>>>>>54597) X:207, Y : 259
== .....              X) 12, 16, 15
== .....              Y) 16, 16, 3
== .....>>>>>>54598) X:208, Y : 259
== .....              X) 13, 16, 0
== .....              Y) 16, 16, 3
== .....>>>>>>54599) X:209, Y : 259
== .....              X) 13, 16, 1
== .....              Y) 16, 16, 3

1) 입력 Data는 54600개이고, X 210, Y 260개 Data라고 보면 된다.

2) XYPosCheck() 함수 안에서 tidX, tidY의  접근 인자들을 정상적으로 Memory에 표기하여 돌려보내준다.

3) X와 Y Data크기가 tidX, tidY와 같은 크기로 설정하여 적용하면 의미 없는 Thread는 없어지지만 원하는 속도가 나오기 힘들다.(2의 배수로 Threa Block이 할당된다.)

 

Thread Block Test
dim3 threads(64, 64); //==>>오동작
dim3 threads(32, 32); //==>>느려짐
dim3 threads(16, 16); //==>>보통
dim3 threads(8, 8); //==>>미미하게 빨라짐
dim3 threads(4, 4); //==>>느려짐

'작업 > Cuda' 카테고리의 다른 글

RTX 2050 CUDA Version 11.0 이상  (0) 2025.05.22
NVIDIA Cuda Cores 참고  (0) 2022.02.24
기존 Project Cuda Link時 오류  (1) 2020.05.06
CPU-GPU 속도 Test  (0) 2019.12.03
VS2017 - NVIDIA Cuda 연결  (0) 2019.12.03

uafxcwd.lib  error LNK2005

Link 추가 연결

 

'작업 > Cuda' 카테고리의 다른 글

RTX 2050 CUDA Version 11.0 이상  (0) 2025.05.22
NVIDIA Cuda Cores 참고  (0) 2022.02.24
Cuda Block Thread 설정.  (0) 2020.05.26
CPU-GPU 속도 Test  (0) 2019.12.03
VS2017 - NVIDIA Cuda 연결  (0) 2019.12.03

Dwg File은 CAD 전용이라 File Format이 Open 되어있지 않다.

Dxf는 설계 파일 표준 Format이라 String Type으로  Format이 Open 되어 있다.

 

1) Layer 분리 가능
2) Dxf File의 Entity 묶기 불가.(풀어줘야 해석 가능)-좌표 변환오류가 발생한다.

 

 

 

 

'작업 > 설비' 카테고리의 다른 글

파나소닉 A6 모터 설정(리니어, 볼스크류)  (1) 2020.08.12
인쇄기 Align동작 영상  (0) 2020.07.17
Bending 궤적 Simulation  (0) 2019.10.25
UVW Stage 공식 #2  (0) 2019.10.25
UVW Stage 공식 #1  (0) 2019.10.25

+ Recent posts