小蚁工场是广州小蚁智控科技有限公司旗下一个纯粹的项目实训平台,致力于通过项目实训,帮助在校学生培养自主创新意识,提高专业技术与积累项目开发经验。随着智能+、5G技术、物联网和AI人工智能时代的来临,小蚁工场将响应更多的企业与院校需求,综合科技企业最新的软硬件平台,最前沿的技术,不断更新迭代,设计更多符合在校学生的智能物联网实训项目,真正做到“学以致用,知行并进”。本着带同学们学习与接触智能物联网项目开发的初衷,小蚁工场实训平台已在广州大学城开设了大小实训营几十多期,坚持至今,帮助众多同学提升专业技术与积累项目开发经验。期间,有往技术开发方向深入学习的同学,我们将提供企业订制的软件开发类人才优培计划,让你潜力无限,大展身手。同时还会提供相应的技术支持和就业帮助,让我们一起用代码改变世界。
实习内容
一、项目准备
1. 软硬件选型
1)硬件 S5P6818开发板(ubuntu12系统) 搭配显示器 装有摄像头的云台


2)虚拟机 ubuntu16系统 Qt5.5

2.熟悉虚拟机:
实习的第一天,任务主要是搭起虚拟机 ubuntu16系统,并且熟悉linux系统,发给我们的任务也是比较的轻松简单,但由于我已经很久没有使用过Ubuntu了,许多终端命令也忘的差不多了,捡起来也是消耗了不少的时间。

