R1mini imu 센서 데이터 받아오는 방법?

안녕하세요

로봇에 imu 센서가 있던데 센서의 종류가 무엇인지 그리고 데이터를 받아오고 싶습니다.

그리고 로봇에 어디에 위치에 있나요???

감사합니다.

센서 위치는 아래 그림을 참조해주세요,

이 센서는 6축 IMU 센서입니다.
자이로와 가속도계를 기준으로 Roll, Pitch, Yaw 값을 산출합니다.
지자기가 없는 6축 IMU 이므로 자북이 아닌 초기 위치를 기준으로 회전가속도를 누적하여 회전량을 검출합니다.
따로 TF를 전송하지는 않고 sensor_msg로 publish 하는데 현재 ROS melodic을 사용하시나요?

네 melodic 사용하고 있습니다.

imu 데이터는 roll, pitch, yaw로 출력됩니다.
/pose 토픽을 확인해보세요.
/pose/orientation 항목에서 x, y, z 축 각도가 출력됩니다.

답변 감사합니다. 그러면 저 값들은 오일러 값인가요???

값 확인했습니다 ^^ 테스트만 남았네요 ㅎㅎ

안녕하세요. imu 센서 중 acc, gyro 값을 받아보고 싶어서 파일 확인 중에 질문드립니다.

omo_r1mini_bringup / nodes / omo_packet_handler.py 파일 에서

PacketHandler class 에서 함수 parsar 가 rawdata 를 읽고 replace,split 하여 robot_state list 에 넣어준다고 이해 하면 될까요???

매번 바쁜 시간 내어 답변해주셔서 감사합니다.

가속도 센서를 사용하시려면 코드를 일부 수정해야 합니다.

omo_r1mini_bringup/nodes/omo_r1mini_node.py
안에 다음 부분을 변경하시면 됩니다.

self.ph.incomming_info = ['ODO', 'VW', "POSE", "GYRO"]

총 5개의 파라미터를 요청할 수 있으므로 아래와 같이 수정하면 됩니다.
self.ph.incomming_info = [‘ODO’, ‘VW’, “POSE”, “GYRO”,“ACC”]

그리고 publish msg도 같이 추가하셔야 정상적으로 받아올 수 있습니다.
그런데 업데이트 주기가 25ms 정도로 제한되어서 용도에 부족할 수 도 있습니다.

가속도, 자이로 값을 확인을 하였습니다.

가만히 있을 때 같은 IMU 센서를 I2C 통신으로 받아볼 때는 ACC: 1480 -140 13384 GYRO: 115 98 -99 값이 들어오는 데 R1MINI 로봇에서 받아 볼 때는 ACC:0.08, 0.06, 3.9 GYRO: 0.0, 0.0, 0.0 값이 들어옵니다.

이 둘의 차이가 나는 이유가 궁금합니다.

IMU센서의 값은 매우 잡음이 많은 데이터입니다.
그래서 raw 데이터는 자세 추정에 바로 적용하기 어렵습니다.

R1mini 내부에는 필터링 알고리즘이 적용되어 노이즈를 제거한 데이터를 출력합니다.

노이즈 필터링된 데이터로 Madgwick Filter 사용해보았을 때 자세 추정 (Roll,Pitch,Yaw) 이 잘 됩니다.

다만 로봇 의 R,P 에 대해서 움직였을 때 값이 변하는 현상이 있습니다. 아마 필터링된 데이터가 input 으로 들어가기 때문으로 예상됩니다. 그리고 필터링 되지 않은 데이터를 사용했을 때는 정상적인 R,P,Y 자세가 잘 나옵니다.

항상 답변 잘 해주셔서 감사합니다.

r1mini에서 출력되는 acc, gyro 데이터로 필터링을 하셨나요?
raw 데이터를 r1mini periodic 메세지로 받아오면 주기가 비교적 길어서(약 50ms)
자세 추정에 쓰기에는 좀 어려운데 잘 되었다니 궁금하네요.
혹시 구현하신 내용을 공유해주시면 참고가 되겠습니다.

r1mini 의 acc, gyro 데이터로 madgwick filter 를 python 으로 구현하여 사용했습니다.
동영상 업로드가 되지 않아 이미지로 보여드립니다.

z축 회전은 teleop 로 회전 시켰을 때 이미지이고
두번째 이미지는 로봇을 왼쪽으로 기울였을 때 이미지 입니다.
마지막 이미지는 다시 원위치 시켰을 때 이미지 입니다.

따른 로봇에서 mpu6050 의 raw data를 사용했을 때 roll,pitch 회전을 하고 원위치 시켰을 때 tf가 틀어지지 않는 것을 보아 데이터가 필터링 되었는지 의 차이 인 것으로 보입니다.

z 우측 회전
image

x 90
image

다시 원점 : 문제점
image

혹시 mpu6050 raw data를 받아올 수 있는 방법이 있나요? ( 필터링 되지 않는 데이터 )

raw데이터를 받아오기 위해서는 내부 펌웨어 수정이 필요합니다.

그리고 raw데이터를 받아오더라도 실제 내부에서 처리되는 주기인 1kHz 정도의 속도로 시리얼 데이터를 처리하기 어려우므로 유의미한 데이터라고 보기 어렵습니다.
꼭 필요하시다면 별도의 imu 센서를 장착하시는걸 권해드립니다.