上篇聊了V模型,它是一套系统设计方法论。方法论再好,最终还是要靠人来落地。机器人项目的团队构成天然就是跨职能的——算法工程师、嵌入式工程师、机械工程师、电气工程师、产品经理、测试工程师,大家背景不同、思维方式不同、用的工具不同,怎么高效协作?很多技术问题归根到底是沟通问题。面试时如果被问到"你怎么和其他角色配合",能给出具体做法的人比只说"我沟通能力好"的人有说服力得多。

机器人团队的协作难点在于:各专业之间存在"知识壁垒"。算法工程师不理解为什么嵌入式工程师说"这个实时性做不到",嵌入式工程师不理解为什么算法工程师说"降低采样率会影响精度"。产品经理不理解为什么"加个小功能"要改一周,测试工程师不理解为什么"这个bug修不了"。这些不理解积累下来,就变成了跨部门的矛盾。

接口契约——减少扯皮的基础

跨职能协作的第一个问题是接口定义。软件模块之间有API接口,软硬件之间有电气接口,算法和系统之间有性能接口。接口不清楚,集成时一定出问题。

接口契约(Interface Contract)是一种正式的约定:A模块给B模块提供什么数据、什么格式、什么频率、什么延迟要求。写下来,双方确认,后续有争议时按契约说话。这听起来很简单,但很多团队的接口约定只存在于某个人的脑子里或者某次开会的口头讨论中,过两周就没人记得了。

我们团队的做法是用一个共享的接口定义仓库。所有模块间的接口用YAML或Protobuf定义,放在一个独立的Git仓库里。任何一方要修改接口,必须提交PR,对方review通过后才能合入。接口的版本和代码版本同步管理。集成测试时自动检查实际数据和接口定义是否一致。

硬件接口同样需要契约。机器人底盘和上位机之间的通信协议、传感器和控制器之间的电气参数、电机驱动的指令格式——这些都应该在硬件接口文档中明确定义。机械工程师改了底盘结构但没告诉算法工程师,导致激光雷达的安装位置变了,整个导航标定全废——这种事故在有接口管理的团队里不会发生。

日常沟通——少开大会,多开小会

很多团队的沟通效率低是因为"大会太多、小会太少"。十个人坐在一起开一个小时的全员会,其中七个人和讨论的话题没关系,纯粹在浪费时间。

更高效的沟通模式是:全员会少开(每周一小时足够),专题讨论多开(相关人员参加,控制在三到五人),一对一沟通随时进行。全员会的目的是同步进展和重要信息,不是讨论技术细节。技术讨论拉上相关的人开个专题会,半小时搞定。

站会(Stand-up Meeting)在机器人团队里要特别注意效率。每个人回答三个问题:昨天做了什么、今天要做什么、有什么blocker。算法工程师说"我在调激光雷达的外参标定",嵌入式工程师听到了可能会说"我昨天改了驱动层的时序,可能影响你的标定结果"——这种信息的碰撞是站会最大的价值。

## 站会记录模板
### 张三(算法)
- 昨天:完成动态障碍物检测模块的单元测试
- 今天:和嵌入式联调通信延迟问题
- Blocker:等嵌入式确认CAN总线延迟数据

### 李四(嵌入式)  
- 昨天:优化了CAN驱动,延迟从5ms降到2ms
- 今天:和张三联调,验证新的延迟表现
- Blocker:无

异步沟通工具也很重要。不是所有事情都需要开会。技术讨论用Slack或者飞书的群聊,文档评审用Confluence的评论功能,代码问题用GitHub的Issue。关键是选择对的沟通渠道:紧急的事打电话或当面说,需要记录的事用文字,需要讨论的事开会。

知识共享——打破信息孤岛

跨职能团队的另一个常见问题是信息孤岛。算法组知道的东西嵌入式组不知道,反过来也一样。信息不流通会导致重复劳动和错误决策。

知识共享的机制有几种:

技术分享会:每两周一次,轮流由不同角色的工程师做一个二十分钟的技术分享。算法工程师给嵌入式工程师讲讲"为什么点云处理需要这么多算力",嵌入式工程师给算法工程师讲讲"为什么实时性保证需要固定优先级的调度"。互相理解对方的约束和难点。

交叉Code Review:让不同背景的人review你的代码。算法工程师review嵌入式工程师写的控制代码,可能会发现"这个PID实现有个积分饱和的问题"——这种跨领域的review往往能发现同领域的人习以为常但实际有问题的地方。

