바나나 먹기 게임.rsp
0.43MB

 

원숭이 스프라이트

 

 

바나나 스프라이트


● 자율주행의 정의와 개념
● 자율주행 시스템의 구성요소 
●자율주행 시스템의 원리 

 

 

● 자율주행의 정의와 개념


"자율주행자동차"란 운전자 또는 승객의 조작 없이 자동차 스스로 운행이 가능한 자동차를 말합니다.


- 자율주행을 위해 자동차에 IT. 센서 등 첨단 기술을 융합하여 스스로 주변 환경을 인식
- 위험을 판단하고 주행 경로를 계획하여
- 운전자 또는 승객의 조작 없이 안전한 운행이 가능하도록 한 자동차를 자율주행자동차라고 합니다

 

 

 자율주행시스템의 분류

구분 내용
부분 자율주행시스템 지정된 조건에서 자동차를 운행하되 작동한계 상황 등
필요한 경우 운전자의 개입을 요구하는 자율주행시스템
조건부 완전자율주행시스템 지정된 조건에서 운전자의 개입 없이 자동차를 운행하는 자율주행시스템
완전자율주행시스템 모든 영역에서 운전자의 개입 없이 자동차를 운행하는 자율주행시스템

 

 

자율주행 기술은 자동화 단계의 구분에 따라 레벨 0부터 5까지 6단계로 분류할 수 있으며,
레벨 3부터를 자율주행자동차로 봅니다.

[자료 출처]
SAE(미국자동차공학회의 구분에 따른 분류), 법제처 공식 홈페이지]


 

[자료 출처]
4차 산업혁명 코리아루트, 산업통상자원부, 2017.6.

 

[자료 출처]
https://www.easylaw.go.kr/CSP/CnpClsMainBtr.laf?csmSeq=1593&ccfNo=1&cciNo=1&cnpClsNo=1

 

● 라이다

라이다(Lidar)는 360도 방사한 레이저가 반사돼 되돌아오는 것을 감지해 3D 이미지를 구현합니다. 
이렇게 구현된 3D 이미지는 딥러닝 알고리즘을 통해 처리돼 자율주행을 돕습니다.

[자료 출처]
https://www.researchgate.net/figure/Light-detection-and-ranging-LiDAR-measurement-characteristics-a-Time-of-flight-ToF_fig4_336002272

 

[자료 출처]
https://www.newspim.com/news/view/20220708000949

 


레이다(Radar)는 전자파 기반 센서입니다.
전자파를 발사해 반사돼 돌아오는 신호를 기반으로 주변 사물과의 거리 방향 속도등의 정보를 추출하여 물체를 인식합니다.

[자료 출처]
https://www.nidec-components.com/kr/featuring/lidar-polygon/whats_lidar/

새 프로젝트 생성 시, 코드 자동 생성 되지 않고

myST에 연결하라는 Dialog가 뜰 때...

 

해결법

Window > Preferences > 

 

General > Network Connections 

> Active Provider : Direct 로 설정해줍니다.

 

 

 

  • Direct: 프록시 서버 없이 직접 인터넷에 연결합니다.
  • Native: 운영 체제의 네트워크 설정을 사용합니다.
  • Manual: 수동으로 프록시 설정을 구성합니다. 이 옵션을 선택하면, "HTTP", "HTTPS", "SOCKS" 등의 프록시 주소와 포트를 직접 입력할 수 있습니다.

 

 

 

Direct 로 설정하면, 연결이 됩니다.

 

&buf_one[0] == buf_two+0

https://www.onlinegdb.com/online_c_compiler#

 

Online C Compiler - online editor

OnlineGDB is online IDE with c compiler. Quick and easy way to compile c program online. It supports gcc compiler for c.

www.onlinegdb.com

 

온라인 C 컴파일러로 아래 코드를 실행해보면,

#include <stdio.h>
#include <stdint.h> // uint8_t

