空地协同智能消防系统——无人机、小车协同

news2024/12/24 2:48:57

1 题目

1.1 任务

设计一个由四旋翼无人机及消防车构成的空地协同智能消防系统。无人机上安装垂直向下的激光笔,用于指示巡逻航迹。巡防区域为40dm×48dm。无人机巡逻时可覆盖地面8dm宽度区域。以缩短完成全覆盖巡逻时间为原则,无人机按照规划航线巡逻。发现火情后立即采取初步消防措施,并将火源地点位置信息发给消防车,使其前往熄灭火源。空地协同巡逻及消防工作完成时间越短越好。

在这里插入图片描述

1.2 任务点

1、基本要求(50分)

  • (1)参赛队需自制模拟火源。模拟火源是用电池供电的红色光源,如LED等,用激光笔持续照射可控制开启或关闭:持续照射2秒左右开启,再持续照射2秒左右关闭。(5分)
  • (2)展示规划的巡逻航线图,在消防车上按键启动无人机垂直起飞后,无
    人机以18dm左右高度,在巡防区域按规划的航线完成全覆盖巡逻。(22分)
  • (3)无人机与消防车之间采用无线通信;巡逻期间无人机每秒向消防车发
    送1次位置坐标信息,消防车上显示器实时更新显示无人机位置坐标信息。(8分)
  • (4)巡逻中,消防车显示器显示巡逻航迹曲线,计算并显示累计巡逻航程。(8分)
  • (5)完成巡逻后,无人机返回,准确降落在起飞区域内。(7分)

2、发挥部分(50分)

  • (1)手动操作激光笔点亮-一个火源。在消防车上启动无人机巡逻。无人机
    按规划航线巡逻,发现火情后,前往接近火源(水平距离≤5dm)识别确认,再在无人机上用LED指示灯示警。(8分)
  • (2)无人机飞至火源地点上方,降低至10dm左右高度,悬停3s后抛洒灭
    火包,灭火包落在以火源点为中心、半径3dm圆形区域内;再将火源地点位置坐标发送给消防车,然后继续巡逻,完成后返航回到起飞点。(12分)
  • (3)消防车接收到火情信息,显示火源地点位置坐标后,从消防站出发前
    往火源地点,途中不得碾压街区及其边界线,在5dm距离内以激光笔光束照射模拟火源将其熄灭。(15分)
  • (4)熄灭模拟火源后消防车返回到出发区域内。发挥部分限时360s内完成。(10分)
  • (5)其他。(5分)

1.3 设计部分

1.3.1 模拟火源

该部分的要求如下:
模拟火源可用电池供电的红色LED等,需带向上的喇叭形遮光罩,遮光罩角度约60°左右,高度不超过10cm。可用激光笔控制其开启或关闭。
示意图如下:
在这里插入图片描述
外部遮光罩可仿照宠物防咬罩进行修改:
请添加图片描述
内部LED灯罩是为了扩大灯光面积,以便系统内图像识别系统的工作。同时为了提高小车激光跟随算法的工作效率,需要扩大光敏传感器检测区域,建议使用人体微波检测模块上的塑料透镜,以达到聚光的效果。
请添加图片描述
电路设计图:STC8最小系统板加两节1.5V干电池,一个红色LED,300Ω左右的电阻,一个光敏传感器就差不多了。
程序设计:程序中用到一个GPIO输出、ADC、定时器。

1.3.2 小车部分

该部分要求如下:
消防车要求使用 4 轮电动小车,长宽投影尺寸不大于 20cm×35cm,高度不大于 40cm;不得使用麦克纳姆轮。

1、底盘与电机:
(1)底盘:自选。
(2)电机:最好使用带编码器的金属齿轮减速点击,能够得到转速和角度,以便估测小车位置,更好地控制小车。
(3)电机驱动:H桥电机驱动模块。
(4)电池:12V高倍率锂电池组。
最好找要带有电机驱动的、编码器接口、能够降压给主控供电的小车底板,比如开山斧电机驱动模块。
请添加图片描述

