Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

모바일 기기에서 각속도 데이터와 방향 데이터 수집 및 플로팅하기

이 예제에서는 Android™ 또는 iOS 모바일 기기에서 여러 센서의 데이터를 한 타임라인에 함께 플로팅하는 방법을 보여줍니다. 각속도와 방향의 측정값은 기기에서 수집되어 절대 시간에 대해 플로팅됩니다. 이를 통해 두 센서의 데이터 간 상관을 실제 측정 시간을 기준으로 시각화할 수 있습니다.

모바일 기기 설정하기

MATLAB®에서 모바일 기기로부터 데이터를 수신하려면 모바일 기기에 MATLAB Mobile™ 앱을 설치하고 설정해야 합니다.

MATLAB Mobile 설정에서 MathWorks® Cloud에 로그인합니다.

모바일 기기에 대한 연결 만들기

MATLAB Mobile의 명령 화면에서 mobiledev 명령을 사용하여 모바일 기기를 나타내는 객체를 만듭니다.

m = mobiledev;

출력에 mobiledev 객체가 앱에 대한 연결을 성공적으로 설정했음을 나타내는 Connected: 1이 표시되어야 합니다.

여러 센서에서 오는 데이터 수집 준비하기

적절한 mobiledev 속성을 사용하여 기기의 센서를 활성화합니다.

m.AngularVelocitySensorEnabled = 1;
m.OrientationSensorEnabled = 1;

데이터 수집 시작하기

센서를 활성화하면 MATLAB Mobile의 센서 화면에 센서가 측정한 현재 데이터가 표시됩니다. Logging 속성을 사용하면 센서 데이터를 mobiledev로 보내기 시작할 수 있습니다.

m.Logging = 1;

이제 기기가 센서 데이터를 전송합니다.

기록이 시작되면 화면을 위로 한 상태로 기기를 테이블 위에 평평하게 둡니다. 각속도 센서의 양의 Y축은 기기의 상단을 향하는 것으로 정의되어 있습니다. 방향 센서의 양의 롤은 Y축의 양의 방향을 향할 때 Y축을 중심으로 시계 방향으로 회전하는 것으로 정의되어 있습니다.

기록하는 동안 기기의 Y축을 중심으로 위를 향하게 했다가 아래를 향하게 하도록 기기를 몇 차례 돌립니다. 그러면 각속도의 Y축에 변화가 생기고 이에 따라 방향의 롤에도 변화가 생깁니다.

데이터 수집 중지하기

Logging 속성을 다시 사용하여 기기가 mobiledev로 센서 데이터를 보내는 것을 중지하도록 합니다.

m.Logging = 0;

기록된 데이터 가져오기

mobiledev 객체에서 각 센서의 데이터에 액세스할 수 있습니다. 기기에서 각속도 데이터와 방향 데이터를 동시에 기록하지 않을 수 있기 때문에 두 가지 다른 타임스탬프 변수가 생성됩니다.

[av,tav] = angvellog(m);
[o,to] = orientlog(m);

원시 센서 데이터 플로팅하기

센서에서 관심 있는 데이터를 별도의 변수로 분리하고 플로팅합니다.

yAngVel = av(:,2);
roll = o(:,3);
plot(tav,yAngVel,to,roll);
legend('Y Angular Velocity','Roll');
xlabel('Relative time (s)');

데이터는 mobiledevInitialTimestamp 속성을 기준으로 초 단위로 플로팅됩니다. 이 속성은 센서에서 기록되고 MATLAB으로 전송된 첫 번째 데이터 점의 절대 시간을 제공합니다. 이는 angvellogorientlog와 같은 함수를 사용하여 액세스되는 모든 센서 데이터의 타임스탬프에 대한 기준점 역할을 합니다. 이러한 타임스탬프는 InitialTimestamp에 상대적인 초 단위 값으로 주어집니다.

절대적인 타임스탬프로 변환하기

모든 센서 타임스탬프를 절대적인 타임스탬프로 변환하기 위해 InitialTimestamp 값을 datetime 객체로 변환합니다. 개별 센서 타임스탬프(단위: 초)를 seconds로 변환합니다. 그러면 상대적인 타임스탬프를 절대적인 타임스탬프로 변환하기 위한 날짜 계산이 간단해집니다.

tInit = datetime(m.InitialTimestamp,'InputFormat','dd-MM-yyyy HH:mm:ss.SSS');
tAngVel = tInit + seconds(tav);
tOrient = tInit + seconds(to);

절대 시간에 대해 여러 센서 플로팅하기

두 센서 모두 이제 datetime을 사용하여 나타낸 절대적인 타임스탬프를 갖습니다. 따라서 센서 판독값에서 유의미한 이벤트가 발생한 실제 시간을 쉽게 시각화할 수 있습니다.

방향 센서는 도(Degree)를 단위로 사용하는 반면, 각속도 센서는 초당 라디언을 단위로 사용합니다. 다시 플로팅하기 전에 yAngVel을 초당 도(Degree)로 변환합니다.

yAngVelDeg = yAngVel * 180/pi;

plot(tAngVel,yAngVelDeg,tOrient,roll);
legend('Y Angular Velocity','Roll');
xlabel('Absolute time (s)');

정리하기

활성화된 센서를 끄고 mobiledev를 지웁니다.

m.AngularVelocitySensorEnabled = 0;
m.OrientationSensorEnabled = 0;

clear m;