Superman API Documentation - YuKyungKim/GitTest02 GitHub Wiki

Superman

Overview

Superman์€ linux ๊ธฐ๋ฐ˜ Drone OS์ด๋‹ค.

์ด ๋ฌธ์„œ๋Š” Superman API์— ๋Œ€ํ•ด ๊ธฐ์ˆ ํ•œ ๋ฌธ์„œ์ด๋‹ค.

tables of contents

  • Control
    • Motor
      • Class Motor
      • MotorInterface.c
    • PID
      • Class PID
    • Sensor
      • Class IMUInterface
  • Network
    • network.c
    • protocol.c
    • Struct PACKET
    • TCP_Server.c
    • UDP_Server.c
    • Drone_Epoll.c
    • ctl.c

Superman/Control/Motor/MotorInterface.h

Class Motor

๋ชจํ„ฐ ์žฅ์น˜๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ํด๋ž˜์Šค. ๊ณตํ†ต๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.

์ƒˆ๋กœ์šด ์žฅ์น˜ ์ถ”๊ฐ€์‹œ ์ด ํŒŒ์ผ์„ include ํ•˜์—ฌ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•จ.

๊ฐ ํ•จ์ˆ˜๋“ค์€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ์žฅ์น˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„ค์ •.

Field Summary


private int speed

private int pin


Method Summary


public int init()

set up wiringPi enviroment

Returns

 - -1 : Error
 - 1 : OK

public int setPin (int pinNum)

Selecting Pin number using softpwm output

Parameters

- pinNum
- pin using pwm gpio

Returns

- -1 : Error
- 1 : OK

public void calibration()

Calbration for init setting ESC motor.

public void setSpeed (int value)

Setting speed

Parameters

- Speed value
- range (0 ~ 2500)

public void stop()

Stop drone



Superman/Control/Motor

MotorInterface.c

MotorInterface ์˜ ๊ตฌํ˜„๋ถ€๋กœ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ.

Motor.h ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์žฅ์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ ํ•ด๋‹น ํŒŒ์ผ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉ.

์ƒˆ๋กœ์šด ์žฅ์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ด ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉ.

Method Summary


public int Motor::init()

set up wiringPi enviroment

๊ณตํ†ต๋ถ€๋ถ„. wiringPi ์„ค์ • ๋ฐ ์†๋„ ์ดˆ๊ธฐํ™”

Returns

 - -1 : Error
 - 1 : OK

public int Motor::setPin (int pinNum)

Selecting Pin number using softpwm output

๊ณตํ†ต๋ถ€๋ถ„. ๋ชจํ„ฐ ์‚ฌ์šฉ ํ•€๋„˜๋ฒ„ ์„ค์ •.

Parameters

- pinNum
- pin using pwm gpio

Returns

- -1 : Error
- 1 : OK

public void Motor::calibration()

Calbration for init setting ESC motor.

๊ฐ ESC ์˜ ๋ฐ์ดํ„ฐ์‹œํŠธ ์ฐธ์กฐํ•˜์—ฌ Clibrate ์ฝ”๋“œ ์ž‘์„ฑ

public void Motor::setSpeed (int value)

Setting speed

๊ณตํ†ต๋ถ€๋ถ„. Range ๋ฒ”์œ„ ๋‚ด์˜ ์†๋„ ์ง€์ •

Parameters

- Speed value
- range (0 ~ 2500)

public void Motor::stop()

Stop drone

๊ณตํ†ต๋ถ€๋ถ„. ์†๋„ 0 ์ง€์ •



Superman/Control/PID/PID.h

Class PID

Field Summary


private float Kd

private float Ki

private float Kp

private float P_pid

private float I_pid

private float D_pid

private float P_err

private float I_err

private float D_err

private float dt

private float P_ pid_prev

private struct timeval start_point

private struct timeval end_point


Method Summary


public int init()

public void setTuning (float kd, float ki, float kp)

set pid constant for calculating

Parameters

- kp : p constant
- ki : i constant
- kd : d constant

public int calcPID (float aimVal, float inVal)

Calculation pid ( input to aim value )

Parameters

- aimVal : aim that we want tilt
- inVal  : current tilt

Returns

- int : integer value that motor power

public void initKpid (float kd, float ki, float kp)

changing pid constant during executing program



Superman/Control/Sensor/SensorInterface.h

Class IMUInterface

IMU์˜ ๊ธฐ๋ณธ์ ์ธ ํ•จ์ˆ˜๋“ค์„ ์ •์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ, ์ƒˆ๋กœ์šด ์„ผ์„œ๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ IMUInterface ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ์ฝ”๋”ฉํ•  ๊ฒƒ.

