北斗简介

1.北斗卫星导航系统

中国北斗卫星导航系统(BeiDou Navigation Satellite System,BDS)是中国自行研制的全球卫星导航系统.北斗卫星导航系统由空间段、地面段和用户段三部分组成,可在全球范围内全天候、全天时为各类用户提供高精度、高可靠定位、导航、授时服务,并具有短报文通信能力,已经初步具备区域导航、定位和授时能力,定位精度10米,测速精度0.2米/秒,授时精度10纳秒。
系统构成:北斗卫星导航系统空间段由5颗静止轨道卫星和30颗非静止轨道卫星组成。

1.北斗一代
由4颗卫星组成,现在只有1C正常工作

北斗一代运用了“有源定位”的方法。导航仪需要向卫星发出信号,由卫星把信号传给地面站,再由它解算出导航仪的位置,之后发给导航仪.由于是采用少量卫星实现的有源定位,系统在定位精度、用户容量、定位的频率次数、隐蔽性等方面均受到限制
2.北斗二代
是中国正在实施的自主发展、独立运行的全球卫星导航系统,致力于向全球用户提供定位、导航、授时服务
由23颗组成卫星组成(2007年到2016年)
在计划中,整个系统将由35颗卫星组成,其中5颗是静止轨道卫星
2017到2018年1月12日发射了第24,25,26,27颗卫星组成北斗3号
北斗卫星导航系统三步走发展规划
时间节点 2004 2012 2020
实现目标 区域有源定位 区域无源定位 全球无源定位
北斗二代是一个军民两用的系统。项目的主要参与者为中国人民解放军总参谋部、总装备部、国家国防科技工业局、中国科学院、中国航天科技集团公司、中国电子科技集团公司、国防科技大学
现在北斗一代用于国家特种行业领域,二代军民两用

2.系统构成

北斗卫星导航系统由空间段、地面段、用户段组成
1.空间段
北斗卫星导航系统空间段计划由35颗卫星组成,包括5颗静止轨道卫星、27颗中地球轨道卫星、3颗倾斜同步轨道卫星.
2.地面段
系统的地面段由主控站、注入站、监测站组成,主控站用于系统运行管理与控制等,注入站用于向卫星发送信号,监测站用于接收卫星的信号,并发送给主控站
3.用户段
用户段即用户的终端,即可以是专用于北斗卫星导航系统的信号接收机,也可以是同时兼容其他卫星导航系统的接收机

3.有源无源定位

