[노드 제작2]
이전에 sensor_msgs/Imu메시지로 보내는 것에 실패해서 이번에는 그냥 Float32MultiArray로 값만 보낸 후 노드를 하나 더 거쳐서 sensor_msgs/Imu에 data를 채우는 방식으로 코딩을 했다.
이 과정에서도 좀 헤매었고 아래 글들을 참고해서 아두이노 코드를 완성했다.
https://stackoverflow.com/questions/69649792/how-to-publish-int16multiarray-from-rosserial-arduino
How to publish Int16MultiArray from rosserial arduino
I am trying to publish an Int16MultiArray for the ros package mecanum_drive: https://github.com/dudasdavid/mecanum_drive My issue is that I cant seem to publish the array from my arduino. (I am using
stackoverflow.com
https://answers.ros.org/question/10988/use-multiarray-in-rosserial/
use MultiArray in rosserial - ROS Answers: Open Source Q&A Forum
use MultiArray in rosserial edit Hi All Can we use std_msgs MultiArray in rosserial? I'm trying following code, but it doesn't work. The topic has no data. We are using rosserial of revision 133:db62c6309a50 tip. Does anyone have suggestion? #include #incl
answers.ros.org
성공적으로 아두이노에서 보낸 가속도값(0,1번), 각속도값(2,3번)을 subscribe했다.
다만 첫 연결 때는 실패하고 이후 재시도에서 rosserial이 연결되는 현상은 해결하지 못했다.
이는 일단 기능에는 큰 지장을 주지 않으니 추후에 해결할 예정이다.
+)추측 :
mpu.begin()후 mpu가 initialize 하는 단계에서 아무런 데이터를 내보내지 않기에 ros가 이때는 연결이 안 되었다고 판단하는 게 아닌가? 이후 initialize가 끝나면 ros가 재연결 시도할 때 성공하는 것으로 추정
이후 Float32MultiArray로 전달된 가속도와 각속도 값을 sensor_msgs/Imu 형태로 변환해서 publish하는 노드를 파이썬으로 만들었다.
성공했다.
+)★중요 :
위의 코드를 보면 가속도, 각속도 외에도 header에 현재 시각과 frame_id를 넣어줬는데 처음에 시도할 때는 이들을 넣지 않았었다.
이렇게 하니 여러 아래의 문제가 생겼었다.
1. 이후 사용할 imu_complementary_filter 노드가 orientation을 publish 할 때 값이 계속 변하는 게 아닌 같은 값만 계속 출력했다,
2. rqt의 plot으로 가속도와 각속도를 시각화해도 시간축이 멈춘 상태로 하나의 세로 직선만 나타났다.
3. 이후 사용할 imu_tools의 rviz_plugin을 사용해도 정상적으로 작동하지 않았다.
'노드를 만들 때는 꼭 해더를 넣어줘야 한다'는 것을 배웠다....
이제 마지막으로 mpu6050에서 받은 값을 complementary filter 노드를 통과시켜서 우리가 필요로 하는 기울기(orientation)를 얻었다.
추가로 imu_tools를 이용해 시각화된 데이터도 보았다.
움직임은 잘 잡아내지만 처음에 기울어진 상태로 나오므로 조정이 이후 필요할 것 같다.
rviz에서 보는 방법은 처음에 설치한 imu_tools의 rviz_plugin을 이용하면 된다.
1. rviz를 실행 후 Fixed Frame을 sensor_msgs/Imu의 헤더에 입력한 frame으로 바꿔준다. (나는 imu라고 했다.)
2. Add -> rviz_imu_plugin -> Imu를 추가해준다,
3. Imu에서 Topic을 complementary_filter를 통과한 topic으로 바꿔준다. (따로 바꾸지 않았다면 /imu/data 일 것이다.)
일단 이렇게 imu의 데이터를 성공적으로 ros로 가져왔다.
========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================
'개인 프로젝트' 카테고리의 다른 글
2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #6 (0) | 2022.08.10 |
---|---|
2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #5 (0) | 2022.08.05 |
2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #3 (0) | 2022.06.20 |
2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #2 (0) | 2022.06.02 |
2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #1 (0) | 2022.05.21 |