WVN+ZLM,Centos7 安装环境全流程百分百安装

1.需要先安装基础环境

1.ZLM

下载,更新,安装
进入linux 创建文件夹,进入执行以下命令

git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

cd ZLMediaKit

git submodule update --init

2.cmake


创建文件夹,下载,解压,测试, 移动至 use/local/cmake 成为全局
wget -c https://github.com/Kitware/CMake/releases/download/v3.19.0-rc3/cmake-3.19.0-rc3-Linux-x86_64.tar.gz
//解压
tar xzfv cmake-3.19.0-rc3-Linux-x86_64.tar.gz 
//cd到解压的目录
cd cmake-3.19.0-rc3-Linux-x86_64
//cd到bin目录
cd ./bin
//简单测试
./cmake --version

成功显示版本即证明成功,但是此时还不能全局使用,并且最好剪切目录到系统的/usr/local/cmake,cmake需要自己创建
//所以我们需要剪切(可以省略)并且创建软连接移到/bin目录下
mv ./cmake-3.19.0-rc3-Linux-x86_64 /usr/local/cmake/

ln -sf /usr/local/cmake/cmake-3.19.0-rc3-Linux-x86_64/bin/cmake /usr/bin/

3.安装yasm(FFmpeg依赖yasm)

FFmpeg 为了提高编译速度,使用了汇编指令,如MMXSSE等。如果系统中没有yasm指令的话,编译FFmpeg时就会报错nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2)解压:tar zxvf yasm-1.3.0.tar.gz
3)切换路径: cd yasm-1.3.0
4)执行配置: ./configure
5)编译:make
6)安装:make install

4.安装FFmpeg

2.安装FFmpeg
1)下载:wget http://www.ffmpeg.org/releases/ffmpeg-5.0.tar.gz
2)解压:tar -zxvf ffmpeg-5.0.tar.gz
3)切换路径: cd ffmpeg-5.0
4)执行配置: ./configure --prefix=/usr/local/ffmpeg
5)编译:make
6)安装:make install
配置环境变量:
vi /etc/profile
在最后PATH添加环境变量:
export PATH=$PATH:/usr/local/ffmpeg/bin
设置生效:
source /etc/profile

2.下载构建配置其他环境

1.构建ZLM

进入ZLMediaKit 目录,执行 编译,构建.需要几分钟,请耐心等待。
cd ZLMediaKit
mkdir build
cd build
cmake ..
make -j4

2.下载WVP工程

这个工程是前后端一起的工程。前端就在wvp-GB28181-pro/web_src 目录下,先安装前端依赖,然后 打包。springboot 工程大家就不陌生了,build 就好了,建议改成 把打包改成jar包。

git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git

cd wvp-GB28181-pro/web_src/

npm --registry=https://registry.npmmirror.com install

npm run build

3.配置wvp 配置文件,配置zlm 配置文件

wvp 需要配置 ,数据库、redis、sip、zlmediakit连接信息、zlm 配置文件、ser-settings可根据业务需求配置
把application.yml 文件指定改为 active: dev
然后把application-dev.yml 内容改掉

以下本人application-dev.yml 文件配置,可供参考。

spring:
  # 设置接口超时时间
  mvc:
    async:
      request-timeout: 20000
  thymeleaf:
    cache: false
  # [可选]上传文件大小限制
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
  # REDIS数据库配置
  redis:
    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
    host: 127.0.0.1
    # [必须修改] 端口号
    port: 6379
    # [可选] 数据库 DB
    database: 7
    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
    password:
    # [可选] 超时时间
    timeout: 10000
    # mysql数据源
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test_gb-89wulian?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
    username: root
    password: 123456
    hikari:
      connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数
      initialSize: 10                       # 连接池初始化连接数
      maximum-pool-size: 200                # 连接池最大连接数
      minimum-idle: 5                       # 连接池最小空闲连接数
      idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
      max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
  port: 18080


# 作为28181服务器的配置
sip:
  # [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡,
  # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4
  # 如果不明白,就使用0.0.0.0,大部分情况都是可以的
  # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。
  # 本机Ip 内网IP
  ip: 192.168.1.110
  # [可选] 28181服务监听的端口
  port: 5060
  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
  # 后两位为行业编码,定义参照附录D.3
  # 3701020049标识山东济南历下区 信息行业接入
  # [可选]
  domain: 4101050000
  # [可选]
  id: 41010500002000000001
  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  password: asacoolman001
  # 是否存储alarm信息
  alarm: true

