변수분리법

- 다음과 같은 상미분 방정식(변수 분리 가능 방정식)이 주어질 때, 양변에 x로 적분을 하고 정리를 하면 좌변은 y만 우변은 x만 나오며 이를 계산하여 일반해를 얻는 방법

변수 분리법을 이용한 예제

편미분과 전미분

- 편미분 : 다변수 함수에서 한 변수만을 다루고 나머지 변수들은 상수로 취급한 미분 

 -> 한 변수가 변할때의 변화율

- 전미분 : 다변수 함수에서 모든 변수를 동시에 다루는 미분

 -> 모든 변수가 변할때의 변화율

 

전미분과 완전미분방정식

- 함수 u(x,y)의 편도함수가 연속일때 이 함수의 전미분은 다음가 같고, u(x, y)가 상수인 경우 전미분은 0이된다.

- u(x,y)가 아래와 같이 주어진 경우 전미분을 구하고, 미분방정식의 형태로 만들면 완전미분방정식이 나온다.

- 이 완전 미분방정식 du = 0이므로 적분을 하여 일반해를 구하면 u(x, y) = c의 형태로 음함수해가 된다.

 

완전미분방정식이 되기 위한 조건

- 완전미분방정식은 전미분 du = M(x, y)dx + N(x, y) dy 의 형태가 되야 하며 M과 N의 편도함수가 같을때 성립한다.

 

 

 

완전미분방정시 아닌 경우와 적분 인자

- 아래의 식은 완전 미분방정식이 되지 않음.

- 1/x^2을 곱할 시 

- 적분인자 : 방금 완전미방이 아닌 식에 1/x^2을 곱하여 완전미방으로 만든 것처럼 곱한 함수 F(x,y)가 적분인자.

미분 방정식 differential equation

- 현실의 물리 현상을 미분을 통해 모형화 한 방정식

- 상미분 방정식 ode ordinary de : 변수가 한개인 미방

- 편미분 방정식 pde partial de : 변수가 여러개인 미방

- 모델링 : 공학, 물리학, 화학 등 여러 분야의 실제 현상을 수학적으로 계산할 수 있도록 표현한 모델

 

 

* 목표 : 현실 문제에서상미분 방정식을 유도(모델링)하고, 방정식을 풀고 그래프 시각화하여 해석하자

 

1계 상미분 방정식

- 2차, 3차등 고차 도함수가 아닌 1차/1계 도함수만을 가지고 있는 미분방정식

 

 

공학 문제와 모델링

- 공학 문제를 계산을 통해 풀려면 수학 모델로 만들며 이를 모델링이라 함

- 모델링에 미방을 사용하는 이유 ? -> 다양한 물리 현상들이 도함수(미분)을 포함하고 있음(ex:속도, 가속도)

 

 

상미분방정식과 편미분 방정식

- 상미방 : 하나의 변수 <-> 편미방 : 여러 변수

 

미분 방정식 활용 예시

- 낙하, 스프링에서 변위, RLC 회로 전류, 진자 운동

 

 

 

 

상미분방정식의 양형태, 음형태

- 양형태 explicit form : 모든 항을 좌변으로 옮김

- 음형태 implicit from : 도함수만 좌변으로 옮김

 

 

 

 

- 해 : 어느 함수 h(x)가 열린 구간에서 정의/미분 가능하며, 이 함수 h(x)를 만족하는 y

- 해곡선 : 해들의 곡선

- 열린 구간 : a < x < b에서 양 끝 a와 b를 포함하지 않는 구간

 

 

 

 

상미분 방정식과 해

- y' = cos x인 (음형태) 상미분방정식이 있을때, ode의 해는 y = sin x + C

- 일반해 general solution : 임의의 상수 C를 가지고 있는 해

- 특수해 particular solution :  임의의 상수 C를 특정값으로 할때의 해

 

 

 

특수해와 초기값

- 초기조건 : 특정 입력값에 대한 출력 -> 일반해에 대입해 임의의 변수 c 값을 구할 수 있다.

 => 초기조건을 통해, 해당 초기조건의 특수해를 구한다.(초기값 문제)

 

 

 

초기값 문제 예시

- y' = 3y, y(0) = 5.7일 때 특수해를 구해보자

 * y' = 3y : y를 미분했더니 y가 나온다 y는 지수함수의 형태다.

 * 구한 일반해에 위 초기조건을 대입하여 C를 구하

=> 특수해 y = 5.7 e^3x

 

 

해석적 방법과 수치적 방법

- 해석적 방법 : 직접 계산하여 정확한 해를 구함

- 수치적 방법 : 근사화를 통해 해를 구함

 

1계 ode의 기하학적 의미

- y' = f(x, y)를 기하학적으로 해석해보자

- 점 (x0, y0)을 지나는 위 ode의 해곡선은 y'(x0) = f(x0, y0)을 만족해야한다.

 -> 그래픽 or 수치해석적 방법으로 ode의 근사해를 얻을 수 있다.

 

 

 

상미분 방정식의 방향장 시각화

- y' = y + x라는 상미분 방정식이 주어질 때, (0, 1), (0, 0), (0, -1) 세 점을 지난다면

 -> 3개의 해곡선을 가지며, 세 해곡선과 해당 ode의 방향장은 다음과 같다.

* 뒤에 오일러방법 계산하다가 자꾸 값이 이상하게 나왔는데 일반해부터 잘못 구한거같다

 

오일러 방법 - 간단한 수치해석적 방법

- ode와 초기값이 주어질 때, x1 = x0 + h라면

  => y1 = y0 + h * y' = y0 + h * f(x0, x0)

- 간격 h가 작을수록 오차는 줄어든다.

- h = 0.2로 놓고 구한 근사값과 실제 특이해를 비교하면 오차가 점점 커지는걸볼수있다.

 

요즘 시퀀스를 공부하게 되면서

 

전동 드릴/드라이버 구경하다가

 

전기 회로에 사용할건 아니지만 신기하게 생긴 툴앤툴의 와우슬림을 찾았습니다.

 

 

 

