본문 바로가기

분류 전체보기

(43)
Capstone Design. #1-1 생각한 것 만들어 보기 #Intro 4학년 1학기지만, 2학년 1학기 때 전과목 F를 맞은 나머지 21학점을 들어야 하는 난관에 부딪혀 아주 바쁜 학기가 됐었다. 그간 무엇을 했고, 또 그 속에서 얻은 게 다른 이들에게도 도움이 될 수 있을까 하는 마음으로 다시 글을 적어보려 한다. # 캡스턴 디자인 초안 아이디어를 생각하게 된 계기는 그냥 단순하게 쓰레기를 버리러 가기가 귀찮았다. 정말 너무 단순한 이유라 길게 설명할것도 없어 바로 본론으로 들어가고자 한다. 직관적으로 볼 수 있으니 패스 그림2는 이상적인 목표 수행을 그려보았는데, 처음에는 로봇 팔을 달아보는 것이 어떻냐는 교수님의 의견에 과거 여러 논문들을 찾아보며 스스로 임의의 위치를 클릭하거나 집는 행위가 굉장히 어렵다는 걸 알고 있었기 때문에, 로봇 팔은 제외시키기로..
Simulation to Real. #7 [Acrobot-IsaacGym : Inverted Pendulum Balance] #Intro 이전 글을 이어서 적는다. Solution 3 - tan 함수 (성공) sin도 제대로 학습이 안되는 거 같아서, 어떤 방법을 사용해야 할까 고민하던 찰나. sin그래프 아래에 tan그래프가 그려져 있었다. 생각해보니까 좌우 대칭에 안정적인 경사를 만들어 낼 수 있는 그래프지 않나 하는 생각이 머리를 스쳐지나 갔다. 그래서 바로 sin을 대체했다. 그리고 추가적으로 만약 θ가 π가 되면 그간 앞에서 걱정했던, 페널티 값이 하늘로 승천해 버리기 때문에 이 문제를 해결하고자, tan함수의 주기를 늘려주는 작업을 했다. 최대한 탐험의 범위를 넓혀 보고자 주기의 범위를 tight 하게 주지 않고 ± 4π 로 만들어 보았다. 만약 해당 범위까지 Acrobot이 회전하게 되면, 아예 초기화를 시켜버리는..
Simulation to Real. #6 [Acrobot-IsaacGym : Inverted Pendulum Balance] # Intro 이전 글을 이어서 적는다. Solution 2 - Sin 함수 (실패) ​0 ~ 1로, 그중 가장 친근한 방법인 sin과 cos으로 아이디어를 짜 봤다.. sin과 cos은 시작점만 다르기 때문에 그냥 sin으로 통합시켜서reward를 설계 해 보았다. 1. 단순한 페널티 설정 ​처음엔 reward의 숫자에만 관점을 두고 "reward 패널티를 어떻게 과감하게 설계할까?"를 생각해 봤다. 단순하게 1을 최대한 깎을 방법만 고려하고 마지막에 Total Reward를 계산하는 방식으로 문제를 접근했는데, Total Reward 수식을 쓰려고 할 때 앞선 reward 페널티의 값들을 보고 이건 뭔가 아니다는 걸 느꼈다. 물론 다른 radians값이 나올 때, 더 큰 숫자로 보상이 깎여 나가겠지만..
Simulation to Real. #5 [Acrobot-IsaacGym : Inverted Pendulum Balance] # Intro 오늘은 드디어 Simulation 상에서 나의 Custom Model 자세 제어를 할 수 있게 됐다. 일전의 FrameWork를 정리한 경험과 다양한 분들의 의견을 수렴하고 논문들을 들춰본 결과 이런 좋은 결과가 일찍 나올 수 있던것 같다. # Reward & Reset 일단 처음에는 있는 코드를 기반으로 FrameWork를 수정했다. 아래는 기존에 있던 CartPole 코드의 Reward 부분이다. 182번째 줄의 Reward는 자문해본 결과 reward 선정 방식과 reset에 대해 설명을 해주었다. 간단하게 풀어서 말하면 1. reward 선정 reward의 선정 방식은 NVIDIA에서 임의로 짰다고 한다. 자세한 설명은 해주지 않고 보상 1에서 제어하고자 하는 요소들을 (-) 요소로..
Simulation to Real. #4 [Acrobot-IsaacGym : rl-games] Intro 직접 Model 코드를 만드려고 했으나, Dynamic-Randomization부터 model등록까지 손이 가는 부분이 상당히 많았다. 그래서 NVIDIA에서 제공하는 rl-games Library를 사용해 보기로 한다. 처음 IsaacGym을 설치했을 때는 무슨 말인지 영 감이 안왔는데, framework.md 파일을 요약해 보고 다시 한번 쳐다보니 어느정도 이해가 된다. 일단 내가 보기 편하려고 사이트에 framework, Domain-randomization 요약본을 올려놓으려 한다.
Simulation to Real. #3 [Acrobot-하드웨어 만들기 ①] MODEL & SUPPORTER 일전에 모델을 만들고 나서, OSC로 간이 테스트를 해보니까 Rotary의 무게가 생각보다 많이 나가서 Motor의 기저부가 요동치는 모습을 보였다. 그래서 강철판 위에다가 고정시키기 위해, Motor Supporter를 제작하게 됐다. 23시간에 걸쳐서 Supporter가 제작이 됐는데, 3D Printer 오차를 고려해서 1.5mm 정도 내경을 더 키웠다. 그러고 나서 모터를 끼우는데 바로 뿌셔졌다. 그래도 FRONT_SUPPORTER는 나름 잘 들어맞아서 SUPPORTER 한 개만 써도 모델 자체의 반동은 잡을 듯하다. 모터의 앞부분 내경과 뒷부분 내경이 1mm 정도의 차이가 존재하는데, 3D 프린터의 오차를 고려해서 조이는 형식으로 설계한 것이 이런 부분에서 큰 도..
Simulation to Real. #2 [Dynamic-Randomization] Intro 일전에 만들어둔 모델은 프린팅 해서 완성을 시켰는데, 선이 걸리적거리는 문제가 생각보다 심각해서 해결하는 방안을 찾다가, Motor Base의 Frame부분을 새롭게 모델링하여 라인의 영향을 조금 줄이는 방향으로 Motor Case를 제작 중에 있다. 아마 평일에 학교에 가면 바로 제작 들어가고 그다음 날에는 완성본으로 소개가 가능할 것 같다. 자세한 내용은 추후에 모델이 완성되면 다시 언급하려 한다. 일단 새 Model을 만들기 이전에 흥미로운 주제의 논문을 발견해서 소개를 해보려 한다. KAIST에서 나온 최신 논문[1]을 기점으로 이론을 정리하고 Model에 집중하려는 중에 Reference에서 Sim-to-Real Transfer of Robotic Control with Dynamic..
Quadruped 공부 하고 싶다. #6-3 [Task1 - PPO: Cartpole with Pytorch③-3] #PPO with Cartpole in Pytorch Sim2Real을 하기 이전에, 어떻게 Env와 Agent가 소통을 하는지 직접적으로 코드를 짜서 구현해보는 Task를 진행해본다. 추후에 Isaac-Gym에서 이 부분을 커스텀하게 만들어야 하는데 굉장히 복잡할 거 같아서 좀 무섭지만, 그래도 부딪히고 볼 생각이다. 좌측에 Directory를 보면 우리가 일전에 구현한 PPO_torch.py와 이제 만들게 될 GYM_torch.py를 한 폴더에 넣어주고 from PPO_torch import Agent를 통해 파일을 불러온다. utils코드는 단순하게 성능지표를 png파일로 저장해주는 기능이므로 크게 다룰 것이 없다고 생각한다. Algorithm의 Structure를 위주로 설명해 보고자 한다. Op..
Simulation to Real. #1 [Acrobot Simulation-모델 만들기] #Intro 그간 열심히 이론을 공부하면서 어떤 DRL 방식을 최신 트렌드로 사용하고 있는지 또 어떻게 들어가는지 알아봤다. 근데 말로만 하면 솔직히 누가 못하나 직접 만들어보는 과정이 중요하다고 생각해서 Acrobot을 만들어 보려고 한다. 다른 명칭으로는 Two-inverted-Pendulum같은 말들도 있는데 OpenAI-Gym에서 사용되는 Acrobot이라는 명칭을 따서 만들어 볼 예정이다. 1. Observation Acrobot을 강화학습 할 때 필요한 요소는 6가지로 나타난다. 요약하면 우리가 필요한 정보는 첫 링크의 θ1과 중간 링크의 θ2의 정보가 필요하다. 첫 번째 joint는 Actuator를 사용해야 하므로, Motor로 만들고 두 번째 joint는 Rotary Encoder만 사용..
Quadruped 공부 하고 싶다. #6-2 [Task1 - PPO: Cartpole with Pytorch③-2] #PPO with Cartpole in Pytorch 일전에 이어서 올린다는 게 예약을 삭제로 했던 거 같다. 블로그를 정리하다가 지금에서야 발견해서 다시 써보려고 한다. 지난번 내용을 간략하게 정리하면, Algorithm을 완성시키기 위해서는 1. PPOMemory (Observated Data Processing) Simulation에서 Observation 된 6가지의 Data에 대해 읽고 버릴 필요가 있다. 그래서 해당 부분을 class PPOMemory를 통해 Data 저장, 추가, 삭제 만들어주었고 Deep-Learning을 위해 Batch function도 만들어준 것을 볼 수 있다. PPOMemory에서의 키워드는 두가지로 정리된다. DRL(Deep-Reinforcement-Learning..