Method Summary


public int init()

์„ผ์„œ ์ดˆ๊ธฐํ™”, ์—ฐ๊ฒฐํ™•์ธ.

Returns

- 1  = ์—ฐ๊ฒฐ ์„ฑ๊ณต
- 0 = ์—ฐ๊ฒฐ ์‹คํŒจ

public void getIMUData (float *roll, float *pitch, float *yaw)

์„ผ์„œ์˜ Roll, Pitch, Yaw๋ฅผ ๊ณ„์‚ฐ.

public void calibration()

์„ผ์„œ offest ๋ณด์ •



Superman/Network/

network.c

network์˜ ์„ ์–ธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํŒŒ์ผ.

Method Summary


int network_init (int* tcp, int* udp)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

int json_read (int socket, double x, double * y, double * z, int * t)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

void json_write (int socket, double x, double y, double z, int t)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

int network_exit (int tcp, int udp)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

int tcp_read (int socket)

์„ค๋ช…

Parameters

- param1 :
- parma2 :


Superman/Network/

Protocol.c

network์˜ ์„ ์–ธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํŒŒ์ผ.

Method Summary


Packet string_to_struct (char* buf)

char array์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ packet๊ตฌ์กฐ์ฒด์— ๋„ฃ๋Š” ํ•จ์ˆ˜.

char๋ฅผ ๋ฆฌํ„ด ๋’ค์—๋„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, argu์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.

Parameters

- packet : buf์— ์ง‘์–ด๋„ฃ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” struct
- buf : struct์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” char

void struct_to_string (Packet packet, char *buf)

packet๊ตฌ์กฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ char array๋กœ ๋„˜๊ธฐ๋Š” ํ•จ์ˆ˜ char๋ฅผ ๋ฆฌํ„ด๋’ค์—๋„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, argu์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.

Parameters

- packet : buf์— ์ง‘์–ด๋„ฃ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” struct
- buf : struct์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” char

float ntohf* (float f)

floatํ˜• ๋ณ€์ˆ˜๋Š”, htonlํ•จ์ˆ˜๊ฐ€ ์•ˆ๋จน๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

Parameters

- f : byteorder๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ float

Returns

- host byte order๋กœ ๋ฐ”๋€ float ๋ณ€์ˆ˜

float htonf (float f)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

int endian_check()

network byte order์ธ์ง€ host byte order์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜

Returns

- 0 : 
- 1 : 

void print_buf (char* buf)

char array์˜ buffer๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ„ํผ

Parameters

- buf : ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

void print_packet (Packet packet)

์„ค๋ช…

Parameters

- packet : ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

void packet_swticher (Packet packet)

์„ค๋ช…

Parameters

- param1 :

int init_message (int socket)

init ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค flag==1์ผ๋•Œ,

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

void recv_control (int socket)

control message๋ฅผ ๋ฐ›๋Š” ํŒจํ‚ท

Parameters

- param1 :
- parma2 :

void send_status (int socket)

status message๋ฅผ ๋ณด๋‚ด๋Š” ํŒจํ‚ท

Parameters

- param1 :
- parma2 :


Superman/Network/Protocol.h

Struct _ PACKET_

Packet์˜ ๊ตฌ์กฐ.

Field Summary


uint8_t H

Header ๋ถ€๋ถ„์ด๋‹ค. 0xEE๋กœ ๊ณ ์ •.

uint8_t F

flag๋ถ€๋ถ„์ด๋‹ค. ์ด flag๋ฅผ ํ†ตํ•œ switch๋ฌธ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

uint16_t S

sequence ๋ถ€๋ถ„์ด๋‹ค. ์ถ”ํ›„์— ๊ฒฐ์ •ํ•  ์˜ˆ์ •์ด๋‹ค.

float X

control์‹œ์—๋Š” x์ถ•์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

float Y

control์‹œ์—๋Š” y์ถ•์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

float Z

control์‹œ์—๋Š” z์ถ•์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

uint32_t T

control์‹œ์—๋Š” thoughput์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

// ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” X,Y,Z,T๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์–ด๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.// -> ์–ด๋–ค ๋‹ค๋ฅธ ๊ฒฝ์šฐ? ์–ด๋–ค ๋ฐ์ดํ„ฐ? ์ž์„ธํ•œ ์„ค๋ช… ํ•„์š”..



Superman/Network/

TCP_Server.c