팬 사이즈의 전동 드라이버라니 수동 드라이버만 쓰다가 왠건가 싶었죠

 

이거 말고도 샤오미나 다른 회사 제품들도 찾아봤지만

 

와우 슬림이 가성비 갑이기도하고, 다른 사은품도 준다고 하길래 구입했습니다.

 

 

 

 

배송온 와우슬림

 

 

딱 볼펜사이즈입니다.

 

 

 

보관 가방이 없는건 아쉽지만

 

제품 상자를 그대로 써도 괜찬을거같아요.

 

USB -C 케이블도 있고

 

 

 

 

 

 

실제 사용해본 영상입니다.

 

나중에 전자 제품 다룰때 쓰기 딱 좋아보이네요.

 

 

 

 

Tcl(tool command language)/Tk, tkinter

- Tcl :  웹, 데스트탑 어플, 네트워크, 테스팅 등 다양한 용도로 동적 프로그래밍 하기 좋은 언어

- Tk : GUI 라이브러리 제공하는 툴킷

- tkinter : Tcl/Tk 파이썬 레퍼로 tkinter 패키지로 gui 프로그래밍

 

 

1. tkinter window 관리 예제

- 윈도우 만들고, 크기 고정하고, X 누르면 메시지박스, iconify 버튼으로 아이콘화, quit버튼으로 종료

import tkinter
from tkinter import *
from tkinter import messagebox

global window

window = Tk()
window.title("window = Tk()")
window.geometry("300x300+100+100")
window.resizable(width=False, height = False)

def ask_quit():
    result = messagebox.askquestion("Msg", "quit?")
    if result == "yes":
        window.destroy()

label = Label(window, text="Buttons")
label.pack() # pack()윈도우에 배치
iconBtn = Button(window, text="iconify", command=window.iconify) #iconify 아이콘화
iconBtn.pack()
quitBtn = Button(window, text="quit", command=window.destroy)
quitBtn.pack()

window.protocol("WM_DELETE_WINDOW", ask_quit)
window.mainloop()

 

 

tkinter의 widget(window gadget) 클래스 

- tkinter의 위젯으로 frame, canvas가 있다.

- 하나의 윈도우에는 여러 프레임을 넣을 수 있다.

- 각 프레임에는 여러 캔버스를 넣을 수 있다.

- 각 캔버스에는 여러 라벨과 버튼 등의 위젯을 넣을 수 있다.

 

위젯 종류

- entry : 문자열 입력 공간

- scale : 슬라이드로 설정

- menu : 팝업 팝다운 메뉴

- 등

 

https://m.blog.naver.com/sisosw/221408280038

 

 

 

2. 윈도우 안에 프레임과 캔버스 그리기

import tkinter
from tkinter import *

window = Tk()
window.title("window - tk()")
window.geometry("600x600+200+100")
window.resizable(width=False, height=False)



frame1 = Frame(window, bg="light green", cursor="heart", bd=5, padx=10, pady=10, relief=GROOVE) #relief 프레임 기본 스타일
#relief : flat(기본), raised(버튼올린모양), sunken(버튼눌린모양), groove, ridge 등(대문자)
frame1.grid(row=0,column=0)
frame2 = Frame(window, bg="yellow", cursor="man", bd=5, padx=10, pady=10, relief=GROOVE)
frame2.grid(row=1,column=0)
frame3 = Frame(window, bg="yellow", cursor="plus", bd=5, padx=10, pady=10, relief=GROOVE)
frame3.grid(row=2, column=0)


canvas_11 = Canvas(frame1, bg="lime", width=100, height=100)
canvas_11.grid(row=0, column=0, fill=None, padx=10, pady=10)
canvas_12 = Canvas(frame1, bg="orange", width=150, height=100)
canvas_12.grid(row=0, column=1, fill=None, padx=10, pady=10)
canvas_13 = Canvas(frame1, bg="grey", width=100, height=100)
canvas_13.grid(row=1, column=1, fill=None, padx=10, pady=10)


canvas_21 = Canvas(frame2, bg="magenta", width=200, height=50)
canvas_21.grid(row=0, column=0, fill=None, padx=10, pady=10)
canvas_22 = Canvas(frame2, bg="brown", width=200, height=50)
canvas_22.grid(row=0, column=1, fill=None, padx=10, pady=10)
canvas_23 = Canvas(frame2, bg="sky blue", width=200, height=50)
canvas_23.grid(row=1, column=0, fill=None, padx=10, pady=10)

canvas_31 = Canvas(frame3, bg="light green", width=400, height=50)
canvas_31.grid(row=0, column=0, fill=None, padx=10, pady=10)
window.mainloop()

 

위젯 배치 layout

- 압축 배치 pack() : pack(fill=BOTH)  # fill= X, Y, BOTH  

- 격자 배치 grid() : grid(row=2, column=1)

- 절대 위치 배치 place() : place(x=200, y=200)

 

 

 

3. 압축 배치 연습

 

from tkinter import *

window =Tk()
window.title("testing pack layout")
window.geometry("400x300+100+200")



label1 = Label(window, text="label 1", bg="red", fg="white").pack(fill=X, padx=10, pady=10)
label2 = Label(window, text="label 2", bg="green", fg="black").pack(fill=X, padx=10, pady=10)
label3 = Label(window, text="label 3", bg="yellow", fg="white").pack(fill=X, padx=10, pady=10)

label4 = Label(window, text="label 4", bg="red", fg="black").pack(fill=X,padx=10, pady=10, side=LEFT)
label5 = Label(window, text="label 5", bg="green", fg="black").pack(fill=X, padx=10, pady=10, side=LEFT)
label6 = Label(window, text="label 6", bg="blue", fg="black").pack(fill=X, padx=10, pady=10, side=LEFT)

listbox = Listbox(window)
listbox.pack(fill=BOTH, expand=1)
L = [100, 200, 300, 400, 500]
for i in range(len(L)):
    listbox.insert(END, str(L[i]))

mainloop()

 

 

grid 함수

- column = 열, row = 행