定位原理:由于卫星的位置精确可知,在接收机对卫星观测中,我们可得到卫星到接收机的距离,利用三维坐标中的距离公式,利用3颗卫星,就可以组成3个方程式,解出观测点的位置(X,Y,Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式进行求解,从而得到观测点的经纬度和高程.
有源时间测距定位:用户终端通过导航卫星向地面控制中心发出一个申请定位的信号,之后地面控制中心发出测距信号,根据信号传输的时间得到用户与两颗卫星的距离,北斗一代完全基于此技术,而之后的北斗二代除了使用新的技术外,也保留了这项技术
无源时间测距定位:用户接收至少4颗导航卫星发出的信号,根据时间信息可获得距离信息,根据三球交汇的原理,用户终端自行可以自行计算其空间位置
北斗一代定位:三球交汇原理,先发起位置申请
北斗二代定位:和GPS相同,无线电伪距定位,接收4颗卫星的信号
RNSS英文全称Radio Navigation Satellite System:由用户接收卫星无线电导航信号,是一种卫星无线电导航业务,自主完成至少到4颗卫星的距离测量,进行用户位置,速度及航行参数计算。GPS等系统是典型的RNSS系统。
RDSS英文全称Radio Determination Satellite Service:是另一种卫星无线电测定业务,用户至卫星的距离测量和位置计算无法由用户自身独立完成,必须由外部系统通过用户的应答来完成。其特点是通过用户应答,在完成定位的同时,完成了向外部系统的用户位置报告,还可实现定位与通信的集成
RDSS协议版本:北斗用户数据接口协议4.0版,2.1版
RNSS协议版本:一般和GPS一样是NMEA0183协议

4.信号传输

北斗卫星导航系统使用码分多址技术
北斗卫星导航系统的官方宣布,在L波段和S波段发送导航信号,在L波段的B1、B2、B3频点上发送服务信号,包括开放的信号和需要授权的信号。

B1频点:1559.052MHz-1591.788MHz
B2频点:1166.220MHz-1217.370MHz
B3频点:1250.618MHz-1286.423MHz
信息收发:授权用户拥有北斗卫星导航系统和短报文服务,这项服务仅限于亚太地区。军用版容量为120个汉字,民用版49个汉字
北斗波束:波束(wave beam)是指由卫星天线发射出来的电磁波在地球表面上形成的形状(比如说像手电筒向黑暗处射出的光束。)。主要有全球波束、点形波束、赋形波束。它们由发射天线来决定其形状。

5.北斗校验位

校验和字段是语句中的最后一个字段,它在定界符“”星号之后。是对语句中所有字符异或运算。所有字符指在定界符“$”与“”之间(但不包括这些定界符)的全部字符,两位ASCII码表示

unsigned char check(unsigned char *a){
    unsigned int i;
    unsigned char checksum=0;
    for(checksum=a[1],i=2;a[i]!='*';i++){
        checksum^=a[i]; 
    }

    printf("result=0x%x\n", checksum);

    return checksum;

}
输入:check("$BDICA,0,00*");
结果:result=0x7d
public class bdtest {

    public static void main(String[] args) {
        byte[] msg = null;
        String bdmessage = "A4";

        try {
            msg = "一二三12".getBytes("GBK");
        } catch (Exception e) {

        }

        //把汉字转成两个字节用hexstring 表示
        for(int j=0; jout.println("hexstring:"+tempStr+" length:"+tempStr.length());
            if(tempStr.length() > 2){//如果是汉字
                tempStr = tempStr.substring(tempStr.length()-2);//取最后两位
                System.out.println(":"+tempStr);
            }
            bdmessage +=tempStr;
        }
        bdmessage = bdmessage.toUpperCase();


        bdmessage = bdmessage.concat("*");
        String data = "$CCTXA,144871,1,2,"+bdmessage;
        System.out.println(data);

         int checksum = CheckSum(data);
            String sum = Integer.toHexString(checksum);
            if(sum.length()<2)
                sum="0"+sum;

            data +=sum;
            data +="\r\n";
            System.out.println("data:"+data);

            //验证接收
            String dd = "D2BBB6FEC8FD3132";
            byte[] t = HexStringToBytes(dd);
            String recv = "";
            try {
                recv = new String(t,"GBK");
            } catch (Exception e) {

            }
            System.out.println("recv:"+recv);

    }
    //按位异或
    public static int CheckSum(String s){
         String ss = s.substring(1,s.indexOf("*"));

         byte[] bt = ss.getBytes();
         int checksum = bt[0];

         for(int i=1; ireturn checksum;

     }
    //hextstring 转bytes
    private static byte[] HexStringToBytes(String s) 
    {
         byte[] bytes;
         bytes = new byte[s.length() / 2];

         for (int i = 0; i < bytes.length; i++) 
         {
             bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2),16);
         }

         return bytes;
    }
}

输出结果:
hexstring:ffffffd2 length:8
:d2
hexstring:ffffffbb length:8
:bb
hexstring:ffffffb6 length:8
:b6
hexstring:fffffffe length:8
:fe
hexstring:ffffffc8 length:8
:c8
hexstring:fffffffd length:8
:fd
hexstring:31 length:2
hexstring:32 length:2
$CCTXA,144871,1,2,A4D2BBB6FEC8FD3132*
data:$CCTXA,144871,1,2,A4D2BBB6FEC8FD3132*4f

recv:一二三12

分割NMEA0183协议

#include 
#include 
//char *strtok(char s[], char *delim),把字符串s[] 按*delim分隔符分解成字符串数组,其中分隔符可以是多个",//-"均可
int main(){
    char bddata[] = "$BDGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*4";
    char *p;
    int i=0;
    p = strtok(bddata, ",*");
    printf("bddata: %s\n", p);
    while(1){
        p = strtok(NULL, ",*");
        if(p == NULL)
          break;
    printf("bddata: %s\n", p);
    }


    return 0;

}

bddata: $BDGGA
bddata: 062938.00
bddata: 3110.4700719
bddata: N
bddata: 12123.2657056
bddata: E
bddata: 1
bddata: 25
bddata: 0.6
bddata: 58.9666
bddata: M
bddata: 0.000
bddata: M
bddata: 99
bddata: AAAA
bddata: 4

参考:http://blog.sina.com.cn/s/blog_539b8ff50102wl0n.html
https://baike.baidu.com/item/%E5%8C%97%E6%96%97%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E7%B3%BB%E7%BB%9F/10390403?fr=aladdin

你可能感兴趣的:(基础知识)