2、主控芯片
(1)盘古:
如果选择TI的,盘古这块系统板开发起来还是比较顺手的,用起来Bug少。板子上有OLED驱动芯片和加速度传感器、蜂鸣器、多个按键、串口接口多。
请添加图片描述

(2)TM4C123GXL:
这块板子十分不推荐,调试接口有问题,驱动也不好打(ICDI,要安装CCS),性能也比较差,供电端口也少,写代码的时候Keil闪退无数次,硬件跑程序也容易进中断卡死。
要是有别人改过的、开发好的成品,用用还是可以的。
请添加图片描述

3、显示屏
建议使用陶晶驰的串口屏,配置方便,代码简单,能够回传字符串。
引脚:5V、GND、TXD、RXD
请添加图片描述

4、无线模块
可以使用蓝牙、WIFI、Lora等等。
无线模块建议采用有广播功能的模块,这样多机调试更加方便。
引脚:VCC(5~3.3V)、GND、TXD、RXD
请添加图片描述
今年还允许使用UWB,能够实现无人机和小车的精确定位,还能够传输数据,只要来得及开发代码,可以说是降维打击,不过价格还是比较昂贵的。

5、机器视觉和舵机
对于模拟火源的检测,有OpenMV方案和K210方案。
OpenMV模块有控制舵机的例程,可以控制激光笔关闭模拟火源,但溢价过多,可以自己DIY。

6、IMU
这个主控板上有就最好,没有就用模块化的MPU6050,不过要安装在小车中心处。

7、其他模块:
(1)灰度传感器:白光照射不同颜色的地面,反射回的光强不同,可以进行巡线等任务。
(2)激光头。
(3)…

1.3.3 无人机部分

直接购买成品化的TI无人机,主控板可以使用前面提到的主控。

2 程序设计

我主要是做小车的,因此讲一下我小车的设计方案。
小车上主控板选用TI 盘古的开发板,板载芯片为TM4C123GH6PZT7,MCU内核为ARM Cortex-M4F,MCU最大主频为80 MHz,工作电压范围1.08 V-3.63 V,RAM为32 KB,Flash大小为256 KB,EEPROM为2 KB,核心位宽为32-Bit,ADC为12 bit。
外设和内部资源需要使用串口屏、蓝牙模块/UWB模块、定时器、PWM、LED输出、按键输入(这个可以使用串口屏的按键串口信息回传事件替代)、蜂鸣器驱动。

2.1 蓝牙模块配置

本人使用的是大熊智能的双模蓝牙模块,两个蓝牙模块配对的话需要设置一主机一从机,以下蓝牙模块连接CH340模块,在电脑上使用AT命令配置两个模块。默认使用115200波特率连接。

蓝牙从机,连接无人机:

AT+NAME=DX2003-S		# 设置从机名称
AT+MASTER=01			# 设置从机工作模式
AT+BAUD=115200			# 设置波特率为115200
AT+LADDR				# 读取从机蓝牙地址,以便主机连接

+LADDR=22345000891f

蓝牙主机,连接小车:

AT+NAME=DX2003-M		# 设置主机名称
AT+MASTER=04			# 设置主机工作模式
AT+BAUD=115200			# 设置波特率为115200
AT+CONN=22345000891f	# 主机连接从机地址

连接上之后:
(1)主机显示:

IM_CONN:0		# 0代表是BLE连接上,1代表是SPP连接上

(2)从机显示:

IM_CONN:8

蓝牙断开连接命令:

AT+DSCET=1	

2.2 串口屏界面设计

串口屏使用USART HMI软件绘制界面,需要进行界面排版,字库添加,程序编译。
软件下载及学习链接:

http://mall.micromove.cn/start/download_ide.html

2.2.1 串口通信协议