- columnspan = 위젯이 차지하는 열 칸 수, rowspan = 위젯이 차지할 행칸 수

- in : 위젯이 놓일 위젯, 디폴트는 부모 위젯

- sticky : 위젯을 어떻게 붙일건지 디폴트는 중앙, NSEW는 셀 경계 딱붙인다.

 

entry 위젯 주요 함수

- focus() : 키보드 입력 가능하게 함

- bind() : 특정 이벤트시 실행 함수 바인드

 

 

 

 

4. 그리드 레이아웃과 엔트리 바인드

- window.bind()와 Button(command=())로 엔터키를 누르거나("<Return>"), 버튼누를시 fetch()함수 호출

 -> 엔터누르거나 fetch 버튼 클릭 시 fetch 함수대로 입력 데이터가 잘 출력된다.

from tkinter import *

def fetch(cells):
    print("- input data -")
    for i, e in enumerate(cells):
        print("  {0}:{1}".format(fields[i], e.get()))

def make_form(fields):
    cells = []
    for r, field in enumerate(fields):
        label = Label(window, width=10, text= field)
        entry = Entry(window)
        label.grid(row=r, column=0, sticky=NSEW)
        entry.grid(row=r, column=1, sticky=NSEW)
        cells.append(entry)
    return cells

if __name__ == "__main__":
    window = Tk()
    window.title("Input Dialog with label and entry")
    fields = ("Name", "Age", "Address")
    cells = make_form(fields)
    window.bind("<Return>", (lambda event, e=cells: fetch(e)))
    #엔터키 눌릴떼 람다식 호출 바인드
    #cells를 e에 담고 fetch 호출
    # 주의 : bind 함수 호출시 lambda 식 앞단에 인수를 2개해야한다.
    Button(window, text="Fetch", bg="green",
           command=(lambda e=cells:fetch(e))).grid(row=3, column=0, sticky=NSEW)
    # 버튼 눌릴때도 fetch(e) 호
    Button(window, text="Quit", bg="Red", command=window.destroy).grid(row=3, column=1, sticky=NSEW)
    print("grid size : ", window.grid_size())
    window.grid_columnconfigure(1, weight=1)
    window.grid_rowconfigure(0, weight=1)
    window.mainloop()

 

 

캔버스 객체의 함수들

- after(delay_ms, callback=None, *args) : 딜레이 타임 후 콜백함수 호출

- bind(sequence=None, func=None, add=None)  : 시퀀스 이벤트에 func 바인딩

- bind_all(csequence=None, func=None, add=None) : 모든 위젯에 func 바인딩

- bind_class(className, sequence=None, func=None, addd=None) : 해당 클래스 모든 위젯에 이벤트 func 바인딩

- create_image/line/oval/polygon/rectangle/text/window

- pos = canvas.coords(객체이름, pos) : 해당 객체 위치

- destroy() : 위젯과 객체제거

- mainloop() : 반복 시작

- quit() 반복 중지

- move(item, dx, dy) : 해당 아이템 객체를 이동

- update() 디스플레이 갱신

 

 

 

Event

- 버튼 : <Button-1>(마우스 왼쪽버튼 클릭), <Button-2> (마우스 휠 클릭), <button-3> (마우스 우클릭)

- 모션 : <Motion>(마우스 움직일때), <B1-Motion> 마우스 좌클릭채 움직일때, ...

- 위젯 동작 : <Configure> 위젯 모양 변경시, <Enter> 위젯안으로 마우스 들어갈때, <Leave> 위젯에서 나올때

- etc ...

 

 

 

 

5. 프레임, 캔버스 크기변경 이벤트 시 함수 호출

- 모든 위젯 크기 변경시 onsize 호출

- 그 중 위젯이 프레임일때 현재 크기반영해 라벨 변경

from tkinter import *

def onSize(event):
    if event.widget == frame: # 이벤트 호출된 위젯이 프레임인경우
        frame.update() # 라벨 변경전 갱신
        label_fr.configure(text="frame size: {}x{}".format(frame.winfo_width(), frame.winfo_height()))
        canvas.update()
        label_cnv.configure(text="canvas size: {}x{}".format(canvas.winfo_width(), canvas.winfo_height()))
    
    
if __name__ == "__main__":
    global label_Fr, label_cnv, frame, canvas
    window =Tk()
    window.title("finding frame and canvas size at resizing events")
    frame = Frame(window, bg="light green", bd=10, padx=50, pady=50, relief=GROOVE)
    frame.pack(expand=YES, fill=BOTH)
    canvas = Canvas(frame, bg="white", width=600, height=400)
    canvas.pack(expand=YES, fill=BOTH, padx=10, pady=10) #frame, canvas 양방향 조절 가능
    frame.update()
    label_fr = Label(canvas, text="frame size: {} x {}".format(frame.winfo_width(), frame.winfo_height()))
    label_fr.grid(row=0, column=0, sticky=N)
    canvas.update()
    label_cnv = Label(canvas, text="canvas size: {} x {}".format(canvas.winfo_width(), canvas.winfo_height()))
    label_cnv.grid(row=1, column=0, sticky=S)
    
    # <Configure> : 위젯모양변경시 이벤트 -> onSize() 호출
    # bind_all(컨피겨, func) -> 모든 위젯 크게 변경시 onsize() 호출 
    window.bind_all("<Configure>", onSize)
    window.mainloop()

 

 

 

 

+ 깃 로컬 저장소를 원격 저장소에 올리기

1. git init으로 깃 저장소 초기화

2. git add . 모든 파일 스태징

3. 커밋

 

4. git remote add origint 원격저장소 주소

5. git remote -v로 연결되었는지 확인

6. git push -u origit master 로컬 저장소 브랜치를 원격 저장소 master로 푸시(u는 지역과 원격 연결을 위해 한번만)

 

 

7. 깃헙에 잘올라갔다.

우리 나라 시중에 나오는 대부분의 프로그래밍 강의나 교재들은

 

기본서가 대부분이지 않나 무슨 언어 교재 하나 목차를 보면

 

