---
author: Kyle Fazzari
category: 观点
comments_data: []
count:
  commentnum: 0
  favtimes: 0
  likes: 0
  sharetimes: 0
  viewnum: 4044
date: '2017-07-31 10:04:00'
editorchoice: false
excerpt: 或许你正在考虑（或正在进行）将机器人使用开源软件推向市场。这个机器人是基于 linux 构建的。也许你正在使用机器人操作系统（ROS）或任务导向操作套件（MOOS），或者是另外一个可以帮助你简化开发过程的开源中间件。
fromurl: https://insights.ubuntu.com/2017/07/18/things-to-consider-when-building-a-robot-with-open-source/
id: 8740
islctt: true
largepic: /images/p/201707/31/000554yitsityp1zh59ehe.jpg
permalink: /article-8740-1.html
pic: /images/p/201707/31/000554yitsityp1zh59ehe.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: 或许你正在考虑（或正在进行）将机器人使用开源软件推向市场。这个机器人是基于 linux 构建的。也许你正在使用机器人操作系统（ROS）或任务导向操作套件（MOOS），或者是另外一个可以帮助你简化开发过程的开源中间件。
tags:
- 机器人
- ROS
- IoT
thumb: false
title: 使用开源代码构建机器人时需要考虑的事项
titlepic: true
translator: SunWave
updated: '2017-07-31 10:04:00'
---

![](/images/p/201707/31/000554yitsityp1zh59ehe.jpg)


或许你正在考虑（或正在进行）将机器人使用开源软件推向市场。这个机器人是基于 linux 构建的。也许你正在使用[机器人操作系统](http://www.ros.org/)（ROS）或[任务导向操作套件](http://www.robots.ox.ac.uk/%7Emobile/MOOS/wiki/pmwiki.php/Main/HomePage)（MOOS），或者是另外一个可以帮助你简化开发过程的开源中间件。当开发接近实用化，对回报的期望开始给你带来一些压力。你可能会被问到“我们的产品什么时候可以开始销售？”，这时你将面临重要的抉择。


你可以做下面两件事之一：


1. 对现有的产品开始出货
2. 回过头去，把产品化当做一个全新的问题来解决，并处理新的问题


不需要看很远，就可以找到采用方式（1）的例子。事实上，在物联网设备市场上，到处都是这样的设备。由于急于将设备推向市场，这些可以在设备中找到硬编码证书、开发密钥、各种安全漏洞和没有更新方式的产品并不少见。


想想 Mirai 僵尸网络，通过该僵尸网络发起的流量超过 1Tbps 的分布式拒绝服务攻击（DDos），导致一些互联网上最大的网站停止服务。这个僵尸网络主要由物联网设备组成。这种攻破设备的防御机制进而控制设备所开发的僵尸程序，是采用了超级酷的黑魔法在一个没有窗户的实验室（或地下基地）开发的吗？不是，默认（通常是硬编码）证书而已。这些设备的制造商是否快速反应并发布所有这些设备的更新，以确保设备的安全？不，很多制造商根本没有更新方法。[他们召回设备而不是发布更新](https://krebsonsecurity.com/2016/10/iot-device-maker-vows-product-recall-legal-action-against-western-accusers/)。


不要急于将产品推向市场，而是退后一步。只要多思考几点，就可以使你自己和你所在公司避免痛苦。


例如，**你的软件如何更新？**你*必须*能回答这个问题。你的软件不是完美的。只要几个星期你就会发现，当你在加利福尼亚使用自主的高机动性多用途轮式车辆（HMMWV）时，它把小灌木识别为一棵橡树。或者你不小心在软件中包含了你的 SSH 密钥。


**基础操作系统如何更新？**也许这仍然是你的产品的一部分，也是你回答上一个问题的答案。但也许你使用的操作系统来自于另外一个供应商。你如何从供应商那里得到更新并提供给客户？这就是安全漏洞真正让你头痛的地方：从来不更新的内核，或者严重过时的 openssl。


当你解决了更新问题，**在更新过程出现问题时，机器人怎么恢复？**我的示例是对前面问题的一个常见解决方案：自动安全更新。对于服务器和台式机以及显然是计算机的东西来说，这是一个很好的做法，因为大多数人意识到有一个可接受的方法来关闭它，而*不是*按住电源按钮 5 秒钟。机器人系统（以及大多数物联网系统）有一个问题，有时它们根本不被认为是计算机。如果您的机器人表现奇怪，有可能会被强制关闭。如果你的机器人行为奇怪是因为它正在快速安装一个内核更新，那么，现在你就有一个安装了半个内核的机器人镇纸了。你需要能够处理这种情况。


最后，**你的工厂流程是什么？**你如何安装 Linux，ROS（或者你使用的中间件），以及你要安装在设备上的你自己的东西？小的工厂可能会手工操作，但这种方法不成规模，也容易出错。其他厂商可能会制作一个定制化的初始发行版 ISO，但这是个不小的任务，在更新软件时也不容易维护。还有一些厂商会使用 Chef 或者有陡峭学习曲线的自动化工具，不久你就会意识到，你把大量的工程精力投入到了本来应该很简单的工作中。


所有这些问题都很重要。针对这些问题，如果你发现自己没有任何明确的答案，你应该加入我们的[网络研讨会](https://www.brighttalk.com/webcast/6793/268763?utm_source=insights)，在研讨会上我们讨论如何使用开放源代码构建一个商业化机器人。我们会帮助你思考这些问题，并可以回答你更多问题。




---


作者简介：


Kyle 是 Snapcraft 团队的一员，也是 Canonical 公司的常驻机器人专家，他专注于 snaps 和 snap 开发实践，以及 snaps 和 Ubuntu Core 的机器人技术实现。




---


via: <https://insights.ubuntu.com/2017/07/18/things-to-consider-when-building-a-robot-with-open-source/>


作者：[Kyle Fazzari](https://insights.ubuntu.com/author/kyrofa/) 译者：[SunWave](https://github.com/SunWave) 校对：[wxy](https://github.com/wxy)


本文由 LCTT 原创编译，Linux中国 荣誉推出