了解CV和RoboMaster视觉组(三)视觉组使用的软件

--NeoZng【[email protected]

3.视觉组接触的软件

进行视觉开发会用到各种各样的软件、开发环境、辅助工具等,所以很有必要了解一些相关的快捷键、命令、使用技巧。选择一款适合自己的IDE能够提高开发效率,方便版本管理。

3.1.Ubuntu

  • 为什么使用Ubuntu?

    • Ubuntu是一个Debian系分支的第一大系统,是用户量最大的linux发行版。因此,遇到任何问题一般都能够在用户社区askubuntu中得到解答。它的安装也非常的方便,并且在更新到20.04后,ubuntu的桌面美观性也有提升。同时,ROS是在Ubutnu之下开发的。如果要使用ROS,Ubuntu是你的不二之选。

了解CV和RoboMaster视觉组(三)视觉组使用的软件_第1张图片

ubuntu的21.04已经发布了

  • Linux的内核和系统比Windows更加精简,故在运行时占用的各类资源都要小于Windows。在不打开任何应用的情况下,笔者的电脑在运行Windows10时占用的内存为4.2G,cpu占用率在10-20%左右,而运行Ubuntu20.04LTS的时候,只使用了2.2G的内存,cpu占用率只有10%不到。这样,在运行我们的视觉算法程序时,可以更充分地利用系统资源,最大程度压榨电脑的性能。(甚至可以在测试结束后实际运行时关闭图形界面,只保留终端!这样,系统内核作为唯一需要运行的基础程序,大概能将cpu占用率缩小到1-2%)

  • Linux对于深度学习的支持比Widnows更加友好,经常有sh脚本能够一键配置开发环境。此外Linux对一些设备驱动的支持也更完善,我们可以选择挂载自己需要的驱动和IO,并且精简属于自己的内核。

  • 想要安装Ubutnu,可以参阅这篇教程:Ubutnu的安装-排除各种问题!-NeoZng

  • 提到Linux就不得不提到命令行的使用,在Linux上进行开发常会使用到命令行,有些软件甚至只有命令行界面的版本。在一些时候,直接在命令行中用键盘操作可能要比数不清的鼠标点击快得多。你需要学习:

    • cd、ls 、pwd、mv、cp、touch、diff、rm、cat、mkdir、rmdir、echo、tar等文件系统的基本操作,grep、find 查找文件和目录

    • 帮助手册man和-help参数。

    • sudo、su、chmod等权限相关的操作。

    • ping、ifconfig、wget等网络相关的操作。

    • 一定要亲手熟悉命令行的基本命令,切忌只看不动手!学习以上命令,戳这里Linux Commands.

  • 至少掌握一个无GUI的文本编辑器的基本使用,如vi,vim,nano等。这能够帮助你在系统出现问题的时候快速修改一些配置文件,或是在使用ssh连接的时候简单地编写一些程序。当然,笔者不推荐你将这些文本编辑器作为主力IDE使用(即使是安装了各种各样的插件!)例如,虽然一个熟练使用vim的程序员和一个熟练使用eclipse的程序员拥有相同的开发效率,但是vim的学习成本可不知道比eclipse高多少!

  • Linux的设计哲学是“一切皆文件”。它将所有的IO设备如网络接口、usb接口、显示屏、相机、键盘鼠标、应用都视为文件,和这些“文件”的交互就是以规定的方式进行读写。因此,有必要了解Linux的基本目录,目录结构请参考:Linux文件目录结构一览表

  • 在使用系统的时候,建议大家有良好的文件分类习惯,把代码库、软件、开发环境分开存放,避免出现home目录乱糟糟的情况。

 这篇文章就是在Ubutnu下使用markdown编辑器完成的

3.2.IDE

想要编写代码,光靠文本编辑器+gcc+gdb可不行,我们要充分利用技术进步带来的便利,谁不喜欢做懒人呢。这里推荐几款Linux下编写C++程序使用的IDE:

  • VSCode:微软的小儿子,啥系统都能用。丰富的插件生态只有你想不到没有你找不到,配置完之后使用起来非常方便,比如C++就有一个C++ extensions pack关键是好看啊!在使用了snippets和Visual Sutdio Intellicode这两个插件之后,智能提示也很智能。想要写其他的语言也能够一条龙配齐,总之,上手容易且可定制化程度极高。

  • Clion:JetBrain家的IDE,界面也很美观,智能提示也很智能。以前用过PyCharm或者其他jb系的IDE的同学可以继续使用。用.edu后缀的学校邮箱可以免费申请教育优惠,就可以免费用了。

  • Qt:Qt也是一款跨平台的C/C++ IDE,在Qt上编写的GUI程序能够在所有平台上运行。用Qt可以方便地编写一些图形化的程序,比如串口调试助手、调参助手等。他的整体界面也算是比较清爽。