1、串口屏接收:
协议为:字符串+HEX标识符
HEX标识符为:\xff\xff\xff
USART HMI软件上仿真不需要添加HEX标识符(\xff\xff\xff)。
例子:
如果是串口屏使用CH340连接电脑,则电脑上的串口工具输入(不要加空格):

t0.txt="陶晶驰电子"\xff\xff\xff
b0.txt="Hello World"\xff\xff\xff
j0.val=100\xff\xff\xff
page0.bco=WHITE\xff\xff\xff

如果是MCU串口发送数据:在2.4.2中详述。

2、串口屏发送:
(1)prints:从串口打印一个变量/常量。
(2)printh:从串口打印16进制。

2.2.2 绘图函数

主要使用的有:
(1)cirs:绘制实心圆

cirs x,y,radius,color\xff\xff\xff
cirs 160,266,6,RED\xff\xff\xff

(2)line:绘制直线

line x_start,y_start,x_end,y_end,color\xff\xff\xff
line 185,246,185,26,BLUE\xff\xff\xff

(3)插入图片

pic x,y,picid\xff\xff\xff					# picid为软件插入的ID号为x的图片
pic,123,150,0\xff\xff\xff

2.2.3 串口屏界面设计

小车能够通过蓝牙串口接收无人机传回的航点数据(协议A)和火灾位置数据(协议B),并在串口屏上显示出蓝色原点和红色六角形。

在这里插入图片描述

2.3 无人机与小车之间的通信协议设计

1、无人机通过串口发送给小车的字符串:

A,160,150,F			// 无人机航点坐标(160,150)
B,250,100,F			// 模拟火源坐标(250,100)
C,1,F				// 模拟火源ID: 1

A类表示无人机航点,F为结束标志位
B类表示无人机检测到的火源坐标,F为结束标志位。
C类表示无人机检测到的模拟火源所在的区域ID,F为结束标志位。这个协议可以不发送,直接小车通过B类协议计算模拟火源位置。

2、小车通过串口发给无人机的字符串只需要一个按键使能,使用按键输入或者串口屏的点击,通过蓝牙串口发送“TakeOff”字符串,无人机检测到就能起飞了。

2.4 小车程序设计

首先进行各个部分的初始化,然后进入while(1)循环,循环内写入大部分处理函数。中断处理函数中存放处理函数的使能位,当某些函数工作时间较长,需要在中断中使能标志位,然后在主函数main中进行处理,以免造成中断阻塞。
在这里插入图片描述

2.4.1 蓝牙串口程序

蓝牙串口程序包括串口初始化、串口发送、串口中断服务函数(串口接收)、串口数据解析等部分。

1、主函数:

#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
// ......

// 全局变量
char uart4_rec_temp[50];		// 接收到暂存的字符数组
bool uart4_rec_check_flag = 0;		// 接收数据解包的标志位

// ......

int main(void)
{
	ROM_FPUEnable();//使能浮点单元
	ROM_FPULazyStackingEnable();//浮点延迟堆栈,减少中断响应延迟  
	ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);//配置系统时钟
	initTime();					// 初始化滴答定时器
	GPIO_Init();				// LED灯初始化
	// ......
	ConfigureUART4();			// 初始化蓝牙BLE-串口4
	UART4_BLE_CONNECT();		// 串口4连接蓝牙
	// ......
	
	while(1)
	{
		// ......
		uart4_data_check();		//串口4数据包解包
		// ......
	}
}

2、串口初始化:

