전체 글 67

[Position Based Dynamics] 2. Related Work

이전 글에 이어서.. [Position Based Dynamics] Introduction [NMK* 05] 논문에서는 computer graphic에서 변형 가능한 물체를 시뮬레이션 하기 위해 사용되는 방법들에 대한 개요를 제공하였다. (e.g. mass-spring system, the finite element method, finite difference approaches) position based approach는 명시적으로 명명되거나 완전한 framework가 정의되지는 않았지만, 다양한 논문에서 일부는 등장하였다. [Jak01] 논문에서는 Verlet integrator(적분기)를 사용하여 position을 직접 조작하였다. 속도는 현재 위치와 이전 위치에 의해서 암시적으로 저장되기 때문..

[Position Based Dynamics] 1. Introduction

더보기 Abstract computer graphics에서 dynamic system 시뮬레이션에 대한 가장 대중적인 접는 방식은 힘 기반이다. 내부, 외부 힘이 축적되고 뉴턴 2법칙을 이용하여 이 힘으로부터 가속도를 계산한다. 시간 적분(time integration) 방식을 이용하여 속도를 계산할 수 있고, 이 속도를 통해 물체의 위치를 계산할 수 있다. 몇 개의 시뮬레이션 방식은 충격량(impulse) 방식을 이용하여 속도를 바로 계산할 수 있다. 이 논문에서 제시하는 방식은 속도를 계산하는 방식도 생략하여 바로 위치를 계산할 수 있다. 이 position based 접근 방식의 주요한 장점은 조작 가능성(controllability)이다. 따라서, 힘 기반 방식에서 일어나는 explicit int..

[Introduction] 속도장의 성질

유체는 많은 입자들의 집합체이기 때문에 하나의 입자를 관찰하는 것보다 전체 입자에 대한 해석이 더 유용하다. 즉, 유동문제는 유체의 성질을 위치와 시간에 대한 함수로 구하는 것을 목표로 한다. 속도장 3차원 상에서 전체 입자의 속도를 위치와 시간에 대한 벡터 함수로 표현한다면 다음과 같다. 3차원 상의 위치 x,y,z가 함수에 의해 시간 t에 따라 구해진다. 이 식은 다시 u,v,w에 의하여 다음과 같이 정의될 수 있다. 사실상, 속도를 결정짓게 되면 유동문제가 풀린 것과 같다. 이 속도장으로부터 다른 성질들이 직접적으로 구해질 수 있기 때문. 가속도장 가속도는 뉴턴의 법칙에 의해 속도를 시간에 대해 미분한 것이다. 벡터 함수로 표현한 위의 속도를 시간에 대해서 미분하면 연쇄법칙에 의해 다음과 같이 전개..

연구/유체역학 2024.02.21

[Introduction] 연속체로서의 유체

유체는 분자들의 집합체이다. 유체의 분자들은 격자 내에 고정되어 있는 것이 아니라, 유체를 이루는 공간 내에서 상대적으로 자유롭게 움직인다. 그러므로 유체의 임의의 어떤 부피를 이루고 있는 분자들의 수는 계속 변화한다. 따라서, 유체밀도(단위체적당 질량)은 정확한 의미를 가지지 않는다. 그러나, 이 분자수의 변화는 만약 단위체적의 크기가 크다면 중요하지 않게 된다. 왜냐하면 보고 있는 단위 체적의 경계에서 입자들이 엄청나게 출입해도 크기가 크기 때문에 체적 내의 분자 수는 거의 일정할 것이기 때문이다. 하지만, 이 단위 체적의 크기가 너무 커도 체적집합체의 변화가 두드러지게 나타날 수 있다. 크기가 너무 크면 한 체적집합체 내에서 밀도 차이가 클 수 있기 때문에, 체적을 너무 크게 잡을 때의 밀도는 제대..

연구/유체역학 2024.02.20

[Introduction] 유체의 개념

유체역학의 관점에서 볼 때 모든 물질은 유체와 고체 두 가지 상태로 되어있다. 이 두 가지 상태를 구분하는 방법은 여러가지 있지만, 접선응력(전단응력)에 대한 반응을 통해 공학적으로 구분할 수 있다. 고체는 정적 처짐으로 의해 전단응력에 저항할 수 있지만 유체는 그렇지 않다. 즉, 고체는 전단응력이 가해질 때 변형을 통해 저항하지만, 유체는 작용되는 전단응력이 아무리 작더라도 운동이 일어난다. 이 말은 정지하고 있는 유체는 전단응력이 0인 상태(유체정역학적 응력 조건)에 있다고 할 수 있다. 이를 위해서 정지 유체는 전단 응력을 없애기 위해서 지지벽을 필요로 한다 (비커에 담긴 물 등). 이 벽들이 압축응력을 발생시켜 유체의 전단응력을 0으로 만든다. 만약 이 벽들이 제거되면 유체 내에 전단응력이 발생하..

