mw ahrs 데이터 수신 종류 문의
페이지 정보
본문
사용 환경: 리눅스 우분투 20.04
개발 언어: c++
안녕하세요
c++ 기반으로 제공되는 api를 이용해서 데이터 취득을 하려고 합니다.
https://github.com/ntrexlab/STELLA_N2_PI_X4PRO_ROS2_v.2.0/blob/master/stella/stella_ahrs/mw/mw_ahrs.cpp 해당 링크를 참고해 작업중입니다.
그런데 rs-232 기반 통신을 할 경우 데이터 취득을 현재 코드상으로는 8바이트 변수를 통해 받아오는 것을 확인했습니다.
그런데 매뉴얼 상에서 rs-232 통신은 데이터 전송 종류를 ss란 변수로 변경이 가능한대요. 이부분이 코드 어디서 설정이 가능한건가요?
init을 할 때 int sel 이라는 변수로 추측을 하고는 있는데 정확하지 않아서 여쭤보고자 합니다.
또한 코드를 읽어보니 rs-232 통신은 텍스트 통신이 아닌 바이너리 통신으로 하고 있는 것 같았습니다.
매뉴얼 상에서는 바이너리 통신을 할 때는 13byte로 고정이 되는 것 같았는데 그렇다면 제가 ss 설정을 통해서 가속도/속도/위치 3가지 데이터를 가져오고자 한다면 현재 코드에서 가능한 구조인가요?
- 이전글MW-AHRSv1 아두이노를 통하여 사용하고싶습니다. 23.09.12
- 다음글mw ahrs 연결 오류 23.09.05
댓글목록
최고관리자님의 댓글
최고관리자 작성일
안녕하세요. 아이디어로봇(엔티렉스 부설연구소)입니다
다른 고객님께서 해당건에 대해서 말씀하셔서 개선된 드라이버 올려놓았습니다.
한번 확인해보시고 궁금하신 점 있으시면 말씀해주세요.
https://github.com/ntrexlab/2th_NtrexAHRS_lib_ROS/tree/230831
브런치 조심해주세요 : )
조용진님의 댓글의 댓글
조용진 작성일답변 감사합니다. 그런데 제가 헷갈리는 부분이 있는데요. 코드상으로는 데이터를 읽어온 뒤 ACC,GYRO,MAG,DEG에 따라서 스위치를 해서 해당 인덱스에 맞는 값으로 변환을 해주는 방식인데요. 그러면 제가 만약 가속도,속도,각도 데이터를 받아오려고 한다면 IMU는 해당 값을 번갈아가면서 저에게 전송을 해주는건가요? 매 시점마다 3개의 값을 모두 반환해주지는 못하는건가요?
최고관리자님의 댓글
최고관리자 작성일
안녕하세요.
바이너리 형태에서는 13Byte 패킷으로 고정되어서 받기 때문에 한번에 받지는 못합니다.
텍스트로는 ss= 명령어를 사용하여 한번에 받는게 가능하지만
파싱및 데이터 안정성 때문에 ROS 드라이버에서는 바이너리로 받는 방식을 사용했습니다.
만약 한번에 받고 싶다고 하시면 문자열로 통신하시면 됩니다.
조용진님의 댓글의 댓글
조용진 작성일감사합니다. 혹시 문자열 통신에 대한 API나 예제코드는 따로 주어진 것이 있을까요?
조용진님의 댓글의 댓글
조용진 작성일또한 파싱 및 데이터 안정성을 위해 바이너리 방식을 사용했다고 하셨는데 이것은 ROS 기반에서 구동하기 위한 것인가요? 아니면 일반적으로 시리얼 통신에서 바이너리 방식이 안정성이 더 높은 것인가요? 만약 c++ 에서 텍스트 통신을 했을 경우에 예상되는 문제가 있는지 알고 싶습니다.
최고관리자님의 댓글
최고관리자 작성일
안녕하세요.
로봇에 사용하는 각도 데이터라서 문자열이 문제를 일으키지는 않았지만
바이너리 패킷을 보면 [시작 패킷 .. 길이 .. CRC .. 끝 패킷] 이렇게 구성되어 있다보니
좀 더 신뢰성을 높이기 위해 선택했습니다.
라이브러리 형태라서 ROS뿐만 아니라 C/C++ 환경에서 구성이 가능합니다
예상되는 문제보다는 신뢰성, 편의성을 선택했다고 생각해주시면 감사드리겠습니다.
AHRS 메뉴얼에서 동기화 데이터 전송 목차를 보시면 문자열 패킷이 어떻게 구성되어 있는지 나오는데요.
참고하셔서 파싱에 참고하시면 되실 것 같습니다.
즐거운 개발 되세요 : )
조용진님의 댓글의 댓글
조용진 작성일답변 감사합니다. 만약 바이너리 방식의 API를 사용해서 가속도/속도를 받는다고 한다면 read를 할 때 한번은 가속도, 한번은 속도를 받는 것을 확인했습니다. 이 때 데이터 전송주기를 1ms로 설정했는데 첫번째 read로 가속도를 받은 뒤 1ms보다 짧은 간격으로 두번째 read를 한다면 센서는 어떤 값을 속도로 나타내나요?
최고관리자님의 댓글
최고관리자 작성일
Timer (센서 데이터 융합) ----------------------------------- 주기 : 1000hz
처리 주기보다 짧아져서 저희가 그보다 낮아지면 안되도록 막아 놓았습니다.
모든 데이터를 받고 싶다고 하신다면 문자열로 하시는 것도 나쁘지는 않다고 생각이 듭니다.