技术Wiki:团队共同维护一个知识库,记录常见问题和解决方案。"怎么标定激光雷达到底盘的外参"、"怎么排查CAN总线丢包"、"怎么配置DDS的QoS策略"——这些跨职能的实用知识放在Wiki里,新人来了直接看,不用反复问老员工。Wiki的维护不能只靠一个人,每个团队成员都有责任在解决了一个新问题后把经验写上去。我们团队有个规定:每次解决了一个超过四小时才搞定的问题,必须写一篇Wiki总结。

新人入职的跨职能培训也很重要。算法工程师入职后,花一天跟着嵌入式工程师看看硬件调试的过程,花一天跟着测试工程师跑一遍系统测试用例。这样新来的算法工程师写代码时就会考虑"嵌入式同事拿到我的代码后要怎么部署"以及"测试同事要怎么验证我的功能"。很多协作问题的根源就是不了解对方的工作内容和约束条件,跨职能培训能从根本上缓解这个问题。

代码之外的协作也需要规范。比如机器人真机的使用排期——谁什么时候用哪台机器人做什么测试,需要一个共享日历来协调。我们团队曾经因为没有排期管理,两个人同时在同一台机器人上调试,一个在改控制参数一个在跑导航测试,结果导航测试结果全是异常数据,浪费了一整天排查"为什么导航突然变差了"。

冲突处理——对事不对人

跨职能合作中冲突是不可避免的。算法说"必须用更高算力的平台",产品说"成本超了",测试说"这个功能没法自动化测试"。怎么处理?

原则是对事不对人,用数据说话。"必须用更高算力的平台"——为什么?现在的平台差多少?有没有算法层面的优化空间?"成本超了"——超多少?如果降算力,性能和成本的trade-off是什么?把情绪和立场放在一边,把数据和事实放在桌面上讨论。

如果数据无法解决分歧(比如确实需要在性能和成本之间做选择),那就升级到有决策权的人来拍板。不要让技术分歧变成部门之间的拉锯战——消耗时间、消耗信任、消耗士气。有个技巧是设置"分歧超时"机制:两个团队之间的分歧超过三天没解决,必须升级到项目经理或技术总监。这不是在告状,而是在保护项目进度。

面试追问

"你怎么处理和其他部门的沟通分歧?"带着数据去沟通。比如嵌入式团队说通信延迟做不到我的要求,我不会说'你们技术不行',而是先了解他们的约束是什么,然后一起看看有没有折中方案——也许是降低通信频率但增加预测补偿,也许是换一种通信协议。关键是理解对方的难处,一起找解法。

"你在团队中担任过协调角色吗?"我做过导航模块和感知模块之间的接口协调。两边对数据格式有分歧,感知想输出更丰富的信息,导航只想接收必要的数据减少带宽。我组织了一次专题会,用性能测试数据说明了每种方案的优劣,最终达成了一致。

"远程协作怎么保证效率?"工具层面用Slack+Jira+Confluence。流程层面明确响应时间——Slack消息两小时内回复,邮件当天回复,blocker级别的问题即时响应。文化层面鼓励文字化沟通——能写清楚的不开会,开了会一定要有文字记录。远程最怕的就是信息在口头沟通中丢失。


团队协作能力是工程师最容易被低估但实际最重要的能力之一。技术能力决定了你能解决什么问题,协作能力决定了你能让多少人一起解决问题。一个人再厉害,做出的东西也只是一个模块。一个协作良好的团队,能做出一个完整的产品。

机器人项目天然需要跨职能协作,因为机器人是一个多学科交叉的系统。算法、嵌入式、机械、电气、产品、测试——每个角色都有自己独特的视角和专业知识。把这些不同视角整合在一起,才能做出既技术先进又商业可行的产品。

下一篇聊技术文档写作能力。前面几篇我们分别讲了设计文档、API文档、用户手册,这篇从更高的视角来聊:为什么文档能力是工程师的隐藏加分项,怎么系统性地提升这个能力。


如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。

「机器人软件开发面试·从入门到精通」连载系列 

上一篇:第338篇 系统设计方法论——V模型在机器人开发中的应用

下一篇预告:第340篇 技术文档写作能力——工程师的隐藏加分项

有任何问题欢迎评论区留言,我会尽量回复。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