实践一:
Ping 网址
无论是否ping通,都需要ctrl+c来结束操作。
在网页端下载好Linux下的qq版本,在终端输入sudo dpkg -i xxx.deb解压即可获得qq
实践二:
List是网上获取资源安装包的列表,清空防止出错。(主要是一开始直接安装出了问题
rm -rf /var/lib/apt/lists/*
删除后直接终端安装即可。sudo apt-get install mplayer
实践三:
播放视频在终端输入:Mplayer + 视频名称
挂载操作:
先进入/mnt/目录新建一个usb目录
cd /mnt/
mkidr usb
先fdisk -l,然后插上U盘,fdisk -l
查看是否有新的硬盘添加上来了
然后执行挂载
mount -t vfat /dev/sdb /mnt/usb
这里-t vfat 是指的fat的格式,/dev/sdb指的是U盘,/mnt/usb是挂载的地方
cd /mnt/usb
进入这里查看是否能查看到u盘里的内容
如果,没有就新建文件,然后umount /dev/sdb 如果文件消失,而再挂载,又显示,那就表示挂载成功啦。
解除挂载
umount /mnt/usb
实践四:
sudo apt-get install fcitx-table-wubi
下载好后搜索出输入法的配置

点开加号处,添加需要的


将输入法改为fcitx

重启虚拟机,即可

实践五:
sudo apt install apache2
查看安装后的效果,打开浏览器输入这台虚拟机(服务器)的ip:

默认网站的文件根目录是在/var/www/html/下中,接下来我们选择安装php 7.0,命令为:sudo apt-get install php7.0 libapache2-mod-php7.0
查看下php的版本:php -v
另外,现在我们将在网站的文件根目录中创建一个小型php文件(info.php)并在在浏览器中调用它。该文件将显示很多关于我们安装php信息,比如安装的php版本和有用的一些细节。命令:cd /var/www/html/ vim info.php (vim需要自己安装:sudo apt-get install vim)在info.php中写入:
<?php
phpinfo()
?>
好的,现在让我们访问一下info.php文件吧:

然后将制作好的简历放着/var/www/html/目录下即可在web上查看
3. Linux远程目录挂载
1)让虚拟机与arm板处于同一网段,arm板ping通虚拟机
2)虚拟机将远程文件夹设为共享
①虚拟机安装nfs
②打开/etc/exports文件,添加
/mnt/hgfs *(rw,sync,no_root_squash) //用于虚拟机与主机
/nfs *(rw,sync,no_root_squash) //用于虚拟机与arm板
开头为共享的文件夹,后面接客户机(*表示通配),()内为权限选项:
rw表示读写(ro只读)
sync表示同步写
no_root_squash表示当前客户机以root身份访问时,赋予本地root权限
③重启nfs服务
/etc/init.d/nfs-kernel-server restart
③arm挂载远程目录
mount -o nolock 虚拟机地址:共享文件夹 本地挂载目录
-o nolock是不包括文件锁
4.Mplayer的交叉编译安装
1)安装库包:
MPlayer-1.3.0.tar.gz、libmad-0.15.1b.tar.gz
解压
tar xzvf libmad\-0.15.1b.tar.gz
创个文件夹放libmad编译安装之后产生的文件
mkdir libmad_install
关键操作:配置
到了 配置 操作,其中会产生一些文件,包含Makefile:
./configure CC=arm-linux-gcc --host=arm-linux --disable-shared --disable-debugging --prefix=/root/mplayer_workstation/libmad-0.15.1b/libmad_install
对Makefile文件进行删减,删除“-fforce-mem”;
编译、安装
make、make install
安装结束后进libmad_install查看一下tree

解压mplayer
在解压后mplayer文件夹里创建文件夹mplayer_install(为了放置Mplayer编译安装之后产生的文件):mkdir
mplayer_install
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --target=arm-linux --enable-fbdev --disable-static --disable-dvdread --disable-live --enable-mad --disable-win32dll --disable-mencoder --disable-ivtv --disable-dvdnav --extra-ldflags="-L/root/mplayer_workstation/libmad-0.15.1b/libmad_install/lib" --extra-cflags="-I/root/mplayer_workstation/libmad-0.15.1b/libmad_install/include" --prefix=/root/mplayer_workstation /MPlayer-1.3.0/mplayer_install
vim config.mak
添加在“EXTRALIBS”变量值的末端:
只是多加了“/lib”

vim libmpeg2/motion_comp_arm_s.S

在顶端添加
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
vim Makefile

搜索命令(:g/INSTALLSTRIP)
将内容添加installation注释下一行:
INSTALLSTRIP:= #

保存后直接make +make install
在mplayer_install 里的 bin文件找到可执行文件 拷贝出来即可

mplayer /mnt/video.WMV -geometry 100:100 200*80
mplayer /mnt/video.WMV -zoom -x 720 -y 576
geometry可以调整播放位置和大小,zoom则只能调整大小
二、自动追踪防控系统

1.设计ui界面
第三天的任务则是设计出产品的ui界面

上面是纪工设计的样板,我们在对着样本进行ui设计时遇到了两个难点,第一个是往pushbutton按钮种放入图标文字且将其上下排列,我和组员佳财在网上查阅了许多资料都难以实现上图的效果,还是隔壁组的成员提醒我们,将pushbutton改为toolbutton后,实现起来就比较的方便简单。看来纪工一开始让我们用pushbutton设计是一个小小的思维陷阱呀。解决了这个问题,我又遇到了第二个难题,就是实现当前状态的边框,这一块纪工是没有提他用了什么模块的。我将组件一个个拖出来尝试了许多次,再加上百度上搜索多次后,终于发现了。
1. 在QGroupBox控件右键;
2. 选择 Change styleSheet... 选项卡;
3. 在文本框里输入(可以通过对话框上面的Add Resource、Add Gradient、Add
Color、Add Font快速添加属性):
QGroupBox {
border-color: rgb(156, 156, 156);
border-width: 1px;
border-style: solid;
margin-top: 0.5ex;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
left: 10px;
margin-left: 2px;
padding: 0 0px;
}
4. 点击OK按钮;
即可获得同款黑框效果。
2.实现云台的控制
第四天我们的实习目标是实现云台的控制。
1. 舵机基本转动功能
①舵机驱动文件安装

②舵机控制函数 ioctl()(linux下的函数?)

fd = open(dev,mode)
ioctl(fd,转动距离,TURN_LR_CTL)

③舵机转动边界设置
舵机可以180度转动,我们根据转动需求只取其中100度
④按键一直按下舵机能一直转动

控件的autoRepeat属性
如果不勾选autorepeat属性的话,即使按键选择了pressed的事件,也无法实现长按后云台连续移动,就和clicked效果一样了。
2. 云台转动旋转
① 使用定时器技术,定时启动舵机旋转函数

② 设置标志,实现转动到一方向的边界,转动方向翻转
③ 设置 1 : 2的转动速率比(左右转动:上下转动),实现监控区域全覆盖

3. 函数与UI界面结合
使用信号与槽的技术,实现按键点击后启动相应云台控制函数

3.实现图像处理
第五天则需要实现图像处理模块,即从摄像头获取图像,并通过拍照或者录像记录下来。
1. opencv2库
①qt外接库,pro文件条件库路径和头文件路径
②一些类
videoCapture类(图像获取,)
open函数,打开摄像头
查看摄像头设备号
Mat类(存储获取的图像)

VideoWriter类(将图像组合成视频)

③在后面的智能控制模块也用到opencv库
2. 图片和视频
② 视频其实是图片的集合,是将n张图片组合成视频格式

②视频的保存包括视频本身的保存,以及封面图片的保存(通过在视频的一开始,调用拍照功能,截取一张照片,存在视频封面的目录下)
③命名方式
使用日期加时间加文件格式后缀的命名方式

4.实现文件管理
第六天是实现文件管理模块
1. 页面框和列表项
两个页面框分别显示照片和视频
对于单个文件用列表展示,
2. stylesheet(CSS)
背景颜色设置
鼠标悬浮在规定区域,规定区域的变换
在页面框的tab头,背景变红,字体变大
在列表项上,背景天蓝,icon下移
鼠标选中
tab头,背景亮绿
列表项,背景亮绿,屏蔽悬浮效果
3. 双击
4. 右键菜单
右键出现菜单栏(一份对象重复调用)
对于操作对象的判断
①文件重命名
显示、隐藏文本编辑栏
②文件删除
删除本地文件
③刷新
更新文件预览界面
刷新功能应该在重命名和删除操作后自动执行,这儿为了展示相关功能,则没有合并
实习总结及心得体会
无论是前期的环境搭建,还是后期的界面与功能开发,最让我印象深刻的,都是那些老师完全没有提示如何去做的部分。像是1、搭建网站并在上面放上自己的简历,2、交叉编译并在arm板上安装mplayer,3、按钮的图像文字上下分布,4、图像框的设置,5、QTimer的使用,6、stylesheet的运用,7多线程的使用。为此,我们也经常自嘲这是基于百度编程,其中卡住我们的点不一定有多难,很多都是没知道之前找的焦头烂额,但当搜到解决办法的时候,才明白其实不需要太复杂的设置,就像按钮的图像文字上下分布,如果使用pushbutton的话,想要实现这样的功能,则需要在代码层面上修改,并且还要手动调整位置,但如果将button的类型切换成toolbutton的话,则只需要在控件的属性栏里修改即可。又比如QTimer,在一开始没使用定时器的时候,想要实现云台自动旋转的话,需要在实现函数中写一个循环,而当程序进入这个循环后,将会占满进程,导致其它功能完全无法响应。而如果使用了定时器,则只需要在定时器中的槽函数写入一个动作,开启该定时器后,它则会自行进行计时,计时完毕则会运行一次槽函数中的动作,而其它时间,则可以响应别的操作。
















