USBのセンサから出​力されたバイナリデー​タの変換方法を教えて​下さい

2 visualizaciones (últimos 30 días)
Daisaiku Senoo
Daisaiku Senoo el 21 de Dic. de 2016
Comentada: Walter Roberson el 22 de Dic. de 2016
USB出力のジャイロセンサをPCに接続して使用しています。 Matlabのコマンドウィンドウから、以下のようにRAWデータの要求を行いデータが返ってきました。 しかしながら、肝心な測定データがバイナリデータのため文字化けしてしまいました。
また、RAWデータフォーマットは以下のようになっています。
データ型:X(ASCII) U(Unsigned) I(Signed)
バイナリデータから測定値に変換する方法を教えてください。 よろしくお願いします。
  1 comentario
Walter Roberson
Walter Roberson el 21 de Dic. de 2016
Editada: Walter Roberson el 21 de Dic. de 2016
Approximate translation:
USB output gyro sensor is connected to the PC. From the command window of Matlab, we requested RAW data and returned the data as follows. However, since the measurement data which is important is binary data, it got garbled.
The RAW data format is as follows.

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 21 de Dic. de 2016
You should use fread() rather than fscanf() when you are working with binary. You should also be reading a specific number of bytes, rather than looking for a line terminator, as the line terminator can accidentally occur in the binary. You should configure BytesAvailableFcnMode to 'bytes'.
  2 comentarios
Daisaiku Senoo
Daisaiku Senoo el 22 de Dic. de 2016
Thank you for your answer. I tried fread(), and the result is as below. I think the data is follow the format table in my question. Now I'm thinking how I can know correct data of angle, velocity and acceleration because there are two values in each data.
Walter Roberson
Walter Roberson el 22 de Dic. de 2016
The "Data Size" appears to start counting from the '$' but not to include the CR LF.
It appears that the data is in Big-Endian format, so you probably need to swapbytes() on the data.
angular_x = swapbytes( typecast(out(18:19), 'int8') );
angular_y = swapbytes( typecast(out(20:21), 'int8') );
angular_z = swapbytes( typecast(out(22:23), 'int8') );
acceleration_x = swapbytes( typecast(out(24:25), 'int8') );
acceleration_y = swapbytes( typecast(out(26:27), 'int8') );
acceleration_z = swapbytes( typecast(out(28:29), 'int8') );
and so on.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by