// 蓝牙-串口4驱动 PC4/PC5
void ConfigureUART4(void)
{ 
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);// Enable the GPIO Peripheral used by the UART.
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);// Enable UART0
    ROM_GPIOPinConfigure(GPIO_PC4_U4RX);// Configure GPIO Pins for UART mode.
    ROM_GPIOPinConfigure(GPIO_PC5_U4TX);
    ROM_GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
	UARTConfigSetExpClk(UART4_BASE,SysCtlClockGet(),115200,
												(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
	UARTFIFODisable(UART4_BASE);			// 使能UART4中断
	UARTIntEnable(UART4_BASE,UART_INT_RX);	// 使能UART4接收中断
	UARTIntRegister(UART4_BASE,UART4_IRQHandler);	//UART4中断地址注册
	IntPrioritySet(INT_UART4,USER_INT3);			//中断优先级设置USER_INT3(0最高)
}

3、串口中断服务函数:

void UART4_IRQHandler(void)		//UART4中断函数-蓝牙BLE接收中断(无人机信息发送给小车)
{
	uint32_t flag = UARTIntStatus(UART4_BASE,1);//获取中断标志 原始中断状态 屏蔽中断标志		
	UARTIntClear(UART4_BASE,flag);//清除中断标志	
	char ch;
	while(UARTCharsAvail(UART4_BASE))//判断FIFO是否还有数据		
	{
		ch = UARTCharGet(UART4_BASE);	
		uart4_rec_temp[temp_cnt] = ch;
		temp_cnt ++;
 	}
	if(ch == 'F')
		uart4_rec_check_flag = 1;			// 接收数据解包的标志位置1
	if(temp_cnt >= 50)						//数组存满后清空
	{
		memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));		// 清空字符数组
		temp_cnt = 0;
	}
	bit_data = !bit_data;
	GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, bit_data);		//置低位点亮,保持闪烁,如果LED不闪烁了,表示程序卡死了
}

4、串口发送函数:

void UART4_SendString(const char *string)
{
	int len = strlen(string);
	while(len--)
	{
		// 等待UART发送缓冲区为空
		while(UARTSpaceAvail(UART4_BASE) == 0);
		
		// 发送字符到UART
		UARTCharPut(UART4_BASE, *string++);
	}
}

5、解析串口接收到的数据:
首先检测第一个数是否是“A”或“B”,然后检测字符串最后一个字符是否是“F”。接着索引字符串中的“,”,将中间的两个数字字符串拆分出来,使用atof()函数将字符串转换为浮点数。最后将获得的浮点数存入对应的变量中,或者使用调试接口输出,或使用OLED屏输出。

