[ 답변 ] 캔위성 본체 소프트웨어 관련 질문 ( IMU, GPS, SERVO )
페이지 정보
본문
1. Cansat_2016_ALL_With_SD_MSG 파일을 가지고 설명하겠습니다.
1-1) 전역 변수입니다. ( 단 프로그램에서 선언한 이후부터 사용 가능합니다. )
1-2) gps_data 에 쌓이는 데이터는 ?
hyGsp_RecvByte() 함수에서 보시면,
"$GPGGA,..... " 형태의 데이터를 쌓아 놓고 있는 것을 알 수 있습니다. ( 프로토콜 관련 처리 참조하시면 되요 )
이 값을 이용해서 time_sec 에 설정하는 것을 볼 수 있습니다.
1-3) imu_data 에 쌓이는 데이터는 ? ( 프로토콜 참조, 여러개 설정 가능 )
hyImu_RecvByte() 함수에서 보시면
'*' 로 시작해서 '\n' 또는 '\a' 까지의 데이터를 저장하는 것을 알 수 있습니다.
이를 해독하려면 ',' 를 찾아서 해독하는 방법을 쓸 수도 있을 겁니다.
( ex, sscanf(&imu_data[1],"%f,%f,%f",&a1,&a2,&a3) ),
arduino 에서는 메모리 부족으로 힘들 수도 있겠죠.
2. Cansat_2016_ALL_With_IMU_SERVO 파일 ( #if 1 ... #else 사이 코드 )
2-1) 에서 한 줄을 받은 후에
1> v_roll 을 계산하는 부분이 있고, ( srrrr.rr, ) 처리 (x)
2> 건너뛰는 부분이 있고 ( spppp.pp, ) 처리 (y)
3> v_value 를 계산하는 부분이 있습니다. ( syyyy.yy ) 처리 (z)
4> 적당히 계산한 값을 이용하여 v_roll 을 이용하여 방향 처리 if( 90 < v_roll ) ...
코드를 잘 활용하면,
1> X 축의 값은 (v_roll) 을 이용하시면 될 거고요,
2> Y 축의 값은 spppp.pp 처리 부분을 X 축 처리하는 것처럼 사용하시면 될거고요 ( v_pitch 선언 )
3> Z 축의 값은 syyyy.yy 처리한 v_value_0 를 v_yaw 를 선언해서 사용하시면 될 겁니다.
2-2) void hyCANSAT_SERVO_OPERATION() 함수에서 보면
csServo[0].write(v_value); csServo[1].write(v_sign); 라고 쓰여 있으므로
원하는 장소에서 v_value, v_sign 을 설정하시면 될 겁니다.
코드 상에서는 hyImu_RecvByte() 함수에서 IMU 데이터를 다 읽고, 3개 데이터중 중간값으로 설정하고 있습니다.
v_sign = FILTER_MID_3(v_sign_0,v_sign_1,v_sign_2) ;
v_value = FILTER_MID_3(v_value_0,v_value_1,v_value_2);
v_value = FILTER_MID_3(v_value_0,v_value_1,v_value_2);
추가적으로 데이터 처리과정에서( srrrr.rr, )
_srrrr.rr, > srrrr_.rr, > srrrr.rr_, ( _ 까지 처리하고 있다고 표시하고 있다는 주석을 달고 있습니다. )
>
>
> 안녕하세요, 슬기부 <태연한 다람쥐>입니다.
> 캔위성 본체 소프트웨어에 대해서 몇 가지 질문이 있습니다.
>
> 1. 센서 데이터 처리
> 1-1) gps 센서나 imu 데이터를 처리하고 싶은데 gps_data와 imu_data가 global variable인가요? 따로 함수를 부를 필요 없이 imu_data[0]로 바로 부를 수 있나요?
> 1-2) 그리고 gps_data는 $GPRMC,112320.000,A,3622.3375,N,12721.9571,E,0.03,0.00,010212,,,D*61 이렇게 생긴 배열이 맞나요?
> 1-3)imu_data는 어떤 배열인가요?
>
> 2. CANSAT_2016_ALL_With_IMU_SERVO.ino 확장
> 위 소프트웨어에는 IMU 센서의 z축 데이터만을 가지고 서보모터를 돌리는데 만약에 z축 뿐만 아니라 다른 데이터 또한 반영하고 싶다면 코드의 어떤 부분을 고쳐야 하나요? 제가 이해하고 있는 바는
> 1) d0과 d1에 전송할 각을 계산하는 함수 생성 --> 근데 코드를 보니깐 #if 1 다음에 이런 계산 내용이 쓰여 있는데 왜 그런 건가요?
> 2) hyCANSAT_SERVO_OPERATION 함수에 csServo[0].write(1에서 계산한 d0)로 수정
>
> 어렵지만 열심히 제작 중에 있습니다. 감사합니다.
>
- 이전글캔위성 본체 소프트웨어 관련 질문 17.07.17
- 다음글본선 경연대회 운영 시 17.07.13
댓글목록
등록된 댓글이 없습니다.