找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 8589|回复: 16

Lookie - 手机遥控摄像机器人(进行中……)

[复制链接]
发表于 2012-12-27 16:16:21 | 显示全部楼层 |阅读模式
本帖最后由 Programus 于 2012-12-31 18:38 编辑

终于结束了历时长久的出差,回到家里。
开始新的机器人项目——一个Android手机遥控偷窥……不,是摄像机器人。
命名为Lookie。

设计为在机器人上固定一台Android手机充当摄像头,另一台手机充当遥控器。
遥控器可以操纵机器人的移动以及摄像头手机部分的仰起角度,摄像头手机自动传送拍摄到的图像给遥控器。

机器人组装完毕,目前处于程序撰写阶段。

近期有了一点小阶段性成果,已经可以通过遥控器手机遥控机器人移动了。

先放个测试视频,留作纪念。


遥控的操作界面采用了两条拉杆,分别控制左右轮引擎。单手操作时,自动同步两轮。
这种操作界面的好处是可以任意调节速度,并支持原地打转。

现在在研究两台Android手机的连接、角度计算和同步、摄像头控制等……

代码随时更新在如下项目中,但目前没有注释,有兴趣看的朋友,请自悟。

https://github.com/programus/lookie

NXT中刷的是LeJOS。


2012-12-31 更新:
2012年最后一天,更新一下。
机器人的主体功能基本都完成了。
可以遥控移动,可以在控制器端看到拍摄的内容,可以遥控拍摄,可以遥控开闪光灯。
以下是一段遥控录制的视频。


视频很奇怪,脚丫子后面的部分有时候会自动跳掉,拖到脚丫子处,就可以看到后面了。虽然看不看也没什么影响……

目前的拍摄,由于Android相机录像API的限制,只能保存成图片序列,并无法直接生成视频。需要后期自行将JPG图片序列处理为视频。故而也就没有音频信息了。

关于图片的处理和传送,为了能够录制清晰的视频,改变了上一次的调整相机预览分辨率的做法,而是在相机端首先进行大小裁剪,然后再做二次压缩进行传送。图片的大小和压缩质量可以通过遥控端进行调整。
另外为了提高效率,对图片处理和录制改用了多线程处理。
话说为了调整性能,可是被折磨地够呛。

详细代码可以参看如下几个文件:
https://github.com/programus/loo ... ageTransporter.java
https://github.com/programus/loo ... gVideoRecorder.java
https://github.com/programus/loo ... ImageUtilities.java

因为采用的是胶皮履带做轮子,所以晃动很严重。求高人指点消除方法。
当然,是在不增加零件种类的前提下。


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2012-12-27 16:27:09 | 显示全部楼层
补一个Lookie本体的照片。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-27 17:29:44 | 显示全部楼层
之前我写了一个类似的程序,也是手机采集数据发送到控制端,但是有这样一个问题,数据量太大,局域网还可以,如果想在外网遥控机器人的话,采集到的视频就会丢帧,不知道您有什么好的视频压缩方法?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-27 18:45:05 | 显示全部楼层
视频 用蓝牙传行不行?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-27 20:23:43 | 显示全部楼层
很高玩的样子,等待您的研究结果。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-27 21:45:49 | 显示全部楼层
糖伯虎 发表于 2012-12-27 17:29
之前我写了一个类似的程序,也是手机采集数据发送到控制端,但是有这样一个问题,数据量太大,局域网还可以 ...

还没走到那一步呢。
目前是计划用蓝牙来送。不知道行不行……
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-27 22:44:39 | 显示全部楼层
Programus 发表于 2012-12-27 21:45
还没走到那一步呢。
目前是计划用蓝牙来送。不知道行不行……

我用的是wifi
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-28 20:37:55 | 显示全部楼层
基本功能已经完成了。
用蓝牙连续传图片果然很有挑战性。

最终采用最小分辨率+两次压缩才算顺畅地实现了传送。但这样无法清晰查看镜头前的内容。
所以在遥控端加了一个切换分辨率的功能。
摄像头端,对大分辨率图片,采用主动跳帧的方式来避免网络阻塞。当然,这样在遥控端的卡顿现象就会比较严重。

目前在考虑要不要加上一个开闪关灯做照明的功能。
有空再整理个视频出来吧。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-28 20:40:06 | 显示全部楼层
代码已经上传。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-28 22:05:15 | 显示全部楼层
Programus 发表于 2012-12-28 20:37
基本功能已经完成了。
用蓝牙连续传图片果然很有挑战性。

能说说你的压缩原理么?我采用320x240的分辨率,在wifi环境下,没有卡顿,清晰度也可以接受。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-28 22:32:24 | 显示全部楼层
糖伯虎 发表于 2012-12-28 22:05
能说说你的压缩原理么?我采用320x240的分辨率,在wifi环境下,没有卡顿,清晰度也可以接受。

先有损压缩成JPEG格式,然后用Java的GZIP库压缩。两个都是现成的API。呵呵……其实没什么技术含量。
目前对蓝牙限制在每毫秒25byte的数据量。也就是25000byte/s,约25KB/s吧。
320x240,记得压缩后,一个图片3K多点,不到4K。在我上面这个速度限制下,勉强可以。机器人运动速度不快的时候影响不大。

具体的代码,在下面文件里:
https://github.com/programus/loo ... a/MainActivity.java
搜索 compressImage这个函数。
为了迎合Android的默认的Preview的格式,源数据是UV21的。具体什么是UV21,我也没太搞明白,代码是从网上抄来之后根据需要自己重组的。

如果是54Mb/s的Wifi的话,理论上应该可以支持更大的图片。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-28 22:34:01 | 显示全部楼层
说实话,真要想连续视频传送,搞清楚流视频的编码方式才是最有效果的吧。可惜不会又懒得去研究……
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-29 18:23:14 | 显示全部楼层
楼主高人!!学习了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-12-30 13:26:21 | 显示全部楼层
支持了!膜拜中......

不过,为何不用WIFI传图呢?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-12-30 17:44:50 | 显示全部楼层
blackblue 发表于 2012-12-30 13:26
支持了!膜拜中......

不过,为何不用WIFI传图呢?

使用Wifi的话,如果是没有Wifi覆盖的地方就不能用了,但使用蓝牙则可以在覆盖范围内的任何地方使用。
而且,NXT不支持Wifi,所以只要使用NXT,就一定要在蓝牙覆盖范围内,那么附加的一个Wifi覆盖条件就变成了一个很累赘的限制。
另一方面,使用Wifi还得填写设备的IP地址,比较麻烦……(好吧,你就鄙视我的懒惰吧……)
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-6-26 21:27 , Processed in 0.149883 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表