언어 만들어진 배경, 변수, 타입, 함수, 객체, 상속, 파일 입출력 정도는 다 있고

 

여기다가 조금 더 +알파만 하고 끝나는게 대부분이더라

 

 

 

 

내가 우리나라 교재나 자료에서 너무 답답하던게

 

이런 기초적인 내용들만 가지고 파는 책들이 대부분이고

 

'프로젝트로 배우는 %#!$#'라면서 프로젝트 한다는 책을 보면

 

주사위 게임, 계산기, 크롤링해서 머신러닝 돌리기 같이 처음 언어 배우는 사람들에게야 연습하는데 도움되도

 

프로그래밍 기본적인 감각은 땟지만 실제 프로젝트 경험이 없는 나한태는 완전히 도움이 안된다고는 하기는 어려워도

 

그렇다고 그런 책들 보고 연습해서 준비해도 실제 경험해본 프로젝트니 포트폴리오라고 하기에는 민망한 내용들 밖에 없었다.

 

 

 

그냥 편하게 말하면 opencv를 처음에 빌드해서 쓰려고하는데 cmake로 경로 설정해서 makefile 만들고 어째저째진행했는데 cmake가 뭐고 makefile이 뭐고, 파이썬으로 opencv를 쓰면 파이썬 래퍼니 뭐니 하는것들을 제대로 설명해주는 책을 거의 보질 못했엇다. 파이썬에서 느린거 c/c++로 구현하면 그걸 어떻게 쓸수있게 햇냐.

 

 

내가 어디 박혀서 독학만 하느라 나만 모르는 걸수도 있지만

 

기본적인 내용 말고 실제 써먹을수 있는건 어디서 배우나 답답하던 차에 이책을 찾게 되었다.

 

이 책도 절반정도는 기본적인 내용이지만 절반은 너무 깊게 파고들지도 않으면서 기본서보다는 더 멀리 나간 내용들이다.

 

 

 

 

중간에 아는 내용도 많다보니 1 ~ 2시간 정도 쭉 봤는데,

 

thinker나 matplotlib까지는 보통 책들에도 자주 나오기는 하지만 실제로 뭔가 만드는듯한 예제들이 꽤 있고

 

동시/병렬처리 프로그래밍, 코딩 테스트에 관심없지만 공부하기엔 적당한 분량으로 자료구조와 알고리즘도 있다. 

 

 

특히 가장 마음에 드는 부분은 마지막에 사용자 정의 패키지/모듈 c/c++ 확장 모듈

 

이런 내용들까지 알려주는 프로그래밍 교재가 우리나라 책중에 이거말고 있는진 모르겠다.

 

 

 

 

우리나라 대부분 코딩 교재란게 클래스 만들고 조금만 더하고 끝나니까

오픈 소스봐도 빌드에서 막히고, 다른 뭔지도 모를 문제로 정말 삽질을 많이 했었다.

 

 

글만 잘 찾아보고 읽었어도 해맬 일이 훨씬 적었겠지만 그렇게까지 머리 좋지도 끈기도 없어서

이렇게 친절하게 이만큼이라도 알려주는 책이 있는게 어딘가 싶었다.

 

 

 

이책을 다 읽은지는 몇일 되기는 했는데

 

로봇 공학 개론 요약을 정리하느라 너무 미뤄버리다보니

 

이 책의 내용이 가물가물해졋다.

 

 

 

내가 왜 이책을 읽게 됬는질 생각해보면

 

처음 신호처리인가 제어공학인가 공부 할때 RLC 회로를 보게 됬는데

 

나는 전기전자를 전혀 배우지도 않은 상태다 보니 푸리에 변환이니 라플라스 변환이니 왜하는건지,

 

전달함수가 뭐하는거고, 시스템응답을 어떻게 구해서 이 시스템이 안정하는지 등의 내용을 따라가는것만해도

 

너무 벅찼었다. 그래도 이 내용들은 신호와 시스템, 제어 공학에서 한정되서 공부하면 됬지만

 

 

RLC를 처음봤을때 이게 뭔지도 몰랐고 (지금은 알지만) 전기 수동 소자에 대한 내용인 만큼

 

노베이스 상태에서 아무리 봐도 이해할수가 없었다.

 

 

이거 말고도 아 맞다 미분 방정식이 있었는데, 왜 미분 방정식으로 스프링이니 진자 운동을 표현해서 푸는지도

 

전혀 노베이스 배경지식이 없는 상태에서 공부하다보니 전혀 몰랐다.

 

아무튼 진자 운동을 미분방정식이 어떻고를 억지로 외워서 넘어가긴 했는데 시간 지나면서 다까먹었다.

 

 

 

 

그러고 시간이 지나서 미분 방정식이 뭐하는건지, 공업 수학이 뭔지에 대해서 그 당시보다는 조금 알게 되면서

 

공부하기는 해야하는데 막상 공업 수학 책을 펼 여유가 없다보니 한번 가벼운 마음으로 볼수 있는 책이 없을까 찾아보다가 찾은책이 이거다

 

 

 

최근에 전기 공부하면서도 스토크 정리, 가우스 정리 등에서 선적분, 면적분도 나오는데 시험에는 나오는 공식만 외우면 됬지 원리를 전혀 없이 이해 없이 공부했었다보니

 

마침 미적분을 공부해야되기도 했고, 미적분이랑 물리 사이에 어떤 연관이 있을지 조금 더 알고 싶어서 보게 되었다.

 

 

 

이 책 중간 중간에는 내가 아는 내용들도 꽤 많아서 금방 금방 넘어가면서 보긴 했는데

 

이 책의 장점이자 단점은 중요한 공식의 유도과정이 어떻게 되는지 일일히 설명해주는 부분이었다.

 

내가 고등학교를 안나오고 검시로 통과하면서 혼자 독학만 했지 제대로 배운적없는 삼각함수 사칙 연산 공식이나 삼각함수의 미적분같은 부분은 일일히 유도해주니까 어쩌다가 이런 공식이 나오게 되었는지 이해하기는 너무 좋았다.

 

