最近没啥可写博客了的,而且自己的毕业设计刚好是ROS的SLAM+MoveIt相关的,怕写的太多论文查重没法通过。

最近有小伙伴联系到我,问了我八个ROS问题,我觉得很有意义,所以在这里给大家整理一下供大家一起学习。

大家在学习有困惑可以发送问题给我(1692697820@qq.com),我会找时间整理并回复大家。也欢迎大家在“泡泡”里面进行提问~

这里我们来讲解第三个问题,如何教授带领成员ROS成员?如何进行ROS培训?


问这个问题的时候,你应该想一下,你要教的是ROS,还是机器人。

​ 如果只是学习ROS,那就是会用ROS的通讯、会使用ROS的工具、会调用和编写功能包,最终来实现一个SLAM小车,又或者是视觉机械臂。但是你真的甘心于此吗?

​ 今年受到最大触动的,是稚辉君的机械臂!这个是真的优秀!

​ 机械设计,PCB设计,电机驱动程序设计,通讯设计,Unity 3D软件设计,算法设计......

​ 这些技能不难,难的是融汇成一个项目。全栈程序员曾经火了一段时间,那么什么是全栈?这里给大家分享一个段子。


​ 有天早上,你突然接到电话,让你早点去公司,平台出了状况:昨晚,应用有15分钟时间失去响应。来到公司,脱下外套,放下早饭,往会议室奔去,还没开门,你已经听到讨论:

系统及安全工程说​ 我会看一下Load Balancer的日志,Web服务器的日志,我要分析一下流量从哪里来,时间点分布,是不是一个安全问题,我可以屏蔽掉来源,加入自动防护一。我要查一下是不是DNS出了问题,机房出了问题,或者什么原因中断了。我会看一下服务器资源,是否有系统错误,或遇到瓶颈,需要增加资源,服务器,硬盘,内存,进程。

 DBA说​ 给我个临时权限,我要看一下数据库日志,是不是那里产生了瓶颈,如果是,是什么语句导致的,我可能需要给数据库更多内存,要数据库优化,可能不得不在某个时候停机维护。

后台程序员说​ 把应用层的日志文件给我,我要分析一下是否和最近的release有关,如果是,具体是哪个改动,根本原因是什么,我们应该修复。

前端程序员对后台程序员说​ 能不能先看看是哪个具体页面,来自前端用户的哪个操作,我想知道是否前端可以优化重构,大请求分小请求,减少请求频率,请求懒加载,缓存更多资源,减轻后台负担。或者有没有来自前端的坏请求。

测试工程师说​ 我会写一个压测方案,压测目标是以此次高峰基准的5倍流量,会纳入回归测试,每次release前跑几次。如果是应用层,我们是否该写个API自动测试?

产品运营方面的人说​ 我们需要一个更友好的错误页面,出现这种情况,平台能至少不让浏览器挂起,用户等待,客户端°要有更好的反馈。​ 我还需要更快的错误通知,现在的邮件是不够的,我想接入短信,1分钟发三条,自动电话更好。​ 对了,有没有回滚方案?

项目经理说​ 我同意,在解决你们说的问题之前,我会推迟明天下午的新版本发布,你们各自要给我一个时限。

​ 你刚才在地铁上,已经把这些都想了一遍。

 你走进会议室,说:我配合你们联调,开始干吧。​ 你回到电脑前,打开各层代码,开启多个终端,打开了IM,疯狂敲打起来,在各个聊天室提出了自己的意见。

 这就是全栈工程师,你具备在各个层次上理解问题的意识,解决问题的能力。


​ 经常也看到有人评论,程序员是要深度,还是要广度。

​ 我觉得深度和广度无所谓,做自己喜欢的事、开心的事。身边有很多朋友,他们喜欢设计电路板、喜欢设计机械、喜欢去探索、去研究、去创造!去找工作不是看你会什么,而是看公司需要什么。公司项目遇到你不会的技术点怎么办,可以先去尝试着学一下,而不是理直气壮的说我不会。我在学校的工作室成员,周六周日都是早上九点来晚上十点走,除了吃饭和陪对象,其他时间都在做自己热爱的事情,这也就是大多数学生口中说的“卷”!

​ 话题聊到这里有些偏激了,也有些跑题。如何教授带领成员ROS成员?如何进行ROS培训?问到这个问题请你思考一下,你要教授的是ROS还是机器人!

 ROS≠机器人

​ ROS系统的学习,其实能讲的部分并不多。做个最坏的假设,你带的这批人只是Linux系统刚入门、只会一点点C语言和Python的情况下(如果这些都不会,建议还是让他们再学学),我觉得你可以带他们先看看ROS的一些视频,那些用ROS开发的机器人是个很不错的选择。然后给他们讲讲ROS的通讯,带着他们写一下ROS通讯的代码,再教他们RVIZ、Gazebo、rqt以及ROS指令的使用。

​ 当他们能实现自己写的代码可以发布/订阅一个话题、请求/响应一个服务、在launch文件和代码中能用起来参数,并且能借助rqt和ROS指令来做一些分析,我觉得这已经算是ROS入门了的。

​ ROS的第二阶段,可以带着他们跑一下古月老师的mbot小车和marm机械臂。这个时候要注意tf坐标变化,一定要通过rqt_tf_tree看到tf树是怎么样的,而且一定要代码实现静态tf的发布、launch文件实现静态tf的发布。尝试带着他们去分析move_base,看看进行slam建图和move_base导航的时候rqt_graph和rqt_tf_tree有什么不同,尝试着去“Kill”点一些节点变成手动发布、代码发布看看有什么效果。如果是机械臂的话,一定要自己配置下moveit_setup_assistant,尝试自己写代码来调用MoveIt编程接口,订阅路径数据和joint_state话题来分析数据组成。这里注重说一点,cmd_vel话题、joint_state话题、odom话题,很重要!!!

​ ROS的第三阶段,可以带着搞下真实的机器人。你可以淘宝花二三百块钱买一套机械臂,尝试用订阅joint_state的方式来实现真实机械臂和ROS系统的连接,其实你会发现真的很简单。又或者是借助ros_arduino_bridge固件来自己设计个小车底盘,闲鱼二手买个雷达、买个树莓派来试着做下真实的SLAM机器人。做SLAM的机器人话,三个点!话题、服务、动作、参数要对的上,TF坐标和时间同步要维护好,系统环境要时刻警惕。

​ ROS的第四阶段,就是多元化的学习。可能你想从事算法相关领域的开发,那就去深入研究下SLAM或者机械臂的算法;可能你想去研究机械结构或者电气相关的开发,那就去学下建模、画板、单片机等等......

​ 到这里ROS的学习也就差不多了。关于学习的广度和深度,如果你毕业在初创公司或者自己创业的话,技术层次的广度很重要,你可能会身兼数职;如果你选择是大公司的话,在某一领域的精通还是很重要的。术业有专攻,我不是很看好什么领域都社区学习,毕竟人的精力是有限的。但是我提倡精通一个领域,辅修多个领域,你可以不会,但是你一定要懂。

​ 过去几年里,我和不少团队聊过,发现绝大部分的团队矛盾都在于——

Server 端的不懂客户端,设计出来个 API 后瞎 BB;

设计师不懂客户端,设计个交互瞎 BB;

客户端不懂 Server,对着 API 瞎 BB;

客户端不懂产品,对着需求瞎 BB;

产品经理不懂需求,对着 Team 瞎 BB。

​ 除了最后的产品经理应该被烧死以外,前四个矛盾都还是有救的。