增加周跳判断和处理
This commit is contained in:
parent
655cced8a8
commit
e6ab241586
@ -27,4 +27,5 @@ public interface FocusCalculator {
|
|||||||
|
|
||||||
// 算法版本
|
// 算法版本
|
||||||
int getVer();
|
int getVer();
|
||||||
|
boolean isJump();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -349,6 +349,11 @@ public class FocusCalculator1 implements FocusCalculator{
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isJump() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tilt avgTilt() {
|
public Tilt avgTilt() {
|
||||||
if (tilts.size() == 0) {
|
if (tilts.size() == 0) {
|
||||||
|
|||||||
@ -210,6 +210,11 @@ public class FocusCalculator5 implements FocusCalculator{
|
|||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isJump() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tilt avgTilt() {
|
public Tilt avgTilt() {
|
||||||
if (tilts.size() == 0) {
|
if (tilts.size() == 0) {
|
||||||
|
|||||||
@ -215,6 +215,11 @@ public class FocusCalculator6 implements FocusCalculator{
|
|||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isJump() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tilt avgTilt() {
|
public Tilt avgTilt() {
|
||||||
if (tilts.size() == 0) {
|
if (tilts.size() == 0) {
|
||||||
|
|||||||
@ -9,6 +9,10 @@ import com.imdroid.sideslope.sal.Device;
|
|||||||
public class FocusCalculator7 extends FocusCalculator3{
|
public class FocusCalculator7 extends FocusCalculator3{
|
||||||
|
|
||||||
final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000
|
final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000
|
||||||
|
final static int bad_change_mm = 500;//固定解跳变连续10次超过500mm,认为是周跳
|
||||||
|
final static int bad_duration = 10;
|
||||||
|
|
||||||
|
int bad_count = 0;
|
||||||
|
|
||||||
public FocusCalculator7(Device bsDevice) {
|
public FocusCalculator7(Device bsDevice) {
|
||||||
super(bsDevice);
|
super(bsDevice);
|
||||||
@ -22,15 +26,40 @@ public class FocusCalculator7 extends FocusCalculator3{
|
|||||||
|
|
||||||
if(gga.isFixed()) {
|
if(gga.isFixed()) {
|
||||||
counterFixedResult++;
|
counterFixedResult++;
|
||||||
|
if(pointList.size()>0){
|
||||||
|
double[] lastXyz = pointList.get(pointList.size()-1);
|
||||||
|
if(Math.abs(xyz[0]-lastXyz[0])>bad_change_mm ||
|
||||||
|
Math.abs(xyz[1]-lastXyz[1])>bad_change_mm ||
|
||||||
|
Math.abs(xyz[2]-lastXyz[2])>bad_change_mm){
|
||||||
|
bad_count++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bad_count = 0;
|
||||||
|
|
||||||
pointList.add(xyz);
|
pointList.add(xyz);
|
||||||
}
|
}
|
||||||
else if(gga.getQuality() == 5) counterNoFixed++;
|
else if(gga.getQuality() == 5) counterNoFixed++;
|
||||||
else counterNoB562 ++;
|
else counterNoB562 ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset(){
|
||||||
|
super.reset();
|
||||||
|
bad_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getVer() {
|
public int getVer() {
|
||||||
return 7;
|
return 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isJump(){
|
||||||
|
if (bad_count>bad_duration){
|
||||||
|
bad_count = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.imdroid.sideslope.calc;
|
package com.imdroid.sideslope.calc;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.imdroid.common.util.DataTypeUtil;
|
||||||
import com.imdroid.common.util.ThreadManager;
|
import com.imdroid.common.util.ThreadManager;
|
||||||
import com.imdroid.secapi.dto.GnssCalcData;
|
import com.imdroid.secapi.dto.GnssCalcData;
|
||||||
import com.imdroid.secapi.dto.GnssCalcDataMapper;
|
import com.imdroid.secapi.dto.GnssCalcDataMapper;
|
||||||
@ -10,7 +11,11 @@ import com.imdroid.sideslope.bd.*;
|
|||||||
import com.imdroid.sideslope.message.D341LocationMessage;
|
import com.imdroid.sideslope.message.D341LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.sal.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.sal.DeviceService;
|
||||||
|
import com.imdroid.sideslope.server.DeviceChannel;
|
||||||
|
import com.imdroid.sideslope.server.OnlineChannels;
|
||||||
import com.imdroid.sideslope.service.WarningService;
|
import com.imdroid.sideslope.service.WarningService;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -119,7 +124,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
if(tilt != null) {
|
if(tilt != null) {
|
||||||
focusCalculator.addTilt(tilt);
|
focusCalculator.addTilt(tilt);
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt);
|
logger.debug("测站{}惯导单次解析结果:{}", deviceId,tilt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,15 +135,19 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
double[] doubles = message.getB562_loc();//unit: mm
|
double[] doubles = message.getB562_loc();//unit: mm
|
||||||
if(doubles !=null) {
|
if(doubles !=null) {
|
||||||
focusCalculator.addXyz(doubles, message.getCreateTime());
|
focusCalculator.addXyz(doubles, message.getCreateTime());
|
||||||
logger.info("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles));
|
logger.info("测站{}的b562单次解析结果:{}", deviceId,Arrays.toString(doubles));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 单次GGA
|
// 单次GGA
|
||||||
Gga gga = message.getGga();
|
Gga gga = message.getGga();
|
||||||
if(gga != null) {
|
if(gga != null) {
|
||||||
focusCalculator.addGGA(message.getGga());
|
focusCalculator.addGGA(gga);
|
||||||
logger.info("测站" + deviceId + "的gga单次解析结果:{},{},{},{}",
|
logger.info("测站{}的gga单次解析结果:{},{},{},{}",deviceId,
|
||||||
gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality());
|
gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality());
|
||||||
|
if(groupCalc.getVer() == 7 && focusCalculator.isJump()){
|
||||||
|
logger.info("{}发生周跳",deviceId);
|
||||||
|
hardResetDevice(deviceId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,4 +359,21 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hardResetDevice(String deviceId){
|
||||||
|
String resetCmd = "42 4b cc 17 26 04 00 00";
|
||||||
|
DeviceChannel deviceChannel = OnlineChannels.INSTANCE.getConfigChannel(deviceId);
|
||||||
|
if(deviceChannel == null || !deviceChannel.isOnline()) {
|
||||||
|
deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId);
|
||||||
|
}
|
||||||
|
//if(deviceChannel!=null && deviceChannel.isOnline()){
|
||||||
|
if(deviceChannel!=null && deviceChannel.isOnline()){
|
||||||
|
// send command
|
||||||
|
ByteBuf buf = Unpooled.buffer();
|
||||||
|
byte[] data = DataTypeUtil.hexStringToBytes(resetCmd);
|
||||||
|
logger.info("send hard reset command:{}", resetCmd);
|
||||||
|
buf.writeBytes(data);
|
||||||
|
deviceChannel.writeAndFlush(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user