#zlm 默认服务器配置
media:
  # [必须修改] zlm服务器的节点名称 一一对应
  id: asacool
  # [必须修改] zlm服务器的内网IP
  ip: 192.168.1.110
  # [必须修改] zlm服务器的http.port
  http-port: 6080
  # [可选] zlm服务器的hook.admin_params=secret
  secret: 8qxBNgbcowfmv6GmlixCfbbhMr3t5ujz
  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 50000,50300 # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流,
    send-port-range: 50000,50300 # 端口范围
  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
  record-assist-port: 18081
# [根据业务需求配置]
user-settings:
  # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
  auto-apply-play: false
  # [可选] 部分设备需要扩展SDP,需要打开此设置
  senior-sdp: false
  # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认)
  save-position-history: false
  # 点播/录像回放 等待超时时间,单位:毫秒
  play-timeout: 18000
  # 上级点播等待超时时间,单位:毫秒
  platform-play-timeout: 60000
  # 是否开启接口鉴权
  interface-authentication: true
  # 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录
  interface-authentication-excludes:
    - /api/v1/**
  # 推流直播是否录制
  record-push-live: true
  # 国标是否录制
  record-sip: true
  # 是否将日志存储进数据库
  logInDatebase: true
  # 使用推流状态作为推流通道状态
  use-pushing-as-status: true
  # 使用来源请求ip作为streamIp,当且仅当你只有zlm节点它与wvp在一起的情况下开启
  use-source-ip-as-stream-ip: true
  # 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放
  stream-on-demand: true
  # 推流鉴权, 默认开启
  push-authority: true
  # 设备上线时是否自动同步通道
  sync-channel-on-device-online: false
  # 是否使用设备来源Ip作为回复IP, 不设置则为 false
  sip-use-source-ip-as-remote-address: false
  # 是否开启sip日志
  sip-log: true
  # 是否开启sql日志
  sql-log: true
  # 消息通道功能-缺少国标ID是否给所有上级发送消息
  send-to-platforms-when-id-lost: true
  # 保持通道状态,不接受notify通道状态变化, 兼容海康平台发送错误消息
  refuse-channel-status-channel-form-notify: false
  # 设置notify缓存队列最大长度,超过此长度的数据将返回486 BUSY_HERE,消息丢弃, 默认10000
  max-notify-count-queue: 10000
  # 设备/通道状态变化时发送消息
  device-status-notify: false
  # 上级平台点播时不使用上级平台指定的ssrc,使用自定义的ssrc,参考国标文档-点播外域设备媒体流SSRC处理方式
  use-custom-ssrc-for-parent-invite: true
  # 国标级联离线后多久重试一次注册
  register-again-after-time: 60
  # 国标续订方式,true为续订,每次注册在同一个会话里,false为重新注册,每次使用新的会话
  register-keep-int-dialog: false
# [可选] 日志配置, 一般不需要改
logging:
  config: classpath:logback-spring-local.xml

zlm 配置,我发现很多博主都没说 zlm 配置文件在哪里。经过cmake 过后,会生成一个debug 的目录,比如我的 ZLMediaKit 在usr/local/zlm 里面就会有个这样的目录
/usr/local/zlm/ZLMediaKit/release/linux/Debug/
config.ini 就是你zlm 的配置文件。

需要修改的配置有以下内容,需要和yml 文件一一对应

[api]
secret=8qxBNgbcowfmv6GmlixCfbbhMr3t5ujz
[http]
port=6080
[general]
mediaServerId=asacool

好了现在的你已经完成了 百分之90了。

3.开放端口号,打包jar,启动java 和 zlm

1.开放端口号

我大概梳理了一下端口号,这些都是必要的。都可以先开开。有些安全的端口 如果不能开启 记得去zlm和yml 里面修改端口号

18080  tcp
6080   udp 和 tcp
5060   udp 和 tcp
8000   tcp
443    tcp
1935   udp 和 tcp
554    tcp
10000  udp 和 tcp
9000   udp 和 tcp
5000050300 范围端口  udp 和 tcp

2.打包jar

先把打包方式改成jar 方式,如果不会 以下是本人pom 文件。仅供参考

<?xml version="1.0"?>
<project
		xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
		xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.2</version>
	</parent>

	<groupId>com.genersoft</groupId>
	<artifactId>wvp-pro</artifactId>
	<version>2.6.9</version>
	<name>web video platform</name>
	<description>国标28181视频平台</description>
	<packaging>${project.packaging}</packaging>

	<repositories>
		<repository>
			<id>nexus-aliyun</id>
			<name>Nexus aliyun</name>
			<url>https://maven.aliyun.com/repository/public</url>
			<layout>default</layout>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>nexus-aliyun</id>
			<name>Nexus aliyun</name>
			<url>https://maven.aliyun.com/repository/public</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.build.timestamp.format>MMddHHmm</maven.build.timestamp.format>
		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>

		<!-- 依赖版本 -->
		<snippetsDirectory>${project.build.directory}/generated-snippets</snippetsDirectory>
		<asciidoctor.input.directory>${project.basedir}/docs/asciidoc</asciidoctor.input.directory>
		<generated.asciidoc.directory>${project.build.directory}/asciidoc</generated.asciidoc.directory>
		<asciidoctor.html.output.directory>${project.build.directory}/asciidoc/html</asciidoctor.html.output.directory>
		<asciidoctor.pdf.output.directory>${project.build.directory}/asciidoc/pdf</asciidoctor.pdf.output.directory>
	</properties>

	<profiles>
		<profile>
			<id>jar</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<project.packaging>jar</project.packaging>
			</properties>
		</profile>
		<profile>
			<id>war</id>
			<properties>
				<project.packaging>war</project.packaging>
			</properties>
			<dependencies>
				<dependency>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-web</artifactId>
					<exclusions>
						<exclusion>
							<groupId>org.springframework.boot</groupId>
							<artifactId>spring-boot-starter-jetty</artifactId>
						</exclusion>
					</exclusions>
				</dependency>
				<dependency>
					<groupId>javax.servlet</groupId>
					<artifactId>javax.servlet-api</artifactId>
					<version>3.1.0</version>
					<scope>provided</scope>
				</dependency>
			</dependencies>
		</profile>
	</profiles>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.2.2</version>
			<exclusions>
				<exclusion>
					<groupId>com.zaxxer</groupId>
					<artifactId>HikariCP</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!-- mysql数据库 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.30</version>
		</dependency>

		<!--postgresql-->
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>42.5.1</version>
		</dependency>

		<!-- kingbase人大金仓 -->
		<!-- 手动下载驱动后安装 -->
		<!-- mvn install:install-file -Dfile=/home/lin/soft/kingbase/jdbc-aarch/kingbase8-8.6.0.jar -DgroupId=com.kingbase -DartifactId=kingbase8 -Dversion=8.6.0 -Dpackaging=jar
 -->
		<dependency>
			<groupId>com.kingbase</groupId>
			<artifactId>kingbase8</artifactId>
			<version>8.6.0</version>
			<scope>system</scope>
			<systemPath>${basedir}/libs/jdbc-aarch/kingbase8-8.6.0.jar</systemPath>
		</dependency>

		<!--Mybatis分页插件 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.4.6</version>
		</dependency>

		<!--在线文档 -->
		<dependency>
			<groupId>org.springdoc</groupId>
			<artifactId>springdoc-openapi-ui</artifactId>
			<version>1.6.10</version>
		</dependency>

		<dependency>
			<groupId>com.github.xiaoymin</groupId>
			<artifactId>knife4j-springdoc-ui</artifactId>
			<version>3.0.3</version>
		</dependency>

		<!--参数校验 -->
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
		</dependency>

		<!-- 日志相关 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

		<!-- sip协议栈 -->
		<dependency>
			<groupId>javax.sip</groupId>
			<artifactId>jain-sip-ri</artifactId>
			<version>1.3.0-91</version>
		</dependency>

		<!-- 取代log4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
			<version>1.7.36</version>
		</dependency>

		<!-- xml解析库 -->
		<dependency>
			<groupId>org.dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>2.1.3</version>
		</dependency>

		<!-- json解析库fastjson2 -->
		<dependency>
			<groupId>com.alibaba.fastjson2</groupId>
			<artifactId>fastjson2</artifactId>
			<version>2.0.17</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba.fastjson2</groupId>
			<artifactId>fastjson2-extension</artifactId>
			<version>2.0.17</version>
		</dependency>

		<!-- okhttp -->
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.10.0</version>
		</dependency>

		<!-- okhttp 调试日志 -->
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>logging-interceptor</artifactId>
			<version>4.10.0</version>
		</dependency>

		<!-- okhttp-digest -->
		<dependency>
			<groupId>io.github.rburgst</groupId>
			<artifactId>okhttp-digest</artifactId>
			<version>2.7</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/net.sf.kxml/kxml2 -->
		<!--		<dependency>-->
		<!--			<groupId>net.sf.kxml</groupId>-->
		<!--			<artifactId>kxml2</artifactId>-->
		<!--			<version>2.3.0</version>-->
		<!--		</dependency>-->

		<!-- jwt实现 -->
		<dependency>
			<groupId>org.bitbucket.b_c</groupId>
			<artifactId>jose4j</artifactId>
			<version>0.9.3</version>
		</dependency>

		<!--反向代理-->
		<dependency>
			<groupId>org.mitre.dsmiley.httpproxy</groupId>
			<artifactId>smiley-http-proxy-servlet</artifactId>
			<version>1.12.1</version>
		</dependency>

		<!--excel解析库-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>3.1.1</version>
		</dependency>

		<!-- 获取系统信息 -->
		<dependency>
			<groupId>com.github.oshi</groupId>
			<artifactId>oshi-core</artifactId>
			<version>6.2.2</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-core</artifactId>
		</dependency>

		<!--		&lt;!&ndash; 检测文件编码 &ndash;&gt;-->
		<!--		&lt;!&ndash; https://mvnrepository.com/artifact/cpdetector/cpdetector &ndash;&gt;-->
		<!--		<dependency>-->
		<!--			<groupId>cpdetector</groupId>-->
		<!--			<artifactId>cpdetector</artifactId>-->
		<!--			<version>1.0.8</version>-->
		<!--		</dependency>-->

		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>31.1-jre</version>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<!--			<scope>test</scope>-->
		</dependency>
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.9.3</version>
		</dependency>
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>logging-interceptor</artifactId>
			<version>4.10.0</version>
		</dependency>
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>logging-interceptor</artifactId>
			<version>3.14.9</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.1</version>
		</dependency>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
			<version>3.5.1</version>
		</dependency>

	</dependencies>


	<build>
		<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>2.7.2</version>
				<configuration>
					<includeSystemScope>true</includeSystemScope>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
				<version>3.0.1</version>
				<configuration>
					<offline>true</offline>
					<failOnNoGitDirectory>false</failOnNoGitDirectory>
					<dateFormat>yyyyMMdd</dateFormat>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.22.2</version>
				<configuration>
					<skipTests>true</skipTests>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>3.1.0</version>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.1.0</version>
			</plugin>

		</plugins>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
		</resources>
	</build>
</project>

然后直接打包
改完pom,改成打包成jar 工程,然后idea直接 install

2.启动 jar 和 zlm

启动jar

nohup java -jar wvp-pro-*.jar &

启动 zlm,先进入/usr/local/zlm/ZLMediaKit/release/linux/Debug/ 目录下,因为MediaServer 在这里。

nohup ./MediaServer -d -m 3 &

好了 到这里就结束了,本人搭建多次后的总结,祝大家一次成功。
wvp 官网 https://doc.wvp-pro.cn/#/_content/introduction/compile

% Error Distribution Method and Analysis of Observability Degree Based on the Covariances in Kalman Filter. % Copyright(c) 2009-2021, by Gongmin Yan, All rights reserved. % Northwestern Polytechnical University, Xi An, P.R.China % 2/03/2018, 16/05/2021 glvs avp0 = avpset([0;0;0], [30;108;380]); % init AVP ts = 0.1; T = 600; %% twopos = 2; % =1 for single-position; =2 for two-position alignment if twopos==1 imu = imustatic(avp0, ts, T); elseif twopos==2 xxx = []; seg = trjsegment(xxx, 'init', 0); seg = trjsegment(seg, 'uniform', T/2-10); seg = trjsegment(seg, 'turnleft', 20, 9); seg = trjsegment(seg, 'uniform', T/2-10); trj = trjsimu(avp0, seg.wat, ts, 1); imu = trj.imu; end %% phi = [.1;.1;1]*glv.deg; imuerr = imuerrset(0.03, 100, 0.001, 10); wvn = [0.01;0.01;0.01]; [att0v, attkv, xkpk, kfs] = alignvn_kfs(imuadderr(imu,imuerr), qaddphi(a2qua(avp0(1:3)),phi), avp0(7:9), phi, imuerr, wvn); myfig; % Observability plot spk = sqrt(xkpk(:,13:end-1)); t = xkpk(:,end); for k=1:12, spk(:,k)=spk(1,k)./spk(:,k); end subplot(221), semilogy(t, spk(:,1:3),'linewidth',2); title('( a )'); xygo('Observibility'); legend('\phi_E', '\phi_N', '\phi_U') subplot(222), semilogy(t, spk(:,4:6),'linewidth',2); title('( b )'); xygo('Observibility'); legend('\deltav^n_E', '\deltav^n_N', '\deltav^n_U') subplot(223), semilogy(t, spk(:,7:9),'linewidth',2); title('( c )'); xygo('Observibility'); legend('\epsilon^b_x', '\epsilon^b_y', '\epsilon^b_z') subplot(224), semilogy(t, spk(:,10:12),'linewidth',2); title('( d )'); xygo('Observibility'); legend('\nabla^b_x', '\nabla^b_y', '\nabla^b_z')帮我注释代码
06-09
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值