URDF를 Rviz로 하는 건 되게 쉬웠는데 물리엔진이 적용된 Gazebo에 올릴려고 하니 안되는게 많았다.
때문에 '문제발생 -> 검색 -> 시도 -> 해결'의 과정을 너무 많이 반복했고 또 되게 복잡하게 했다. 그래서 #14도 그렇고 정리하는게 너무 힘들었다.
그래도 막 찾고 시도하는 과정에서 많이 해결했다. (아직은 바로 시뮬레이션에 사용하기에는 너무 부족하다...)
일단은 현재 시점(21.10.14)기준까지 만든 것과 그간 발생했던 문제, 해결방식 기억나는대로 정리해본다.
1. Rviz에서 썼던 URDF 모델을 Gazebo용 launch로 실행시키니 모델은 뜨는 데 힘 없이 무너졌다.
sol>
Gazebo에서 URDF를 쓰기 위해서는 link, joint외에 transmission 태그를 URDF 파일에 추가해줘야 한다.
이 transmission 태그의 설정에 따라 joint의 구동과 control이 달라진다.
이는 아예 gazebo에 urdf를 적용하는 법을 몰랐을 때 생겼던 문제로 아래 2-1의 블로그 글을 보고 배우면서 해결되었다.
2-1. 강의 블로그(https://cafe.naver.com/openrt/21101)를 따라 갔는데 로봇이 계속 덜덜 떨리고 움직임을 못버티고 뒤집히거나 무너졌다.
2-2 로봇이 계속 진동과 함께 특정 방향으로 회전했다. -(로봇 자체가 회전한게 아니라 잘 서있는 상태로 바닥면을 미끄러진 것)
sol>
2번은 2개로 나눈 이유가 각각 따로 해결하긴 했는데 2-2해결법이 2-1의 해결법이었을 수도 있다는 생각이 들어서 같이 썼다.
2-1은 검색해보니 (https://answers.gazebosim.org//question/9156/problem-with-the-robot-model-moving-itself/), (https://answers.gazebosim.org//question/15454/how-to-prevent-model-from-moving-itself/)에서 PID(joint.yaml)이나 ODE값을 바꾸라고 했다.
이외에도 여기서 계속 막혀서 검색을 엄청했다. (검색한 사이트 다 기억못함) PID값도 계속 조사해서 바꿔보고 ODE값도 URDF에 태그를 추가해서 바꿔도 보고 했는데 도저히 해결이 안됐었다.
그러다가 transmission 태그의 hardwareinterface type 중 EffortJointinterface는 effort값(토크) 기반으로 joint를 control해서 pid값도 중요하고, 하튼 실제와 가깝지만 다루기 정말 어렵다는 내용의 글과 그래서 position기반으로 하는 PositionJointInterface를 쓰라는 글을 봤다.
후자는 pid값도 따로 안 넣어줘도 된다고 해서 PositionJointInterface로 URDF를 수정하고 그에 맞게 joint.yaml도 바꿔줬다.
아직 진동과 자세 불안정(joint를 움직이면 엄청 멀리 미끄러짐)이 있었지만 전에 비하면 아주 많이 안정적이었다.
2-2는 해결하려고 아랫다리(지면에 닿는)에 friction mu, mu2 태그도 넣고 질량도 키워보고, 아랫다리 모델링을 사각이 아닌 지면에 구로 닿게 하는 것도 해봤지만 도저히 해결되지 않았다.
문제 해결의 시작은 "왜 미끄러지는 게 랜덤이 아닌 특정방향(시계방향)과 일정한 속도로 발생하고 다리로 서있는게 아닌 다리를 하늘로 가게 눕히면 발생하지 않는거지??"의 의문에서 시작되었다.
생각해보다가 외부와의 상호작용에 의한 게 아닌 모델링 자체가 이상한 게 아닌가 해서 URDF를 다시 천천히 분석해봤다.
이 문제는 좌표축 설정이 gazebo와 inventor가 달라서 생긴 문제였다.
인벤터에서 가져온 stl모델은 높이를 y축으로 사용하지만 gazebo는 z축이 높이였다. 이 때문에 inertia값이 잘못 들어갔고 이 때문에 무게 중심이 한쪽으로 쏠려 계속 움직였던 것이다.
inertia값의 축만 제대로 바꿔주니 문제가 해결되었다.
여기까지가 발생했던 가장 큰 문제와 그 해결과정이었다.
여기까지했을 때 gazebo상에 urdf 모델이 성공적으로 올라왔고 정지 상태에서도 무너지거나 이상한데로 움직이는 것도 없었다.
이 이후는 해결 안한(못한) 문제다.
3. joint를 움직여 넘어지는 자세를 만들었을 때 모델이 되게 느리게 넘어짐
4. 바닥과의 마찰이 없음
----------------------------------------------------------------------------------------------------------------
사실 이 프로젝트도 형들이 시험떄문에 바쁘고 취업 준비하느라 1달 넘게 진행이 없어서 사실상 파토 상태이다.
>>파토가 확정되었다.
아쉽긴한데 마냥 시간 낭비도 아니였던게 로봇 제작 때 어떤식으로 이론을 접근하는지, 어떤 부품과 기술들이 있는지(realsense, IMU 등)을 약간이나마 배웠고 무엇보다 ros에 입문하는 계기 되었다.
중간에 파토났어도 얻은 게 많았던 프로젝트였다.
-------------------------------------------------------------
21.10.31 중간 시험이 대충 끝났고 앞으로의 계획을 적어보면
1. Quadruped의 3,4문제 해결하기 + Quadruped joint움직이는 node제작 ----> 프로젝트 자체 종결
2. 개인프로젝트로 ROS를 활용한 로봇팔(manipulator) 만들기
└Gazebo에 모델링 올리고 moveit도 적극 활용, 기구학-역기구학도 적용
일단 이정도다.
===============================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
===============================================================================
'팀 프로젝트' 카테고리의 다른 글
(비공개) C-2345 자세 제어 4족보행 로봇 #16(프로젝트 마무리) (0) | 2021.11.07 |
---|---|
C-2345 자세 제어 4족보행 로봇 #14 (Joint publish node 제작, URDF Gazebo에 올리기-정리X) (0) | 2021.09.19 |
C-2345 자세 제어 4족보행 로봇 #13 (ROS URDF, Xacro Turorial) (0) | 2021.09.06 |
C-2345 자세 제어 4족보행 로봇 #12 (ROS 13강-Manipulation, ROS기초 강의 完) (0) | 2021.09.04 |
C-2345 자세 제어 4족보행 로봇 #11 (ROS 10, 11강-모바일 로봇, SLAM, Navigation) (0) | 2021.08.29 |