모터 좌우 속도 차이 원인 및 SLAM 관련 문의 > STELLA_N1_Forum

본문 바로가기
사이트 내 전체검색

STELLA_N1_Forum

모터 좌우 속도 차이 원인 및 SLAM 관련 문의

페이지 정보

profile_image
작성자 엔스퀘어
댓글 3건 조회 69회 작성일 24-12-26 14:51

본문

STELLA N1 SBC 버전: Rasberry pi 4

REMOTE PC 버전: Ubuntu 22.04

ROS 버전: Humble

새로 받은 모터로 테스트 해보고 있는데 몇 가지 질문이 있습니다.

https://github.com/ntrexlab/STELLA_N1_PI_X4_PRO_ROS2_v2.0
 - 이 패키지로 사용중입니다.

1. 모터 속도가 다름
  - 원격 pc에서 teleop으로 전진 방향으로 속도를 0.01을 보냈을 때 로봇이 점점 오른쪽으로 회전하는 현상이 있습니다. 약 1미터를 이동하면 약 10도 틀어져 있었습니다. 이게 조립 문제인지 아니면 추가로 설정해야할 것이 있나요?

2. 모터 gain 값 수정
  - 1번의 이유로 매뉴얼을 보고 모터 gain 확인 및 수정을 하려고 했는데 양쪽 모터가 튀는 정도가 다르게 나왔습니다. 이게 영향이 있나요? 그리고 매뉴얼보다 더 많이 튀고 있는 것 같은데  gain은 어떤식으로 맞춰야 하는지 궁금합니다.

3. slam동작 이상
  - cartographer로 slam 동작 시 rviz화면에서 teleop으로 회전시키면 로봇이 잘 따라서 움직이는데 전진, 후진을 하면 로봇은 가만히 있고, 라이다 센서 보는 위치만 달라집니다. 확인해보니 odom 토픽의 position 값이 실제 이동 거리보다 훨씬 적게 변하고 있는데 이 이유는 무엇인가요?

첨부파일

댓글목록

profile_image

최고관리자님의 댓글

최고관리자 작성일

안녕하세요.

아이디어 로봇입니다.

1.
DC모터의 특성 상 제조사의 공정에 따라 오차가 발생하면 1번의 현상이 발생할 수 있습니다.

2.
gain을 수정하시려면 Motor Control UI에 모터드라이버를 연결하시고 Configyration에서 Gain을 수정하시려는 Motor의 Closed Loop Controller에서 값을 수정하실 수 있습니다.

값을 수정하신 후에는 Write Configurations -> Save to Flash -> Reset Controller 버튼을 순서대로 누르시고 값이 적용되었는지 확인하여 주시면 됩니다.

3.
영상을 확인해 본 결과 영상의 1분 5초에서 라이다 스캔 위치를 확인하여 보았을 때 로봇이 5초간 로봇의 길이 정도를 이동한 것으로 확인 됩니다.
cmd_vel으로 선속도 0.01을 주면 로봇은 초 당 1cm를 이동하여야 하는데 영상에서는 1초당 5~10cm 이동하는 것으로 예상됩니다.

바퀴 크기를 변경하였거나 엔코더를 계산한 값이 실제와 다른 경우 해당 문제가 발생할 수 있을 것 같습니다.
모터의 엔코더는 보내드리기 전에 양쪽 다 정확하게 들어오는 것을 확인하였기 때문에 엔코더의 문제는 아닐 것으로 예상되어
바퀴를 변경하지 않으셨다면 모터드라이버의 설정이 잘못되어 있거나 stella_md 패키지에서 하드웨어 사양이 다르게 입력되어 있을 수 있습니다.

문제를 확인하기 위해 STELLA_N1_PI_X4_PRO_ROS2_v2.0/stella/stella_md/mw/stella.cpp 위치에서 104~106번 줄의 기구학 세팅을 확인하여 다르게 입력된 부분이 있는지 먼저 확인하여 주세요.

해당 코드에 문제가 없다면 Motor Control UI에 모터드라이버를 연결하시고 Configyration에서
각 Motor의
Posirion Sensors
- Encoder
  - Encoder Resolution
값을 확인하여 주세요.

profile_image

엔스퀘어님의 댓글의 댓글

엔스퀘어 작성일

빠른 답변 감사합니다.
1.
 좌우 속도 다른 현상은 slam이나 nav2를 사용하는데 문제가 되지는 않나요? 혹시 문제가 된다면 어떤식으로 맞출 수 있나요?
2.
 gain 관련해서 이미지 보셨을 때 저 정도의 진동은 문제가 없을까요? 어느정도가 정상인건가요?
3.
 바퀴 크기를 변경하지는 않았습니다. 54000 포지션 이동 시 1바퀴 도는 것을 확인했습니다. encoder resolution 값도 54000으로 되어 있었습니다.
 Differential_MobileRobot_SetValue.axle_length  = 0.33;            // 바퀴간 거리            (m)       
 Differential_MobileRobot_SetValue.wheel_radius  = 0.0875;          // 바퀴 반지름            (m)       
 Differential_MobileRobot_SetValue.gear_ratio    = 27;        // 모터회전수 / 바퀴회전수  (감속비율)
 코드에는 이렇게 되어 있는데 잘못된게 있나요? 바퀴 반지름은 약 90mm이고, 바퀴간 거리는 330mm로 크게 차이나는 것 같지는 않습니다.
 더 확인해봐야 할 내용이 있을까요?

profile_image

최고관리자님의 댓글의 댓글

최고관리자 작성일

1.
매우 정밀한 모터를 사용하지 않는다면 모바일 로봇에서 모터 오차는 발생할 수 밖에 없습니다.
그렇기 때문에 slam이나 nav에서는 엔코더 값과 AHRS의 회전 값을 읽어 로봇의 위치를 예측하여 문제가 되지 않습니다.
만약 한 쪽 모터가 한 바퀴 돌 때 다른 모터가 다섯 바퀴 정도 돌 정도로 매우 큰 오차가 있다면 문제가 될 수 있지만 이 정도로 오차가 나는 경우는 모터가 불량이거나 기어비가 다를 가능성이 높습니다.

2.
사진에서 확인하여 보았을 때 5RPM은 매우 느린 속도이기 때문에 그래프에서 진동의 차이가 나긴 하지만 문제가 될 정도는 아닐 것으로 예상됩니다.
이전에 답변 드렸던 gain 수정 방법을 통해 gain값을 수정하시어 그래프가 비슷하게 나오도록 수정하시면 좀 더 정밀하게 주행할 수 있을 것 같습니다.

3.
54000은 기어비를 계산하여 한 바퀴의 엔코더 값을 계산한 값입니다. encoder resolution값은 2000이어야 합니다.

회원로그인

회원가입