# DLBasedVisualPerception **Repository Path**: segway/dlbased-visual-perception ## Basic Information - **Project Name**: DLBasedVisualPerception - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-01-17 - **Last Updated**: 2022-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DLBasedVisualPerception 服务端,代码请见RockerVersion分支 # 路萌航斗系统使用说明 ## 一、安全警告 在修改和调试本程序任何代码的时候,请一定想清楚这样做的效果。在实地调试的时候,务必确定有一个安全员能够在路萌失控的瞬间提起路萌后面的把手!!!!!!!!!我们在修改某处代码(后面我会具体标明)并进行调试时,曾经出现了路萌失控在银杏大道上横冲乱撞并且我们还追不上的情况,所幸当时没有车辆经过,没有造成安全事故。再次强调:  务必确定有一个安全员能够在路萌失控的瞬间提起路萌后面的把手。务必确定有一个安全员能够在路萌失控的瞬间提起路萌后面的把手。务必确定有一个安全员能够在路萌失控的瞬间提起路萌后面的把手。 这不是套话!这不是套话!这不是套话!!!!这是在银杏大道摔了若干次狗吃屎得到的教训!!! ## 二、参考资料 [java教程(这是个超链接)](https://www.liaoxuefeng.com/wiki/1252599548343744) 大家如果C语言学的不错,完全可以在三天以内入门java的。 建议参考章节:java快速入门、面向对象编程、多线程、网络编程、集合、IO(都很简单很快就能看懂的,不要有畏难心理) 《第一行代码Android》:可以去图书馆借。不必全部看完,只需了解每一章在干嘛,然后需要的时候当工具书一样查就好 [高德地图API(这也是一个超链接)](https://lbs.amap.com/) 这个需要大家注册一个账号,并且申请应用,根据API使用教程来自行使用。 ## 三、系统概况 路萌的控制方式可能没有大家想象中那么丝滑,有一点点不好操作,需要大家自行探索。(注:我们本来想实现向游戏一样(例如:原神 王者荣耀)的控制方式,但是不知道什么原因,我们的算法造成了路萌失控。大家可以帮助我们改进算法。 系统由三部分组成: > LoomoGo:运行于路萌上的终端程序 > > 路萌航斗(LoomoGuidance):运行于控制端的手机上的程序 > > 鹊桥(PieBridge):运行于给路萌提供定位的手机上。 LoomoGo占用了4566 4567 4568 4569 共4个端口,其作用分别是: 4566:用于路萌的摄像头图像传输 4567:路萌接受运动指令 4568:接受位置信息 4569:发送位置信息 由于我们水平有限,不能够很好的处理好多线程网络通信,所以只能采取占用多个端口这样不理想的实现办法。 路萌航斗: 使用到的技术有:Android 自定义View Android SurfaceView 高德地图API 鹊桥: 使用到的技术有:高德地图API ## 四、LoomoGo 这里主要介绍一下LoomoGo的一些组成部分,详细信息可以参考代码注释. helper包:这个是老师发的代码里面自带的。 > SegwayService类:包装了路萌的一些功能,具体的讲,speak函数(下称方法)可以让路萌说话,setLinearVelocity可以设置路萌的线速度,setAngularVelocity可以设置路萌的角速度。但是需要注意的是,调用以后路萌只会走一小段距离。要实现让路萌持续运动,需要自己新开一个伺服线程来持续调用。伺服线程可见代码中的ServoThread。需要注意的是:有些地方可能需要加synchronized关键字实现线程锁,但是可能造成线程死锁从而导致路萌失控。 > > YoloV3Tiny(MyYoloV3Tiny):是调用yolo模型的类MyYoloV3Tiny实现了返回多个识别结果 > > 其他的类我没怎么用2333 pilot包:实现路萌的几种导航方式(我的网络遥控代码虽然也在这个包里面,但是是完全独立的,和老师给的几种导航方式没有关系) 我主要讲我的几个类: >ExecuteThread:与控制端建立连接,并且接受指令 > >LocationReceiverThread:用于接受位置信息并将位置信息保存 > >LocationSender:用于向控制端发送位置信息 > >BitmapTrnasferThread:传输图像信息的线程。 ## 路萌航斗 直接开始介绍类: > > >Control类:包装了控制路萌运动的方法,建立连接后直接调用相应的方法即可异步控制路萌运动。(至于为什么要异步,因为android不允许主线程访问网络) > >Headers:控制运动的指令的格式是:命令代码 命令数据。Headers类列举了所有的控制指令代码 > >GetLocationThread:用于异步从loomo获取位置信息 > >InternetVideoSurfaceView:用SurfaceView显示路萌摄像头图像。有兴趣的同学可以去百度一下SurfaceView的具体用法。 > >NavigationView:就是控制路萌运动的那个摇杆(就是左手操作的那个),具体实现可以百度Android自定义View ## 鹊桥 这个不难,说白了就是高德地图API,然后再发送。 简要的介绍就那么多,详细的请阅读代码注释。