하지만 이런 정리 과정들이 너무 많아서 옆에다가 종이 놓고 일일히 따라 적어가며 하는게 아니라 눈으로만 보면서 가니 너무 길어서 따라갈 수가 없었다.

 

아무튼 왜 중요한 공식, 요약, 정리가 유도되었는지 이해하는데는 정말 좋지만 한번에 다보기에는 좀 부담스럽긴 했다.

 

 

 

그리고 대망의 물리파트, 이책을 보기전에도 어쩔수 없이 미방에 대해서 잠깐 본적이 있긴 해서 다까먹기는 했지만 일반해 특수해 초기조건이 뭔지 정도는 기억하고 있었다.

 

물리 앞에서 부터 뉴턴의 운동 법칙을 미분 방정식으로 변형하고 해를 구해나가는 과정을 거치면서 물리 현상을 어떻게 예상해 내고 단순한 모델에서 다른 요소도 반영하고 직선 운동만 아닌 회전 운동에 대해서도 미방을 만들고 유도 과정들을 정리해 보면서

 

대학교에서 공업 수학이나 물리 수업을 전혀 들은적은 없었지만 왜 미방 미방 하는지는 전보다는 조금은 알겠더라

맨 뒷파트 부분은 뭐였는지 까먹었는데 눈으로만 보기에는 전혀 따라갈수가 없어서(필기해가면서 해도 힘들었겠지만) 그냥 간단하게 패스했다.

 

어짜피 다음에 공업 수학 공부할때 복습하면서 그 때가면 더 이해하겠지 싶다.

 

 

아무튼 이 책이 고등학교 대상으로 쓴 책이다보니 (대학교에서 배울법한 내용을 쓰기도하고, 쉽지는 않지만) 어떻게든 중간에 휙 뛰어나가는 거 없이 고민하거나 앞의 내용을 다시 보면 따라갈 수 있도록 신경 써준 부분이 좋았다.

1. 로봇 분류

- 매니퓰레이터 : 엔드 이펙터(로봇의 맨 끝 손가락 같은 부분)로 물체를 집거나 작업하는 로봇

- 이동 로봇 : 고정된 위치에 있는 매니퓰레이터와 달리 바퀴나 다리 등으로 이동하는 로봇

-> 구성요소, 좌표, 기구학, 동력학, 제어 시스템 등 전반에 대한 이해 필요

분류 로봇 종류 특징
구동법 전기식 간단, 저렴, 저출력 -> 과부하 x  , 깨끗, 정확, 편한 관리     - 회전 모터, 리니어 모터
유압식 복잡, 고가, 고출력 -> 과부하 ok, 오염, 고속, 관리 불편     - 큰힘이 필요할 때 사용
공기압식 복잡, 고가, 고출력 -> 과부하 ok, 깨끗, 부정확, 편한 관리  - 화재 위험 시 사용, 부정확 but 저렴
작업 공간 직교좌표형 쉬운 제어
원통형 직교좌표에 비해 기구학 설계 간단
원형 구조 간단
SCARA형 저렴, 빠름, 조립 작업에 이용
다관절형 최소 공간에서 최대 작업 
제어방법 서보제어 피드백을 통해 추종(servo). - 서보 제어 ex) 프린터, DVD, 카메라 등
비서보제어 피드백없이 입력 한대로 동작하는 경우 - 비서보 제어 ex) 선풍기, 믹서기, 환풍기
자유도 매니퓰레이터 6 DOF : x, y, z, roll, pitch, yaw
이동로봇 3 DOF x, y, theta

* 작업 공간에 따른 로봇 형태들

Scara형

* 이동 형태에 따른 분류

 

 

 

 

2. 로봇 구성 요소

- 매니퓰레이터, 엔드 이펙터, 구동기, 센서, 제어기 등

기구부 기계/기구 프레임, 바퀴(+바퀴 축), 베어링, 기어, 벨트, 엔드이펙터
HW부 전기/전자 SBC, 제어기, 전원부, 구동기, 센서
SW부 프로그램 펌웨어(모터/센서 제어), OS, 응용 SW

https://kingjjin.tistory.com/21

구성요소  
매니퓰레이터 구성 : 관절(조인트), 링크(관절 연결), 엔드 이펙트
동력 : 전기, 유압, 기압
조인트 : 직선 운동(primistic 조인트), 회전 운동(revolute 조인트)의 힘을 전달
엔드 이펙터
(말단 조작기)
매니퓰레이터 끝단에 설치된 작업 장치
ex) 그리퍼(열고 닫혀 손가락처럼 집음)
구동기 전기/유압/기압 등으로 로봇에 동작을 주는 모터/실린더 등의 장치
ex) 리니어 엑추에이터, 회전식 엑추에이터(대표적으로 모터)
* 하단에 모터 추가 정리
센서 물리량을 전기적인 신호(아날로그/디지털)로 변환하는 소자/회로 ex)광, 이미지, 초음파, 위치 센서 등
제어기 지정한 작업을 하도록 센서 측정 값으로 구동기를 적절하게 제어하는 장치

* 엔드 이펙터의 종류

http://www.aistudy.co.kr/robot/end_effector.htm

2.1 모터의 종류

- 로봇의 구동 장치로 사용

- 전원에 따른 모터 분류

전원 구분
DC 모터 소형, 고속, 큰 토크 부하에 따라 큰 속도 차, 어려운 속도 가변, 짧은 수명(브러시)
AC 모터 큰 토크, 저가,  쉬운 속도 가변 느린 회전

- 전원 및 구조에 따른 분류

1차 분류 2차 분류 3차 분류 특징
DC 모터 브러시 권선 큰 기동 토크, 토크 ∝ 전류 ∝ 1 / 회전속도(직권 : T ∝I^2 ∝ 1/n^2)
<-> 브러시에 의한 노이즈, 수명 저하 등 손실
타여자, 직권(무부하 운전시 위험, 속도-토크 큰변화:전차), 분권(정출력, 무여자 운전 시 위험), 복권(가동 복권 , 차동 복권 : 수하 특성)
속도 제어 : 계자제어(정출력 제어), 전압(광범위), 저항 (효율x)
* 전압 속도 제어 : 워드레오너드(전압제어), 일그너(플라이휠, 큰부하)
영구자석
브러시리스
(BLDC)
트랜지스터 - 브러시, 정류자 x -> 긴 수명(마모 x)
- 반도체 소자로 통전/정류하며 노이즈 발생 x
- 브러시 모터와 특성은 같으나 효율은 약간 저하
싸이리스터