// 串口4数据包解包
void uart4_data_check(void)
{
	if(uart4_rec_check_flag == 1)		// 分析uart4_rec_temp中的数据
	{
		uart4_rec_check_flag = 0;
		if(uart4_rec_temp[0] == 'A')		// 是无人机XY坐标数据包
		{
			int len = strlen(uart4_rec_temp);
			if(uart4_rec_temp[len-1] == 'F')
			{
				char* token;
				token = strtok(uart4_rec_temp,",");
				token = strtok(NULL,",");
				uart4_rec_x[uav_cnt] = atof(token);
				token = strtok(NULL,",");
				uart4_rec_y[uav_cnt] = atof(token);
				uart4_flight_dist = uart4_flight_dist + sqrt(pow(uart4_rec_x[uav_cnt]-uart4_rec_x[uav_cnt-1],2) + pow(uart4_rec_y[uav_cnt]-uart4_rec_y[uav_cnt-1],2));
				printf("A-X: uart4_rec_x[%d]:%f\r\n",uav_cnt,uart4_rec_x[uav_cnt]);		// 测试
				printf("A-Y: uart4_rec_y[%d]:%f\r\n",uav_cnt,uart4_rec_y[uav_cnt]);		// 测试
				printf("A-D: uart4_flight_dist[%d]:%fm\r\n",uav_cnt,uart4_flight_dist/100);		// 测试
				// ......
			}
			// 处理完成后,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
		else if(uart4_rec_temp[0] == 'B')		// 是火源XY坐标数据包
		{
			int len = strlen(uart4_rec_temp);
			if(uart4_rec_temp[len-1] == 'F')
			{
				char* token;
				token = strtok(uart4_rec_temp,",");
				token = strtok(NULL,",");
				uart4_fire[0] = atof(token);
				token = strtok(NULL,",");
				uart4_fire[1] = atof(token);
				printf("B-X: uart4_fire[0]:%f\r\n",uart4_fire[0]);		// 测试
				printf("B-Y: uart4_fire[1]:%f\r\n",uart4_fire[1]);		// 测试
				// ......
			}
			// 处理完成后,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
		else
		{	// 没找到A/B数据包,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/842854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8-7 homework

1.思维导图 2.写一个函数&#xff0c;获取用户的uid和gid并使用变量接收

快速降低javacv依赖包的大小

前言&#xff1a; 由于在项目中需要对视频进行缩略图的截图处理&#xff0c;引入了javacv-platform的包&#xff0c;但是打包后发现打出来的jar包非常的大 后面得知是因为javacv-platform会将所有平台的包集中起来处理&#xff0c;导致包特别的大 处理&#xff1a; 我们在项目…

Linux网络配置与测试

不得不会的网络 一、查看网络配置1.1 显示网络接口的信息 ifconfig命令1.1.1 查看所有已启用的网络接口信息1.1.2 查看所有接口&#xff08;包括未启用&#xff09;1.1.3 查看指定网络接口 1.2 显示当前主机名------hostname命令1.3 查看主机中的路由表信息------route命令1.4 …

【并发编程】ShenyuAdmin里面数据同步用到的无锁环形队列LMAX Disruptor并发框架

并发&#xff0c;数据同步往往是业务开发中比较重要的部分。 shenyu网关数据同步设计方案图 shenyu官网给出的同步设计方案图如下&#xff1a; 基于事件异步并发框架com.lmax.disruptor 下载下示例代码&#xff0c;跑起来发现&#xff0c;在shenyuAdmin模块里面用到了com.lma…

UNITY3D 虚拟数字人方向,动捕设备测评 VDSuit-Full

我们成功的用它做了线下演出活动。 开发测试视频 VDSuit-Full动捕开发 分别说优点和不足 优点&#xff1a; 人工技术答疑及时 有厂家解答各种疑难杂症&#xff08;工作日一般1小时就得到回复&#xff09; 比如穿戴&#xff0c;使用方法&#xff0c;限制等。 动作整体捕捉效果较…

tomcat上部署jpress

一.确保有jdk&#xff0c;tomcat和mysql环境 二.新建jpress数据库&#xff0c;新建jpress用户并赋予所有权限 三.将jpress的war上传到tomcat/apache-tomcat-8.5.70/webapps&#xff0c;具体根据你的实际tomcat安装路径为准&#xff0c;上传完成后他会自己解包 四.到浏览器完…

FFmpeg 编码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。FFmpeg 本身不具有音视频编码的功能和底层能力&#xff0c;只是对各类第三方的编码器API 进行封装调用。老版本的 FFmpeg 将avcodec_encode_video2()作为视频的解码函数 API&#xff0c;将avcodec_encode_audio2(…

24届近5年上海大学自动化考研院校分析

今天给大家带来的是上海大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、上海大学 学校简介 上海大学是上海市属的综合性研究型大学&#xff0c;是教育部与上海市人民政府共建高校&#xff0c;是国家“211 工程”重点建设高校、上海市高水平地方大学建设高校&a…

[JAVAee]网络编程-套接字Socket

目录 基本概念 发送端与接收端 请求与响应 ​编辑客户端与服务器 Socket套接字 分类 数据报套接字 流套接字传输模型 UDP数据报套接字编程 DatagramSocket API DatagramPacket API InetSocketAddress API 示例一: 示例二: TCP流数据报套接字编程 ServerSock…

Go学习第七天

Golang反射reflect机制用法 重点&#xff1a; 转换的时候&#xff0c;如果转换的类型不完全符合&#xff0c;则直接panic&#xff0c;类型要求非常严格&#xff01;转换的时候&#xff0c;要区分是指针还是指也就是说反射可以将“反射类型对象”再重新转换为“接口类型变量” …

6.5.tensorRT高级(1)-alphapose模型导出、编译到推理(无封装)

目录 前言1. alphapose导出2. alphapose推理3. 讨论总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-alphap…

探究Vue源码:mustache模板引擎(11) 递归处理循环逻辑并收尾算法处理

好 在上文 探究Vue源码:mustache模板引擎(10) 解决不能用连续点符号找到多层对象问题&#xff0c;为编译循环结构做铺垫 我们解决了js字符串没办法通过 什么点什么拿到对象中的值的问题 这个大家需要记住 因为这个方法的编写之前是当做面试题出现过的 那么 本文 我们就要去写上…

vue中点击添加类名,并且实现升降序

1.介绍 要求&#xff1a;掌握indexOf()用法&#xff1b;动态绑定类名的对象写法&#xff1b;iconfont使用&#xff1b;split()用法&#xff1b;三元运算符用法&#xff1b;es6模板字符串&#xff1b; 说明&#xff1a;首先综合元素默认有元素并且是降序。服务器传来的数据格式…

ELK、ELFK日志分析系统

菜单一、ELK简介1.1 ELK组件说明1.1.1 ElasticSearch1.1.2 Kiabana1.1.3 Logstash 1.2 可以添加的其它组件1.2.1 Filebeat1.2.2 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;1.2.3 Fluentd 1.3 为什么要用ELK1.4 完整日志系统的基本特征1.5 ELK 的工作原理 …

laravel安装composer依赖

一.问题描述 拉取的新项目没有依赖 项目根目录没有vendor目录 报错 二.安装composer,拉取依赖 1.如果没有composer先去下载 官网地址:Packagist / Composer 中国全量镜像 我的博客安装composer:composer最新版本安装_荒-漠的博客-CSDN博客 2.进入项目根目录cmd或者在项目中…

js-6:typeof和instanceof的区别

1、typeof typeof操作符返回一个字符串&#xff0c;表示未经计算的操作数的类型。 operand表示对象或原始值的表达式&#xff0c;其类型将被返回。 从上面的例子可以看出&#xff0c;前6个都是基础数据类型&#xff0c;虽然typeof null为object&#xff0c;但这只是javascrip…

chaitin-Nginx+Docker

Nginx实战 任务一 1、源码包安装NGINX A&#xff0c;搭建Web Server&#xff0c;任意HTML页面&#xff0c;其8080端口提供Web访问服务&#xff0c;截图成功访问http(s)&#x1f615;/[Server1]:8080并且回显Web页面 官网地址&#xff1a;http://nginx.org/en/download.html 步骤…

webpack基础知识九:如何提高webpack的构建速度?

一、背景 随着我们的项目涉及到页面越来越多&#xff0c;功能和业务代码也会随着越多&#xff0c;相应的 webpack 的构建时间也会越来越久 构建时间与我们日常开发效率密切相关&#xff0c;当我们本地开发启动 devServer 或者 build 的时候&#xff0c;如果时间过长&#xff…

【CSS3】CSS3 2D 转换 - 三种变换的综合写法 ( 同时进行 移动 / 旋转 / 缩放 变换 | 代码示例 )

文章目录 一、三种变换的综合写法 - 同时进行 移动 / 旋转 / 缩放 变换二、代码示例 一、三种变换的综合写法 - 同时进行 移动 / 旋转 / 缩放 变换 CSS3 的 2D 转换有 移动 / 旋转 / 缩放 , 上述 三种 变换 可同时使用 , 使用语法如下 : transform: translate() rotate() sc…

Vue3+Vite+Pinia+Naive后台管理系统搭建之九:layout 动态路由布局

前言 如果对 vue3 的语法不熟悉的&#xff0c;可以移步Vue3.0 基础入门&#xff0c;快速入门。 1. 系统页面结构 由 menu&#xff0c;面包屑&#xff0c;用户信息&#xff0c;页面标签&#xff0c;页面内容构建 ​ 2. 创建页面 创建 src/pages/layout.vue 布局页 创建 sr…