연구/유체역학 2024.02.19

RLlib에서 tensorboard로 결과를 visualize 하는 법

RLlib으로 학습을 시키고 난 뒤 학습이 잘 되었는지 확인하기 위한 방법으로 reward 그래프를 통해 reward_mean 그래프가 수렴하는지 확인하는 방법이 있다. 이 그래프는 reward를 저장해서 Matplotlib을 통해 그릴 수도 있지만, 따로 이런 작업을 코드로 추가하지 않고 tensorboard라는 것을 통해서 확인할 수도 있다. 학습 내용은 이전 글의 Driving 2d Car를 이용하였고, tensorboard로 학습 하는 것은 다음 영상을 참고하였다. 하지만, 이 영상은 tune을 이용하여 학습한 것을 확인하는 방식이라 조금 다른 것 같다. 학습 코드 : https://namhauk.tistory.com/13 tensorboard 사용법 : https://www.youtube.com..

연구/강화학습 2024.02.18

RLlib 기초 - 예제 (Driving 2d Car)

gym에서 기본으로 주어지는 Mountain Car Continuous 환경을 조금 변형하여 원하는 환경을 만드는 연습을 하려고 한다. 이 학습의 목표는 구부러진 하나의 길에서 자동차가 길에 충돌하지 않고, 시작 지점에서 도착지점까지 무사히 도달하는 것으로 한다. 실행하는 것은 비슷하기 때문에 환경을 만드는 것에 집중하면 된다. 학습된 실행 결과 환경 class를 만드는 데 핵심 요소는 init, step, reset 3가지 함수이다. 전체 코드는 마지막에 있다. Init init에서는 환경에서 사용할 변수들을 선언해주고, 매 step 실행할 수 있는 action의 범위와, state의 범위를 설정해준다. 이때, 어느 환경이던지 핵심적인 부분은 state, action_space, observation_..

연구/강화학습 2024.02.12

Mountain Car Continuous 환경

학습을 위해서는 환경이 있어야 하고, 학습 코드가 있어야 한다. 원하는 것을 학습시키기 위해서는 원하는 대로 환경을 만드는 것이 핵심인데, 처음 환경을 만들 때는 무엇부터 해야 할지 감이 잡히지 않는다. 이런 초보자들을 위해 gym에서는 여러 환경을 제공한다. 이 환경의 코드들을 뜯어보며 환경을 이렇게 만들면 되는구나 감을 잡고, 더 나아가 이 환경을 조금씩 봐꿔가보는 과정을 거치면 환경을 만드는 것에 익숙해질 수 있다고 생각한다. gym에서 예시로 나와있는 대표적인 예제인 Mountain Car Continuous에 대해서 간단히 정리해보려 한다. 이 예제에 대한 공식 문서와 github에 코드는 다음과 같다. 공식 문서 : https://gymnasium.farama.org/environments/c..

연구/강화학습 2024.02.03

Git hub 연결 (ssh 사용)

local에서만 하다가 랩실에서도 코딩을 하게 되면서 github를 사용하기로 했는데, 오랜만에 github에 들어가니 예전처럼 아이디와 비밀번호로 연결이 안되게 바뀌었다고 한다. 그래서 방법을 찾아보니 ssh가 가장 간편한듯하여 ssh를 통한 github 연결을 정리하였다. 이때, ssh 설정은 컴퓨터마다 해주어야 한다. 다음 글들을 참고하였다. https://docs.github.com/ko/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent, https://hankyeolk.github.io/2021/08/15/githubSSH.html 1. ssh key 생성 termi..

기타 2024.01.20

"헤더를 기다리는 중입니다" error 발생 시

apt-get install을 하던 중 설치되다가 중간에 "헤더를 기다리는 중입니다"라고 출력되면서 무한 로딩이 발생하는 문제가 발생하였다. 그래서 방법을 찾아보니 재부팅을 반복하다 보면 된다고도 하는데, 나는 3번 껐다 켰는데 안됐다. 다음 방법으로 다음을 terminal에 입력하고 다시 apt-get install 하니 나는 잘 되었다.sudo apt-get cleansudo rm -rf /var/lib/apt/lists/*sudo apt-get cleansudo apt-get updatesudo apt-get upgrade 살짝 허무하긴 한데, 혹시 나중에 세팅하다 같은 문제 발생 시 사용하기 위해 남긴다.이 링크의 방법을 참고하였는데, 안되면 다른 방법도 있으니 참고해보자https://askubu..

기타 2024.01.20