matlab/Simulink AX-18A 모터 3개 제어 관련 문의

안녕하세요, Matlab/Simulink와 Raspberry pi4, U2D2, AX-18A 모터 3개를 제어하기 위해 연구하고 있습니다.

Matlab add-on의 Raspberry pi hardware support package를 활용하고 있습니다.

  1. 현재 AX-18A 모터 3개의 Baud Rate는 115200 bps
    Status Return Level = Return for read
    → 모터의 현재 위치 정보만 받기 위해서 설정 했습니다.
    모터 ID는 2,3,4로 설정 하였습니다.

  2. Dynamixel SDK 라이브러리를 사용하지 않고, protocol 1.0 통신 규격을 준수하며 알고리즘을 작성하였습니다.
    → goal_position : [255, 255, motorID, Len, write(3), address(30), goal_position data(0x??, 0x??), checksum)
    → read present position : [255, 255, motorID, Len, read(2), address(36), position length(2), checksum]

이 두 가지 명령어를 3개의 모터에 입력하여 현재 위치를 모니터링 하고 있습니다.

스크린샷 2023-07-18 160344

Matlab/Simulink의 matlabfunction에 코드를 작성하고 add-on의 시리얼 write를 불러와

[motor1_goal_pos, motor1_present_pos, motor2_goal_pos, motor2_present_pos, motor3_goal_pos, motor3_present_pos,] 을 보낸 결과 아래 사진처럼 데이터가 전송 되었습니다.

goal_position에 값은 변경하며 3개의 AX-18A의 위치가 변경되는 것을 확인하였고, Serial read 부분을 통해 데이터를 받았더니
스크린샷 2023-07-18 160620

정상적으로 데이터가 수신되기는 하지만, motorID 2,3,4 중 2번 데이터가 들어오지 않습니다.

혹시 해당 문제에 대해 조언을 주시거나 제가 변경 및 확인해야 할 사항이 있는지 알려주십시오.

혹시 추가적으로 정보가 필요하다면 추가 댓글로 말씀드리겠습니다.

감사합니다.

p.s : Serial에 데이터를 보낼 때 packet의 순서가 따로 있을까요? 예를 들면, [goal_position1, goal_postion2, goal_position3, present_position1, present_position2, present_position3] 이나 혹은 [goal_position1, present_position1, goal_postion2, present_position2, goal_position3, present_position3] 등과 같이 보내는 규칙도 있는지 궁금합니다. serial read를 할 때 영향이 있는거 같기도해서요.

p.s2 : serial read로 받은 데이터는 위에 따르면 1x24로 발생하게 됩니다.
255,255 헤더로 시작해서 각 모터id별로 8자리의 값 3개가 나오는데, 헤더로 시작하지 않고 중간부터 시작되는 쉬프트가 일어나는 경우의 원인은 어떤게 있을까요? serial read의 sample time과 모델의 step-size와 관련 있다고 들은 것도 같습니다.

안녕하세요.

위자드2.0의 패킷에서도 정상적으로 데이터가 나오는지 확인을 해주세요.

따로 데이터를 보낼 때 정해진 순서는 없습니다.

감사합니다.