基于安卓的视频遥控小车——电脑端开发

基于安卓的视频遥控小车的电脑端程序采用Java语言编写,Java可以做到一次编译到处运行,因为Java程序是在Java虚拟机中运行的,和平台无关,只要平台上有相应的Java虚拟机。

本设计中安卓手机是客户端,电脑是服务器端。采用ServerSocket类与多线程技术相互配合共同完成服务器端与客户端的程序开发。

Socket通信步骤如下图所示。手机采集到的图像通过Socket一帧一帧发送,电脑通过Socket接收每一帧图像。

 

电脑端Java程序主要代码


/**
*在服务器开启情况下,启动客户端,创建套接字接收图像
*/

public class ImageServer {	
    public static ServerSocket ss = null;
    
    public static void main(String args[]) throws Exception,IOException{    
    	ss = new ServerSocket(6000);
        
        final ImageFrame frame = new ImageFrame(ss);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
       
        while(true){
        	frame.panel.getimage();
            frame.repaint();
        }        
    }
       
}

建立好连接后,getimage()负责接收手机端传过来的图像,repaint()负责将接收到的图像绘制在窗体组件上。在此使用的是动画播放原理,实时视频是通过电脑窗体一帧一帧播放图片,形成视频动画效果。没有采用主流的视频压缩分包技术,而是选择牺牲画质。摄像头采集到的是最低画质,这样每一帧图像的数据量就小了,延迟也就下去了。

对小车的控制放在另一个线程中,监听按键的状态来判断要发送的命令。

主要代码如下所示

jb.addKeyListener(new KeyAdapter() {
        	ServerSocket ss;
        	boolean sendFlag = false;//设置标志位,按下时只执行一次,不连续发送
        	public void keyPressed(KeyEvent e) {
        		int KeyCode = e.getKeyCode(); // 返回所按键对应的整数值
        		String s = KeyEvent.getKeyText(KeyCode); // 返回按键的字符串描述
        		System.out.print("输入的内容为:" + s + ",");
        		System.out.println("对应的KeyCode为:" + KeyCode);
        		if(!sendFlag) {
        		try{
        			ss = new ServerSocket(7788);
        			send(KeyCode);
        			ss.close();
        			sendFlag=true;
        		}catch (Exception e1) {

        			e1.printStackTrace();
        		}
        		}
        		
        	}
        	public void keyReleased(KeyEvent e) {
        		int KeyCode = e.getKeyCode(); // 返回所按键对应的整数值
        		if(KeyCode==38||KeyCode==40||KeyCode==37||KeyCode==39) {
        			try {
        				ss = new ServerSocket(7788);
						stop();
						sendFlag=false;
					} catch (Exception e1) {
						e1.printStackTrace();
					}
        		}
        	}

			public void send(int i) throws Exception{
					@SuppressWarnings("resource")
					ServerSocket serverSocket = ss;//new ServerSocket(7788); // 创建ServerSocket对象
					Socket client = serverSocket.accept(); // 调用ServerSocket的accept()方法接收数据
					OutputStream os = client.getOutputStream();// 获取客户端的输出流
					System.out.println("开始与客户端交互数据");
					switch (i) {
	        		case 38:os.write(("01").getBytes());break;//上
	        		case 40:os.write(("02").getBytes());break;//下
	        		case 37:os.write(("03").getBytes());break;//左
	        		case 39:os.write(("04").getBytes());break;//右
	        		} 			
					
					System.out.println("结束与客户端交互数据");
					os.close();
					client.close();
			}
			protected void stop() throws Exception {
				ServerSocket serverSocket = ss;// 创建ServerSocket对象
				Socket client = serverSocket.accept(); // 调用ServerSocket的accept()方法接收数据
				OutputStream os = client.getOutputStream();// 获取客户端的输出流
				os.write(("05").getBytes());//停止
				os.close();
				client.close();
				ss.close();
			}
        });

注意:

此部分源码链接http://www.pudn.com/Download/item/id/3913494.html

对应的小车上的安卓手机程序详见基于安卓的视频遥控小车——车载安卓开发详解

参考的文献

感谢以下博主的文章

基于Socket的Android手机视频实时传输

基于android的远程视频监控系统(已开放源码)

camera拍摄视频并在电脑上显示

Android Studio+Eclipse 利用socket实现视频的实时传输与接收