这里需要特别提及的是CMakeLists的编写。Linux没有Visual Studio这样保姆级的IDE,并不存在一款能够自动为你生成makefile的软件。所以至少要学习qmake和cmake中的一种工具。这里推荐cmake,虽然比qmake的语法稍微复杂一些,但是cmake的功能非常强大,拥有非常优良的跨平台支持。学习cmake还能帮助你进一步了解程序的编译、链接过程。关于程序是怎么从源代码到机器代码最后在电脑上运行起来和cmake的基本使用,请参考《程序的生前死后-Cmake-noob-in》-NeoZng这篇文章。

虽然IDE把工具链都集成在了一起,极大地方便了我们的使用,笔者还是推荐你学习一下GNU工具链的使用,至少熟悉编译、汇编、链接的过程。这样可以更深入的了解软件的运行,以便在开发过程中出现问题的时候,快速定位问题所在并找到解决方法。

3.3.Git

团队协作开发需要一款优秀的代码管理工具,那Git就是不二之选,大家肯定都听过GitHub这个最大的同性交友平台,它便是一个基于Git的代码托管平台。这里有个小故事,Git是Linux的元老Linus因为Linux社区被禁止使用BitKeepter这款版本控制软件后,一怒之下在一周之内用C写出来的程序哦。

我们实验室开始的时候都是用u盘拷贝程序,有时候在某个人的电脑上写一点有时候又在minipc上写一点,虽然在文件夹上标准了时间和版本号,然而这并没有什么用,这导致一次合并代码的时候有十多个版本的代码,根本不知道哪个能用哪个不能用,那时候又还不知道diff这个工具,弄得眼睛都快无了。

要学习Git,推荐这几个网站:廖雪峰的git教程 git简易指南-no deep shits! GitHub Guides

在学习Git的时候,一定要动手跟着一起实践,切忌光看不动!

了解CV和RoboMaster视觉组(三)视觉组使用的软件_第2张图片

git的标志性图标,分岔的icon表示强大的分支功能

3.4. 其他常用软件和小工具

  • Microsofot Edge DEV for Linux :Edge浏览器Linux版,可以方便同步windows下的收藏夹、设置、插件等。集锦的功能非常好用。

  • SimpleScreenRecorder :一款录制屏幕的软件。

  • qv4l2:linux下相机驱动的图形界面,在Ubuntu软件商店可以找到,方便调节相机参数。

  • Meld:一款diff软件的图形界面,方便对比文件的不同,在Git使用merge或pull的时候可能会用上,在Ubuntu软件商店可以找到。

  • Fsearch:和Windows下的everything类似,提供超快速的文件搜索功能。

  • Typora:好看好用的markdown编辑器,本文就是使用typora编写的。使用markdown编写代码的说明文档是一个很好的习惯,这可以降低其他人阅读你编写的代码的难度,也有利于代码分享和代码的传承。同时,你的也可以使用markdown来记录自己的学习历程、一次艰难的问题解决之路。使用markdown可以提高你的记录效率。vscode内也有相关插件提供对markdown支持。

  • TigerVNC:一款局域网内可用的远程桌面软件,VNCViewer也可以作为替代。强烈推荐使用远程桌面调车!电控都有无线调试器,我们怎么能跪在地上呢(气抖冷)。在把运算平台安装到机器人上之后,我也曾经拿着一块小屏幕和键鼠,蹲在地上和机器人进行亲密交流,这不仅加深了我和机器人的感情,也加重了我的颈椎病和腰椎键盘突出。(最恐怖的是车车的云台或者底盘疯了的时候,线全部缠到机器人上!!机器人甚至有可能对你造成伤害!!都是电控的锅,你云台怎么又疯了)使用了vnc后,只要将minipc和你的笔记本连接到同一个局域网,你就可以优雅地拿着笔记本调车了。如果校园网的带宽不够,建议买一个路由器,或者和搭建裁判系统的路由器公用也可以。

上交的同学更是把这件事做到了极致,他们直接通过网页来修改机器人的各种参数并得到反馈信息,能做到不需要任何远程桌面就能实时调参,此想法以为妙绝!

你可能感兴趣的:(了解RoboMaster视觉组,ubuntu,linux,ide,开发工具)