mw ahrs 데이터 수신 종류 문의 > Module_Forum

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

Module_Forum

mw ahrs 데이터 수신 종류 문의

페이지 정보

profile_image
작성자 조용진
댓글 8건 조회 1,660회 작성일 23-09-11 14:17

본문

구매한 Sensor: mw ahrs v2

사용 환경: 리눅스 우분투 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가지 데이터를 가져오고자 한다면 현재 코드에서 가능한 구조인가요?

댓글목록

profile_image

최고관리자님의 댓글

최고관리자 작성일

안녕하세요. 아이디어로봇(엔티렉스 부설연구소)입니다

다른 고객님께서 해당건에 대해서 말씀하셔서 개선된 드라이버 올려놓았습니다.

한번 확인해보시고 궁금하신 점 있으시면 말씀해주세요.

https://github.com/ntrexlab/2th_NtrexAHRS_lib_ROS/tree/230831

브런치 조심해주세요 : )

profile_image

조용진님의 댓글의 댓글

조용진 작성일

답변 감사합니다. 그런데 제가 헷갈리는 부분이 있는데요. 코드상으로는 데이터를 읽어온 뒤 ACC,GYRO,MAG,DEG에 따라서 스위치를 해서 해당 인덱스에 맞는 값으로 변환을 해주는 방식인데요. 그러면 제가 만약 가속도,속도,각도 데이터를 받아오려고 한다면 IMU는 해당 값을 번갈아가면서 저에게 전송을 해주는건가요? 매 시점마다 3개의 값을 모두 반환해주지는 못하는건가요?

profile_image

최고관리자님의 댓글

최고관리자 작성일

안녕하세요.

바이너리 형태에서는 13Byte 패킷으로 고정되어서 받기 때문에 한번에 받지는 못합니다.

텍스트로는 ss= 명령어를 사용하여 한번에 받는게 가능하지만

파싱및 데이터 안정성 때문에 ROS 드라이버에서는 바이너리로 받는 방식을 사용했습니다.

만약 한번에 받고 싶다고 하시면 문자열로 통신하시면 됩니다.

profile_image

조용진님의 댓글의 댓글

조용진 작성일

감사합니다. 혹시 문자열 통신에 대한 API나 예제코드는 따로 주어진 것이 있을까요?

profile_image

조용진님의 댓글의 댓글

조용진 작성일

또한 파싱 및 데이터 안정성을 위해 바이너리 방식을 사용했다고 하셨는데 이것은 ROS 기반에서 구동하기 위한 것인가요? 아니면 일반적으로 시리얼 통신에서 바이너리 방식이 안정성이 더 높은 것인가요? 만약 c++ 에서 텍스트 통신을 했을 경우에 예상되는 문제가 있는지 알고 싶습니다.

profile_image

최고관리자님의 댓글

최고관리자 작성일

안녕하세요.

로봇에 사용하는 각도 데이터라서 문자열이 문제를 일으키지는 않았지만

바이너리 패킷을 보면 [시작 패킷 .. 길이 .. CRC .. 끝 패킷] 이렇게 구성되어 있다보니

좀 더 신뢰성을 높이기 위해 선택했습니다.

라이브러리 형태라서 ROS뿐만 아니라 C/C++ 환경에서 구성이 가능합니다

예상되는 문제보다는 신뢰성, 편의성을 선택했다고 생각해주시면 감사드리겠습니다.

AHRS 메뉴얼에서 동기화 데이터 전송 목차를 보시면 문자열 패킷이 어떻게 구성되어 있는지 나오는데요.

참고하셔서 파싱에 참고하시면 되실 것 같습니다.

즐거운 개발 되세요 : )

profile_image

조용진님의 댓글의 댓글

조용진 작성일

답변 감사합니다. 만약 바이너리 방식의 API를 사용해서 가속도/속도를 받는다고 한다면 read를 할 때 한번은 가속도, 한번은 속도를 받는 것을 확인했습니다. 이 때 데이터 전송주기를 1ms로 설정했는데 첫번째 read로 가속도를 받은 뒤 1ms보다 짧은 간격으로 두번째 read를 한다면 센서는 어떤 값을 속도로 나타내나요?

profile_image

최고관리자님의 댓글

최고관리자 작성일

Timer (센서 데이터 융합) ----------------------------------- 주기 : 1000hz

처리 주기보다 짧아져서 저희가 그보다 낮아지면 안되도록 막아 놓았습니다.

모든 데이터를 받고 싶다고 하신다면 문자열로 하시는 것도 나쁘지는 않다고 생각이 듭니다.

회원로그인

회원가입