AC 모터
유도 모터 공통 - 고정자로 생성한 회전 유도 자계로 회전자를 회전
- 간단, 저렴, 튼튼, 경부하에선 효율이 낮음
단상 유도 - 단상이라 회전 자계 x -> 기동 토크 x -> 혼자 회전 x
  => 외력(보조 권선, 기동 권선으로 기동) -> 토크 발생 -> 회전
- 반발기동(DCM와 비슷한 권선과 정류자, 가장 큰 기동토크), 반발 유도(회전자 권선 2개, 큰 기동토크/속도변화), 콘덴서 기동(콘덴서를 삽입해 주권선과 보조권선 사이 회전자계 발생, 중간 기동토크), 분상기동(위상 다른 두 전류로 기동, 적은 T), 셰이딩 코일(가장 작은 기동T)
3상 유도 - 단상 유도M보다 간단,소형, 보통공장용, 소용량 농형/대용량 권선형
농형(다람쥐바퀴) : 회전자튼튼,좋은운전성능,큰기동전류 
권선형 :  슬립링통해 2차저항으로 기동제어, 회전자권선으로복잡, 큰기동토크, 대용량
동기 모터 단상 동기 회전자(영구자석), 동기 속도, 역률 1, 큰힘, 속도변화어려움 
3상 동기
유니버셜 모터 직/교류 모두 사용, 큰 기동 토크, 쉬운 고속 회전 <-> 큰 노이즈, 짧은 수명
서보 모터 회전형 DC 서보 DC모터와 유사하나 엔코더를 통한 피드백을 통해 정교, 자동제어
AC 서보
스태핑 입력 펄스 신호 수로 회전 각도, 주파수로 회전속도 제어
리니어 모터 모터 회전 -> 선형

 

* 직류 전동기 부하 전류와 속도/토크 특성곡선

https://m.blog.naver.com/cwi1125/221160052987

* 모터 종류



DC 모터

BLDC 모터 - 브러시 대신 다이오드/TR이용


단상 유도 전동기 - 스스로 기동 못해 보조 권선 이용

3상 유도 전동기 - 고정자의 회전 자계로 회전

유도모터, 동기모터 비교 - 동기 모터는 자석의 토크로 회전

유니버셜(만능) 모터 - 교류원을 정류 후 사용

스태핑모터, 서보모터 비교 - 서보모터는 엔코더 위치 정보를 폐루프로 받음

스테핑 모터 - 펄스 신호 형태에 따라 제어

리니어모터 - 회전 운동을 직선 운동으로 변환

 

 

 

 

2.2 센서 종류

- 사람과 센서 시스템 비교(신호 전달 방향 ->)

사람 외부 환경 오감 신경 동작
센서시스템 외부 환경 센서(변환기) 전송로 처리기 엑츄에이터

 

- 센서 종류와 특징

검출대상 - 광센서 : 가시광선, 적외선, 자외선 등의 빛을 처리 가능한 양으로 변환하는 센서 -포토 다이오드(광 기전력 효과), Cds 셸(광도전 효과 : 반도체에 빛이 닿을 때 전자와 정공 증가 -> 전류 증가), 광전관, PSD 등
- 이미지 센서 :  CCD(전하결합소자), CMOS(상보 금속산화막 반도체를 이용한 액티브 픽셀센서)

- 온도(적외선) 센서 : 접촉형 - 작은 물체/원거리/고속 이동물체 측정 힘듬, 짧은 수명, 2000도까지,
                            저항 변화, 열전 현상이용 -> ex) 저항온도센서, 써미스터, 열전대, 바이메탈
                           비접촉형 : 작은 물체/원거리/고속 이동물체 측정 가능, 긴수명, 고온측정가능,
                            측정 대상의 적외선 측정 ->작은 크기, 높은 정확도, 디지털 출력
                           ex) 적외선 온도센서, 광 온도계 
 * 적외선 센서 : 적외선으로 온도, 압력, 방사선 등 물리량 측정

- 자기센서 : 자기 효과를 이용해 전기 신호를 만들거나, 바꾸기 위한 변환역활
 * 홀 효과(브러시리스 모터 회전 제어, 자계/전류 측정), 자기저항효과(포텐셜 미터), 자기저항효과(MR효과- 자기 인코더)

- 압력센서 : 스트레인게이지, 압전소자, 코일스프링 (기계식, 전자식, 반도체식, 실리콘 등)
- 근접 센서 : 자기, 광학, 초음파, 유도성, 용량성, 와전류 등을 이용
- 위치 센서 : 포텐셔미터(가변저항-직선/회전형), 엔코더(회전/선형 증감형, 절대위치형), 리졸버, 시간변위센서 등
- 진동(음파) 센서 : 세라믹스, 마이크로폰, 초음파 센서 등
* 초음파 센서 : 20kHz이상주파수이며 강한 지향성을 가진 초음파로 거리,두께, 움직임 검출 -> 거리/두께 측정, 비파괴 검사, 의료진단, 신호 처리 등(공중/수중/고체/특수환경용)
- 바이오 센서 : 생체 화학/미생물 반응 등으로 측정하는 센서 - 미생물/효소/나노바이오센서
- 그 외 : 가스 센서, 습도 센서 등
재료 반도체 센서, 세라믹 센서, 금속 센서, 미생물 센서
작동형태 능동 센서, 수동 센서
출력형태 아날로그 센서, 디지털 센서 등

* 센서 정리


cds 센서 -빛에 의해전류량 변화(광도전)

포토다이오드-빛이셀때역(광)전류증가

CCD - 필터가 해당 색상만 통과시켜 세기 측정, 모자익이미지 취득 ->처리후 사진