手机应用介绍 1)用手机替代网络摄像头,更智能,更省电; 2)支持红外遥控玩具遥控车; (移动功能,需要配套本设计红外遥控小车) 3)人脸跟随;(娱乐功能,需要配套本设计红外遥控小车) 使用方法: 1、安装应用,分别在两部手机上安装; 2、将两部手机连入互联网(WiFi,或4G); 3、把其中一部手机放到红外遥控玩具车上; 4、需要注册appID,两部手机用同一个appID 使用时,先将小车上电。将两部手机连接到互联网,打开我们事先编写好的安卓软件,小车上的手机选择小车模式,另一部手机选择控制模式便可以进行操作了,画面右侧控制小车的运动,左侧则是速度的控制。 目录 一、 创意来源 二、 项目概述 三、 优势 四、 功能 五、 制作材料 六、 详细介绍 七、 参考文献 一、创意来源 当今在安防监控领域,大多数民用监控设备有几大弊: 位置固定:大多数设备位置固定,不便移动,即使有一些可以摄像头可以转动,但是仍然无法实现对大部分区域的监控,比如一些存在死角的位置就不会被监控(床底,墙角等等),因此小车的可移动性监控有较为突出的优点。应用在家庭监控领域较为合适,尤其是家中无人的时候。 有线传输,电源线:大多数是有线传输,即使有一些是无线传输,但是仍要被束缚在电源线上。而本小车就不同了,可以直接装个充电宝做备用电源 价格昂贵:当今一套完整的监控设备成本较高。而本小车利用了过时淘汰的手机,大大节约了成本,一定程度上控制了废旧手机的污染。基于当今监控设备这些缺点,构造出了基于安卓视频控制小车。 二、项目概述 本设计是将安卓技术、单片机技术、无线通信技术等相关技术应用到视频监控系统中,可实现视频监控系统的设备移动化,由可移动监控平台、控制软件两部分组成。使用安卓手机作为控制,通过无线网络对监控平台进行移动方向、速度的控制,平台上的摄像头实时采集视频图像信号并通过无线WiFi网络将视频信号实时传输到手机观看,然后可实时拍照录像并可实时存储。由于监控可移动,可以在无人进入的情况下获取危险环境的视频图像。具有控制方便,监控灵活,模块化,可拓展性强等优点,可应用于儿童陪伴机器人、家庭安防、图像采集等领域。 三、优势: 设计之初不完全是为了DIY,我是希望能够做出一款实用便宜易用的产品,所以没有采用常用的DIY开源硬件方案例如arduino,而是选择了价格便宜,应用广泛的STC89C52RC单片机芯片来做控制方案。当然也相信大家能理解我为什么会选择android手机来做智能小车大脑。 1. 我们制作的智能小车抛开性能低下、操作复杂的单片机,使用移动终作为控制,利用移动终(例如手机,电脑,平板)的高性能处理器和低廉的价格,降低了研发成本和研发难度。 2. 通过移动网络或者本地局域网进行连接,可以在任何地方,使用任何设备即可对小车进行远程遥控,对家庭安全进行防护。 3. 与WIFI IP camera对比:1)可以到处跑,因为不需要插着电源线;2)省电,待机长,所以不用担心充电问题。3)监控声音情况。 四、功能: 1)实时视频(android手机摄像头开发) 2)红外遥控车(STC89C52RC ) 3)人脸检测追踪(android手机编程) 下面是 人脸跟随演 和制作过程 的视频: 五、制作材料: 1)控制板包括: STC89C52RC单片机最小系统 红外遥控接收一体化模块VS1838B L293D电机驱动模块 2)小车底盘(淘宝上面有非常多的小车底盘卖,自己任选), 3)马达:TT马达 2个 4)轮子:2个 5)锂电池:2200mAH 两节7.4V + 充电器(可用充电宝代替) 6)杜邦线若干 7) 车载手机支架(有车一族,不用的车载手机支架可以利用) 总共约200左右,如果去掉5)7)剩下的也就100出头 六、详细介绍 0设计文档 资料里的毕设论文只是预览,具体文档请查看这两个链接 [1]:DIY远程视频遥控小车 [2]:DIY远程视频遥控小车(附件:论文) 1相关技术 Android摄像头自定义相机开发、Android人脸检测(FaceDetector)API开发、Android红外遥控开发、Android网络实时音视频传输开发、单片机红外解码及电机控制 。 基于安卓视频控制小车利用了能发射红外信号的安卓旧手机作为核心,通过WiFi将手机或电脑监控与车载手机控制相连接,继而间接实现手机或电脑监控对小车的控制。 通过手机或电脑向手机发送指令,然后手机执行指令向小车发射红外信号进行相应控制,并调用车载手机摄像头将小车前方的图像信息回传给手机或电脑监控。 另外,小车还可以对人脸进行检测跟随,根据人脸在视频中位置,不断调整小车方向直到人脸位于屏幕中心,增强娱乐性。 3相关代码 小车单片机代码 安卓手机代码 特别说明:车载手
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值