利用SImulink采集RTK信号,但是出现以下错误,希望有小伙伴帮忙解答一下;
下面是代码:
function gpsData = parseRTK(serialData)
coder.extrinsic('split');
% serialData: 串口接收到的 uint8 类型的 RTK 导航信
% 将 uint8 数据转换成十六进制字符串
hexData = dec2hex(serialData);
% 将十六进制字符串转换成十进制数组
decData = hex2dec(hexData);
% 将十进制数组转换成字符串形式
strData = char(decData');
% 初始化所有的变量
rtkSentence = '';
dataFields = {};
latitude = NaN;
longitude = NaN;
heading = NaN;
speed = NaN;
% 查找 $GNRMC
startIdx = strfind(strData, '$GNRMC');
% 检查 strData 是否是一个非空字符串
if isempty(startIdx)
gpsData = struct('latitude',0,'longitude',0,'heading',0,'speed',0); % 没有找到有效的 GPS 数据
return;
end
% 只获取第一个匹配的索引
startIdx = startIdx(1);
if ~isempty(startIdx)
% 截取以 $GNRMC 开头的字符串
rtkSentence = strData(startIdx:end);
% 使用逗号分隔字符串
dataFields = split(rtkSentence, ',');
% 检查字段数量
if numel(dataFields) >= 16
% 提取经纬度、速度和航向角信息
% 分割数据并存储到变量中
latitude = str2double(dataFields{4});
longitude = str2double(dataFields{6});
heading = str2double(dataFields{9});
speed = str2double(dataFields{8}) * 1.852; % 转换节到公里/小时
end
end
%创建包含解析后数据的结构体
gpsData = struct('latitude', latitude, 'longitude', longitude, 'heading', heading, 'speed', speed);
end
% function decimalDegree = nmeaToDecimal(nmeaDegree)
% % 将 NMEA 格式的经纬度转换为十进制度
% degrees = floor(nmeaDegree / 100);
% minutes = nmeaDegree - degrees * 100;
% decimalDegree = degrees + minutes / 60;
% end