써미스터 - 온도에 따른 저항변화

홀 효과 - 전류가 흐를때 전도체에 수직으로 자장이 걸릴때, 전류와 자장에
수직하게 홀전압이 걸리는 현상 

홀 효과를 이용한 회전속도 측정
- 두 자석이 회전 시 홀 효과 센서에 전압이 걸릴때 측정


스트레인 게이지
- 압력을 전기 출력으로 변환하는 로드셀을 이용한 압력 센서

초음파 센서 - 발진기 -> 변조 -> 트리거 -> 수신 -> 측정 -> 출력

회전/선형 증감 엔코더-빛카운팅


절대 엔코더-그레이코드에 따라 각표시

 

2.3 제어기

- 지시된 작업을 할 수 있도록 구동기를 제어하는 장치 ex) 시퀀서, MCU

 

 

 

원래 욕심같아서는 좌표계, 기구학, 동역학 같은 내용들도 하고는 싶었지만 너무 양이 많기도 하고

대학으로 따지면 몇과목을 들어야 하는 로봇공학, 전기기기, 제어기, 센서 등의 내용을

한번에 볼수 있게 10페이지도 안되게 간단하게 나마 정리한거에 만족해야지.

이번에 본 책은

 

GS인터비전의 로봇공학개론

 

 

 

 

그 동안 내가 로봇 공부한다고 하면서 웃긴 점은

 

제어 공학이나 기구학 동역학, 전기전자 공부하면서 모터 같은것들은 그때 그때 부분적으로는 봤었지만

 

지금까지 한번도 로봇 공학 개론에 대한 책을 본적이 없었다.

 

 

 

그래서 로봇에는

 

매니퓰레이터가 있고, 이동 로봇이 있고

 

구동부니, 카티지안, 원통 좌표계, 병진 회전 운동 같은 내용들을 공부해서 간단하게 나마 알고는 있긴 했지만

 

 

 

로봇 공학이란 한 주제에서 다 같이 정리해서 보질 못하니까

 

내가 뭘 알아야하는지 뭘 모르는지조차 잘 모르고 있었다.

 

 

 

 

그러다가 yes 24 북클럽 책을 보던 중에 로봇 공학 책이 있었는데,

 

 

내용은 로봇이 부엇인지 부터 구성요소, 구동계나 센서, 기구학, 동역학, 비전의 내용들을 등 폭 넓게 소개하고 있다.

 

 

책 이름부터가 개론인 만큼 아주 어려운 내용도 없고 (그렇다고 쉽다고 할수 있는 내용은 아니지만)

 

로봇이 어떤 구성으로 되어있고, 무엇을 알아야 하는지에 대한 갈피는 잡을 수가 있었다.

 

 

 

기구학, 동역학 같은 부분은 직접 적어가거나 ROS에서 시뮬레이션으로 돌리는게 좋긴 하다보니 

 

 

간단한 개념만 보면서 대강 훌터봤다.

 

 

 

 

 

아무튼 우리나라에 판매중인 로봇 공학 서적이 그렇게 많지 않지만

 

특히 로봇의 구동부, 제어부에 사용되는 모터나 다양한 센서들의 특징과 원리들을 폭 넓게 정리한 부분이 좋더라

 

 

다른 로봇 공학 관련 책 목차들을 쭉 살펴 봤는데

 

오가와 코이치의 키초 로봇 공학은 매니퓰레이터를 중심으로,

 

정슬의 로봇 공학은 이동로봇을 중심으로,

 

도용태의 로봇공학의 이해는 기구학,동역학, 정역학, 행렬 변환 등을 중점적으로

 

하고 있던데

 

 

 

이렇게 목차에서 하나의 주제로 많이 차지하는 책들은

 

깊이 있는 만큼 처음 공부하는 학생들에게는 지치기도 쉽고, 어려울것 같다.

 

 

이 책의 경우에는 로봇 분야를 처음 공부하고자 하는 학생들에게는

 

여전히 어려울수 있지만 다른 책들에 비해서 조금은 얕더라도 넓고 밸런스 있어보인다.

전기 시험을 준비하면서 계속 알고리즘 공부를 할 생각을 하고 있었다.

 

예전에 공부했던 칼만 필터, 경로 계획, 탐욕법 등

 

 

 

공부 할 당시에는 어떻게든 컨셉 까지는 이해했지만 직접 구현할수 없었던 내용들

 

그래서 찾은 책이 헤먼 자인이 쓴 '실전 대비 C 알고리즘 인터뷰'인데, 

 

내가 코딩 인터뷰를 준비하려는 건 아니지만 자료 구조 구현이나 내가 관심있는 알고리즘 구현 내용들이 꽤 있었다.

 

 

 

이 책 ebook을 구입하고 보기 직전에, 앞선 글에 적다시피 yes24 북클럽 한달 무료 체험을 시작하면서

 

볼만한 책을 찾아보고 있었다.

 

 

앞의 글에서는 yes24 북 클럽에 볼만한 공학 서적이 별로 없다고 적긴 했지만 sam에 비해 적은 것이지 한번 봐야되겠다 싶은 책들은 꽤 있었는데

 

 

지금 거의 다 읽어가는 '물리가 쉬워지는 미적분 - 처음 만나는 물리수학책'과

 

오늘 다읽은 건 아니지만 볼만큼 본 'Do it! 지옥에서 온 문서 관리자 깃&깃 허브 입문' 등이 있었다.

 

 

 

Do it! 지옥에서 온 문서 관리자 깃 깃허브는

 

책 이름에서 보이다 시피 프로그래밍 공부한 사람이라면 한번쯤 봤을법한

 

생활 코딩의 이고잉님이 쓰신 책이다.

 

 

 

 

이 책을 읽기 전에도 여러번 깃을 쓰기전에

 

이글 저글을 많이 보기는 했는데

 

사람들이 아무리 깃의 컨샙이든지 용어든지 사용방법을 알려줘도

 

직접 쳐보지를 않으니까 이게 무슨 소리인지 이해하는데 정말 어려움이 많았었다.

 

 

 

 