TCP_Socket์˜ ์ƒ์„ฑ๊ณผ ํ•ด๋‹น ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ฐ˜ํ™˜.

Method Summary


int CreateTCPServerSocket (unsigned short port)

ServerSocket์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ socket->bind->listen๊นŒ์ง€

Parameters

- port : ํ•ด๋‹น ํฌํŠธ๋ฒˆํ˜ธ๋กœ Tcp server socket์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

Returns

- -1 : socket ์ƒ์„ฑ ์‹คํŒจ
- 0 : bind error

int AcceptTCPConnection (int servSock)

CreateTCPServerSocket์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ Serversocket์œผ๋กœ acceptํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜

Parameters

- servSock : ServerSocket์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ

Returns

- ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋œ client์™€ 1:1๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” TCP์†Œ์ผ“ ๋””์Šคํฌ๋ฆฝํ„ฐ

int TCP_connect_init (unsigned short port)

CreateTCPServerSocket์™€ AccpetTCPConnection์„ ์ˆ˜ํ–‰ํ•ด, ์‹ค์ œ 1:1 ๋กœ client ์—ฐ๊ฒฐ๋œ ์†Œ์ผ“์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜.
DOS-project์—์„œ๋Š” ๋” ์ด์ƒ์˜ TCP server socket์ด ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์—, close๋ฅผ ํ†ตํ•ด ๋‹ซ๊ณ , 1:1๋กœ ์—ฐ๊ฒฐ๋œ ๋””์Šคํฌ๋ฆฝํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Parameters

- port: Server Socket์„ ์—ด๊ธฐ ์œ„ํ•œ port number

Returns

- ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋œ client์™€ 1:1๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” TCP์†Œ์ผ“ ๋””์Šคํฌ๋ฆฝํ„ฐ


Superman/Network/

UDP_Server.c

UDP_Socket์˜ ์ƒ์„ฑ๊ณผ ํ•ด๋‹น ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ฐ˜ํ™˜.

Method Summary


int CreateUDPServerSocket (unsigned short port)

UDP socket์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜.
socket์—์„œ bind๊นŒ์ง€.

Parameters

- port: ํ•ด๋‹น ํฌํŠธ๋ฒˆํ˜ธ๋กœ UDP server socket์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

Returns

- -1 : socket ์ƒ์„ฑ ์‹คํŒจ
- 0 : bind error

int UDP_connect_init (unsigned short port)

๊ธฐ์กด์˜ 1:1 ๋ฐฉ์‹์˜ UDP ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• ๋Œ€์‹  connected UDP ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋ฉด, UDP socket์— IP์™€ PORT๋ฒˆํ˜ธ๋ฅผ ๋ฏธ๋ฆฌ ์ž…๋ ฅํ•œ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์กด์˜ UDP ๋ฐฉ์‹์—์„œ๋Š” recvfrom์ด๋‚˜ sendto ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์— ๋ฐ˜ํ•ด, Conneted UDP ๋ฐฉ์‹์—์„œ๋Š” read, writeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์‹ค์ œ ์ฝ”๋“œ์˜ ํšจ์œจ์„ฑ๋„ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ, Connected UDP ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

Parameters

- tcp : getpeername์œผ๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ip๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
- port: ์ƒ๋Œ€ udp port๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

Returns

- ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋œ client์™€ 1:1๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” TCP์†Œ์ผ“ ๋””์Šคํฌ๋ฆฝํ„ฐ.


Superman/Network/

Drone_Epoll.c

EPOLL ํ•ด๋‹น ๋””์Šคํฌ๋ฆฝํ„ฐ ์ƒ์„ฑ๊ณผ, epoll์— ์†Œ์ผ“์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •๊ณผ, ๋Œ๋ฆฌ๋Š” ๊ณผ์ •

Method Summary


int epoll_init()

epoll ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜

Returns

- epoll ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

int epoll_run (int tcp1, int udp1, int udp2, int timeout)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :


Superman/Network/

ctl.c

socket์˜ ์„ค์ •๊ณผ ํ™•์ธ์— ๋Œ€ํ•œ ํ•จ์ˆ˜ ๊ตฌํ˜„.

Method Summary


void get_string_access_mode2 (int val, char* ret)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

int async_test (int fd, int flag)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

int change_mode (int socket)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

int sock_reuse (int socket)

์„ค๋ช…

Parameters

- param1 :
- parma2 :

Returns

- result1 :
- result2 :

โš ๏ธ **GitHub.com Fallback** โš ๏ธ