这几年接触了不少东西,才知道原来在大学的时候欠下了好多债,以前在学校的时候还总觉得课程多,学不过来,后来发现很多东西连门都还没入,真的需要大量的积累啊。想起之前在实验室时,一个博士师兄说,不仅要多看,还要学习整理和总结,觉得非常正确。作为开山第一篇,先把过去接触的东西整理一遍。
OpenCV是开源的计算机视觉库,跨平台且便于移植,由C++构成,于1999年由Intel建立,由Willow Garage提供支持。其官方网站如下:https://opencv.org
最开始学的时候是对照于仕琪翻译的《学习OpenCV》一书,书中用的好像还是OpenCV 1.x版本,有很明显的C语言风格语法。学过C语言和C++编程的人,入门和上手会非常快,简单易学。此外,90后作者毛星云写的《OpenCV3编程入门》也非常好,详细介绍了OpenCV3的使用和调用方法。他的CSDN博客如下:http://blog.csdn.net/poem_qianmo
对于上手和入门,笔者觉得最重要最基础的是要能获取摄像头、图片和视频流数据,进行读写操作和一些简单的矩阵变换,然后再逐渐深入,进行一些算法研究、项目开发等。
OpenCV作为一项工具,主要是为了研究和实际的项目开发,因此在实践中又会遇到大量大量的问题。
笔者在实际开发中主要参考了以下几个人的博客:
北航博士 邹宇华的CSDN博客:http://blog.csdn.net/chenyusiyuan
北大硕士 小魏的修行路:http://blog.csdn.net/xiaowei_cqu
比较有意思的是,这两个人还相互间引用。
不过OpenCV的函数具体用法,最好的讲解还是查看官方网站:https://docs.opencv.org
想起之前在学校的时候,MFC挺火的。后来逐渐发现Qt更好用,同样它也是跨平台,支持多种不同的接口,对于软件开发非常有利。Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架,官方网站:https://www.qt.io
当时对照《Qt5开发及实例》学的,例程简单,上手也快,基本把Qt常用控件和库都讲了一遍。
比较好的博客有 一去、二三里:http://blog.csdn.net/liang19890820,里面有很多很好玩的例程。
此外,要想把界面做得美观和漂亮,除了界面布局、UI设计,QSS的渲染也非常重要。QSS全称Qt Style Sheets,使用qss可将功能与界面的设计分离开,制作更多更美的界面。
关于Qt的函数介绍及其使用,包括QSS,最好最权威的介绍还是Qt assistant或者官方documents。
ROS全称Robot Operating System,ROS的前身是斯坦福人工智能实验室为了支持斯坦福智能机器人STAIR而建立的交换庭(switchyard)项目。到2008年,主要由Willow Garage维护,官网http://www.ros.org
学习ROS比较好的书籍有《ROS by Example》,分上下两册。
安装ROS可以参考官方网站:http://wiki.ros.org/indigo/Installation/Ubuntu,目前比较稳定的版本是indigo和Kinetic。
ROS的基础教程参考http://wiki.ros.org/ROS/Tutorials,需要完整过一遍,才能有所收获。
ROS api的介绍也可以查看官网教程:http://docs.ros.org/api/。
学习ROS确实需要很多方面的知识,ROS主要由C++和python开发,一般运行在Linux系统下,所以Linux的常用指令是需要熟练掌握的。ROS的编译采用catkin_make,实际是对cmake进行了一定的封装,cmake的一些常见语法是需要有所了解的。对于在windows系统下用惯了IDE的同志们,每次在Linux下配置或者加载不同环境都要花费很大功夫。
关于使用什么样的IDE,wiki上还有专门的介绍:http://wiki.ros.org/IDEs ,有十几种。笔者通常使用Qt Creator进行C++编程,使用PyCharm进行python编程,关于安装和配置,wiki上有详细的说明。
总的来说,了解ROS,首先要了解其框架,即工作空间(workspace),包(package),和节点(node,即可执行程序)。常用的通讯机制有topic,server,actionlib,dynamic_reconfigure,一般进行的文件操作为xml和yaml,高级点的用法有pluginlib,nodelet和message_filters等。ROS框架主要是用C++实现的,其中又涉及的库主要有STL即标准C++模板库和boost库(不易看懂,但实用)。
同样,学习ROS最好的教程还是看官方例程,即http://wiki.ros.org,里面有详细的讲解。
ROS是开源的机器人操作系统,因此在github上可以找到源码,毕竟源码面前了无私密。
1、跟ROS核心框架相关的东西,可以在https://github.com/ros上面找到源码;
2、运用ROS进行一些可视化分析,图形界面操作等,可以在https://github.com/ros-visualization上面找到源码,主要是ros和qt或者pyqt的结合使用,非常有帮助;
3、ROS主要是为了解决机器人的控制问题,其中导航开源库可以在https://github.com/ros-planning/navigation查看,机械臂规划则对应的是moveit包。
4、机器人少不了传感器,也就是机器人的感知系统,在https://github.com/ros-perception可以查看大量的源码,如与opencv的配合使用,点云库PCL的使用,激光、IMU数据的采集等。
除了ros官网,国内也有很多大神的博客值得去看和学习,最有名的当属古月居大神。
另外,视觉SLAM就是更上一层次的研究方向,涉及和包括的知识更多,笔者主要看的是清华大学博士生高翔写的《视觉SLAM十四讲——从理论到实践》一书,他的博客和github链接如下:http://www.cnblogs.com/gaoxiang12 ; https://github.com/gaoxiang12 。 这波人还一起建立了泡泡机器人学习网站,以便更好地推广视觉slam。
于深圳