int main()
{
    // uint8_t 는 8비트 (1바이트) 이므로,
    // 연속된 배열 공간에서는
    // 주소가 1씩 증가함
    
    uint8_t buf_one[100];
    buf_one[0] = 1;
    buf_one[1] = 2;
    buf_one[2] = 4;
    
    printf("&buf_one[0] : %u\n", &buf_one[0]);
    printf("&buf_one[1] : %u\n", &buf_one[1]);
    printf("&buf_one[2] : %u\n", &buf_one[2]);
    
    char* buf_two = buf_one;
    printf("buf_two[0] : %d\n", buf_two[0]);
    printf("buf_two[1] : %d\n", buf_two[1]);
    printf("buf_two[2] : %d\n", buf_two[2]);
    
    printf("buf_two+0 : %u\n", buf_two+0);
    printf("buf_two+1 : %u\n", buf_two+1);
    printf("buf_two+2 : %u\n", buf_two+2);
    
    return 0;
}

 

아래와 같이 출력된다.

&buf_one[0] : 292731376
&buf_one[1] : 292731377
&buf_one[2] : 292731378
buf_two[0] : 1
buf_two[1] : 2
buf_two[2] : 4
buf_two+0 : 292731376
buf_two+1 : 292731377
buf_two+2 : 292731378

 

buf_two 가 가리키고 있는 것은

buf_one 배열의 0번째 index의 주소이다.

 

&buf_one[0] 와 buf_two+0 가

같은 주소값으로 출력된 것을 확인할 수 있다.

 

&buf_one[0] == buf_two+0

 

*buf_two = buf_one 이므로,

양변에 & 연산자를 취해주면

&(*buf_two) = &(buf_one)

 

&*가 이 순서대로 나오면 두 연산자 모두 사라지므로

buf_two = &buf_one 이라고 할 수 있다.

 

&buf_one[0] == buf_two+0  == &buf_one + 0

 

따라서

&buf_one[0] == buf_two+0

https://velog.io/@irish/MQTT-programming-basic

 

[MQTT] 실습 - 기초

[MQTT] 실습 - 기초

velog.io

 

위 블로그 참고하여 따라 해보았다.

 

1) MQTT 브로커 설치 (Windows : Mosquitto)

Windows 에서 설치할 수 있는 대표적 MQTT 브로커인 Mosquitto 설치
Mosquitto의 공식 웹사이트(https://mosquitto.org/download/)

 

2) Mosquitto 실행

cmd 에서 아래 실행 명령 입력

"C:\Program Files\mosquitto\mosquitto.exe" -v

 

 

3) MQTT 클라이언트 설치

Python과 paho-MQTT 라이브러리 설치

cmd 에서 설치

pip install paho-mqtt

 

 

4) publisher.py (발행자)와 subscriber.py (구독자)

 

 

5) publisher.py 실행

python publisher.py

 

publisher.py의 python terminal

 

 

subscriber.py의 python terminal

 

cmd

코드

#include <stdio.h>
#include <stdarg.h>
#include <time.h>

void printf_log(const char *format, ...);

int main()
{
    printf_log("This is a log message");
    return 0;
}

void printf_log(const char *format, ...)
{

    // 현재 시간을 문자열로 변환
    time_t now = time(NULL);
    struct tm *now_tm;
    char time_str[20];
    time(&now);
    now_tm = localtime(&now);
    strftime(time_str, sizeof(time_str), "[%Y-%m-%d %H:%M:%S]", now_tm);

    va_list args;
    va_start(args, format);
    printf("%s", time_str); // 로그 메시지 출력
    vprintf(format, args);
    fflush(stdout); // stdout 버퍼를 강제로 플러시
    va_end(args);
}

 

결과

 

 

 

 


[참고]https://docs.m5stack.com/en/arduino/m5cardputer/sdcard

 

m5-docs

Product Tutorial

docs.m5stack.com

 

