ros,全称robot operating system。说它是操作系统,其实也不全对,因为它实现的其实是一个类似于中间件的作用。使用者只需要在上面关注于自己算法的实现,这就可以了,不需要重复造轮子,因为通信、工具、仿真、通用算法、常用硬件驱动,所有这些别人都替你做好了。如果大家有这方面的兴趣,可以先了解下ros,再一步步去做,
1、找一个靠谱的学习视频
在b站上面,有一个ros入门21讲,个人觉得还是比较适合的,https://www.bilibili.com/video/BV1zt411G7Vn。至于他的书,可以买,可以不买。比如,如果视频上面的内容都能理解,就可以不买。
2、ros的构成
ros主要可以分成4个部分,分别是ros通信框架、ros基础命令工具(包括rviz、gazebo)、ros场景算法(导航、slam、moveit)、ros生态(比如第三方硬件厂商的ros包、各种网站,论坛、bbs、wiki等等)。
3、ros依赖的软件平台
ros是运行在linux上面,一般使用ubuntu,不过注意不同的ubuntu版本对应不同的ros版本。
4、ros依赖的硬件平台
通常而言,如果是学习的话,一般ros直接运行在pc上面,如果是开发和部署,一般运行在类似的树莓派这样的开发板上。
5、机器人的硬件平台
不管是导航还是机械臂,除了ros运行在ubuntu的开发板上面,一般还是需要一个stm32的嵌入式开发板,这个是控制电机的,常采用rtos来控制。
6、ros安装
ros的安装,其实非常简单,一句话就可以
sudo apt-get install ros-kinetic-desktop-full
当然,第一次使用的时候,一般需要初始化一下,
sudo rosdep init
sudo rosdep update
接着,将ros的path路径加到环境变量里面
source /opt/ros/kinetic/setup.bash
这个时候,我们输入roscore,如果程序正常运行,其实代表ros已经安装好了,
roscore
如果需要知道详细的安装细节,可以看一下这个链接,http://wiki.ros.org/cn/kinetic/Installation/Ubuntu
7、ros开发常用的语言
主要是python和cpp,其他就是各种脚本的编写、命令的运行了
8、常用的ros命令有哪些
有一些常用的命令都是以ros开头,这些命令都是为了让你调试目前的系统,分析下当前的分布式系统有哪些信息、哪些节点,或者是启动脚本等等,比如
roscore
rosrun
roslaunch
rosparam
rosmsg
rossrv
rosbag
9、创建自己的工作区
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_init_workspace
cd ~/catkin_ws
catkin_make
source devel/setup.bash
cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
10、ros中比较值得学习的navigation和slam
如果是navigation,那么就是amcl算法
如果是slam,那么就是gmapping算法
这两个在工业生产中是用的比较多的。但是,知道了这两个算法,并不等于,可以直接拿来在工业中使用,这还是远远不够的,必须要做一些修改和优化。比如,实际生产中,嵌入式开发板的算力和pc不能比,但是运行效率又不能太低,如何对算法进行加速就是各位小伙伴需要做的事情了。
11、ros其他值得学习的模块
理论上,作为一个框架或者生态,ros除了上面说的导航、slam、moveit,还可以顺带学习下嵌入式电路、rtos、电机控制、图像处理、语音识别、机器学习、深度学习这些,对系统实时性有要求的同学可以看一下ros2、rtlinux这些,看自己的兴趣了。
12、ros生态或者第三方支持
很多硬件厂商都有ros支持包,比如lidar、3d lidar、3d camera,直接github下载、拿过来就能用,不需要自己造轮子,这也算是ros的优势把。
13、ros学习的误区
很多同学,特别是本科学习,或者刚进入研究生的同学,一下子进入ros的世界里面,不知道怎么下手,ros学的又比较杂,其实没有必要,一步一步来,只要按照自己的节奏来,就可以了。重点关注与自己的领域,其他的方面够用就好。比如说,你从来没有学过linux,甚至只用过windows,那么你可以这么做,
先安装一个virtualbox,
然后安装一个ubuntu,
熟悉一下ubuntu的常用命令、使用方法、配置一下网络,
安装一个ros版本,
熟悉一下python语言,看看会不会编译、会不会配置文件
看一下cpp语言,不会的话,找一本《c++ primer》补一下知识,
按照b站上面的ros教程掌握一下分布式通信机制,
看看node、topic、subscribe、publish、service弄懂了没,
自己写几个小程序,测试一下
下载小乌龟程序,
编写程序控制小乌龟,
掌握常用的ros命令,
编译有问题的话,学一下cmake语法,
看看launch的脚本会不会配置
试试rviz、tf、gazebo这些工具,主要为了后面的场景搭建使用
选一个应用领域,比如slam看一下gmapping
搭建一个场景,看看能不能生成map
看看能不能下载amcl源码包
手动控制机器人,看看在map中,能不能用amcl定位
买一个便宜的robot实体,比如阿克曼差速底盘的机器人
将程序部署在robot上
看看pc和robot能不能正常通讯
看看能不能让robot动起来,在robot上运行amcl算法,能不能在map中定位自己
实现amcl在robot上面的加速
robot上压力测试
在robot上测试其他功能,比如摄像头等等
14、最后的话
ros本身内容比较多,也比较杂,专注于自己熟悉的领域就可以了。当然基础部分还是要掌握好,比如通信机制、ros命令,以及linux、python、cpp、cmake调试,这些都是基础中的基础,和专业没有很大的关系。等到领域知识和基础都没有大问题之后,就可以考虑一下如何用ros开发出合适的产品了,是选择工业机器人、消费、医疗,还是其他领域,这个就是另外一个topic了。 这个时候,或许你想做的,就是自己要不要做了扫地机器人呢?:-)反正,一步一步往前走就对了,没有什么捷径。