Q&A
 
작성일 : 17-07-18 22:32
[ 답변 ] 캔위성 본체 소프트웨어 관련 질문 ( IMU, GPS, SERVO )
 글쓴이 : 관리자
조회 : 107  
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);

추가적으로 데이터 처리과정에서( 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)로 수정 > > 어렵지만 열심히 제작 중에 있습니다. 감사합니다. >