void printf_log(const char *format, ...) {
    char buf[256];
    va_list args;
    va_start(args, format);
    vsnprintf(buf, 256, format, args);
    va_end(args);
    Serial.print(buf);
    canvas.printf(buf);
    canvas.pushSprite(0, 0);
}

 

 

 

 

Yona의 프로젝트 주소를 복사한다. (빨간 박스)

 

TeraTerm 을 아래와 같이 설정한다.

 

아이디 비밀번호 있으면 로그인한다.

 

 

git clone (Yona 프로젝트 주소)

이전에 복사한 Yona의 프로젝트 주소를 복사 붙이기 한다.

 

접속 성공!

~~@~~ : ~$ 

 

 

MQTT

IoT 시스템에서 많이 활용되는 프로토콜입니다

 

IoT의 적합한 프로토콜은 뭘까요?

 

 

IoT 시스템은 기본적으로

 

여러 디바이스가 연결될 수 있으므로

 

 

디바이스가 많이 연결되면 그만큼

 

복잡도가 증가하게 됩니다.

 

 

 

이런 부분을 MQTT 프로토콜이 해결해 주고 있는데요.

 

프로토콜의 구조를 살펴보면 이해가 쉽습니다.

 

MQTT 는 기기들이 메시지 브로커에만 접속이 되고

 

이 기기들의 데이터 교환은

 

브로커가(중개인) 맡아서 처리하는 구조를 가지게 됩니다.

 

이 기기들은 모두 브로커와 각각 연결되어 있으며

 

데이터를 송신 수신하게 됩니다.

 

 

여기서 데이터를 포함한 메시지

 

MQTT에서는 토픽이라고 부르게 됩니다.

 

MQTT에서 데이터를 전송하는 것발행이라고 부르고

 

 

특정 토픽데이터를 수신하겠다

브로커에게 등록하는 행위를

 

구독 subscribe라고 합니다

 

 

특정 토픽의 데이터가 퍼블리시되면

브로커는 이 토픽을 구독하고 있는 기기에게

 

그 내용을 전송해 줍니다.

 

토픽을 발행하는 기기들을

퍼블리셔 (Publisher),

 

토픽을 구독하고 있는 기기들을

서브스크라이버 (Subscriber) 라고 하고요.

 

 

브로커의 역할을 해주는 프로그램이 여러가지가 있죠.

 

하이브엠큐, 액티브앰큐, 모스키토 등

 

 

저는 성능 또 비용을 생각을 해서

모스키토를 선택하고 활용하고 있습니다.

 

 

이 기기들, 디바이스들은

인터넷 연결 가능한 디바이스 겠죠.

 

예를 들어서 아두이노는 

와이파이가 가능한 모델일 경우 

 

Pub-Sub 클라이언트 라이브러리를 지원하고 있어서 

 

이 라이브러리를 사용해서  메시지를 주고 받을 수 있습니다. 

 

 
 

이런 구조적인 장점 외에도

MQTT의 큰 장점은

 

초경량 프로토콜이라는 것입니다. 

 

 

MQTT는 작은 장비에서도 충분히 활용할 수 있을 정도로


고정 영역의 메시지의 사이즈가 작아서 

 

IoT 디바이스에서 활용하기 효율적인 프로토콜입니다.



간단한 디바이스들은 

 

성능과 전력이 리소스들이 충분하지 않기 때문에 

 

최소한의 리소스가 필요하다면 좋겠죠.

 


MQTT 프로토콜은

 

네트워크 내역폭을 적게 사용할 수 있고

전력 소모가 적기 때문에

 

가볍고 효율적인 프로토콜입니다.

 

여기에 QoS가 지원이 됩니다.

 

우선 통신이 가지는 오류 상황에서

어느 정도의 신뢰성을 보장해주고 있는데요.

 

 

퀄리티를 보장해야 할 정도를 3단계 등급으로 나눠서

 

그에 따라 메시지 전송 로직다르게 가져가게 됩니다.

 

 

이런 효율적인 프로토콜인 MQTT를 이용해서

IoT 시스템을 구축해 보세요.

+ Recent posts