내가 다른 git 책을 보지 않다보니(번역이나 남이 쓴 글만 봄) 다른 책도 비슷할거라고 싶지만

 

깃을 설치하고서부터 깃 배쉬로 실제 프로젝트를 만든건 아니지만

 

간단한 파일을 만들고 수정하면서 깃의 기능들을 사용하니까

 

확실히 글만 읽고 이게 뭔소린가 싶던게 전보다는 이해가 잘되더라

(전에 여러번 깃에 대해서 본게 있어서 그렇기도 해도 직접 치면서 까진 못했었다)

 

 

 

 

이 책에서는 git add니 커밋이나 로그 찍고 깃에 사용되는 기능, 명령어들을 저장소 만들때마다 계속 반복하면서

 

reset 같은건 다른 명령어에 비해 자주 쓰진 않아서 기억에는 덜 남더라도

 

commit, add, log, status, branch, checkout, init 같은 아주 기본적인 명령어는 확실하게 연습할 수가 있었다.

 

 

 

뒤에 원격 저장소에 대한 내용도 있긴 했지만 전에 깃허브 데스크탑을 쓰면서 대강 뭔 내용인지는 아니

 

직접 쳐보는게 좋긴해도 중간까지만 봤다.

 

 

 

깃에 대해서 글만 읽어서 이해안되는 사람들에게 직접 연습하면서 이해하기에는 아주 좋은 책이라 생각된다.



전기 기사 시험을 준비하면서 많이 느꼇던건

 

자꾸 마음이 급해져서 문제만 풀다보니

 

문제 풀기 관성에 그만 이론 공부 책보기가 너무 싫어졌었다.

 

문제 하루 이틀 연습할 시간에 집중해서 이론 책만 제대로 읽어봤어도 이런식으로는 떨어지지 않았을텐데

 

아쉬우면서도 공부하는 중간에도 책 몇번 읽으면 될 걸 알면서도 문제 풀기가 너무 벅차니까

 

안 그래도 문제 풀기도 싫어 죽겠는데 책 보기는 더 싫더라

 

 

 

 

그렇게 정신없이 영양가 없는 삽질만 하는게 꼭 예전에 대학원 생활 때랑 뭐가 다른가 싶었다.

 

쓸때없는 짓에 채력 낭비해서 정작 필요한 공부에는 신경쓸 여유도 없게 만들면서 사람 바보만드는 

 

 

 

 

아무튼 어영부영 전기 시험 준비하면서 그런 생각을 하다보니

 

책읽는 습관을 들이는게 너무 급하게 느껴졌었고, 이제 시험 끝난 후 볼 여유가 생겼다.

 

 

 

 

올해 시험이랑 목표한게 있어서 그 방향으로 책을 봐야지 싶었는데

 

도서관에 가서 책 빌리고 매번 반납하기가 너무 번거로웠다.

 

 

 

 

얼마전에 수업 교재를 ebook 하나 구매해서 쓰고 있었는데

 

이게 종이책 들고 다닐 필요없이 너무 편하더라.

 

 

 

나도 전에는 종이책 파 였지만, 가방에 책받침, 노트북이 들어가면 책이 2~3권 밖에 들어가지 않다보니까

 

무게도 무게지만 내가 필요한 책들을 다 가지고 다니지도 못했었는데

 

ebook으로 사면 태블릿 하나에, 구매하거나 빌린 모든 책들을 다 그냥 가지고 다니고 필요할때 볼수 있으니까 좋긴좋다.

 

 

 

 

 

 

아무튼 전에 교육청이나 시에서 운영하는 ebook 사이트에서 필요한 책이 있느 봤지만 에세이 같은건 많아도

 

내가 자주 보는 공학 서적같은건 잘 없었다.

 

그렇다보니 ebook을 구입하기에는 돈이 부담되니 구입해야하는건 어쩔수 없더라도

 

가능한 빌려볼 수 있는 서비스가 어떤게 있나 찾아보니까

 

 

 

교보문고의 sam 요금제와 yes24의 북클럽이 있었다.

 

두 요금제의 가장 큰 특징이라 하면

 

교보문고의 sam 베이직은 이용권 1개 가지고 6개월 씩 볼수 있고, 대여 가능한 책이 많다(yes24 북클럽보다 많아보인다)

            (sam 무제한의 경우 sam 무제한으로 표기된 모든 책을 볼수있지만 베이직에 비하면 볼 수 있는 책이

            훨씬 적어서 에세이는 몰라도 공학 서적은 sam 베이직도 적은데 sam 무제한은 더 적다.)

 

yes24의 북클럽은 한 달 요금제를 납부하면 북클럽에 등록된 모든 책을 읽을 수 있지만 나한태 필요한 책은 그렇게 

            많지는 않지만 그래도 한달에 2-3권 이용권 받아서 보는 sam에 비해 모든 책을 볼수 있는게 좋더라.

 

  교보문고 sam yes24 북클럽
요금제 sam 베이직
- sam 2(7000원, 이용권 2개)
- sam 3(9900원, 이용권 3개)
- sam 2 연간 이용권(6만원, 매달 이용권 2개)
- sam 3 연간 이용권(7.8만원, 매달 이용권 3개)

sam 무제한
- 연간 이용권
* yes24 북클럽과 비슷하지만 sam 베이직에 비해 볼수 있는 책이 적다.
스탠다드 55(5500원에 모든 책)
프리미엄 77(7700원에 모든 책 + 할인 포인트)
특징 이용권 1개 당 책 1권 6개월 대여  북클럽 제공 모든 책 대여 가능
나한태 장점 공학, 자연과학 책이 많다. 북클럽에 등록된 책은 다 볼수 있다.
단점 이용권으로 대여하다보니 한번에 볼수 있는게 적다 보고싶은 공학, 자연과학 책이 많지는 않다.

 

두 사이트다 처음 이용시 한달간은 무료나 1000원에 이용가능하도록 되어있는데

 

체험 삼아서 둘다 써보니 괜찬은것 같다.

+ Recent posts