所有关于电路
项目

C-BISCUIT:监控你的机器人的健康

2016年6月10日通过特雷福Gamblin

现在我们已经让Wandboard启动并运行,是时候设置一些工具来帮助我们检查不断增长的机器人的状态了。

在上一篇文章中,我们学习了在Wandboard上安装Ubuntu和ROS的基础知识。这一次,我们需要进一步调整系统设置,并以一种我们可以轻松修改和构建的方式设置它,因为我们需要从系统中获得更具体的信息。

C-BISCUIT系列

  1. C-BISCUIT:黑客和爱好者的机器人平台
  2. C-BISCUIT:设计选择和论证
  3. c -饼干电源:5V 3A降压调节器为棒板
  4. C-BISCUIT电源:撬棍保护电路,用于5V调节器
  5. C-BISCUIT:行动的大脑
  6. C-BISCUIT电源:调节器和撬棍电路的组装和测试
  7. C-BISCUIT:监控你的机器人的健康
  8. 机器人系统架构
  9. C-BISCUIT: rcb单片机原理图设计,电机控制器
  10. C-BISCUIT: RCB-Power, Stepper的原理图设计
  11. C-BISCUIT:机器人控制板的布局和装配
  12. C-BISCUIT:系统集成与测试

必读

不同于行动的大脑这篇文章的一部分内容是精简版的Ubuntu和ROS安装说明,在他们的网站上重新创建大量的ROS教程是不公平的(也是非常不必要的)维基。如果你能看一下这些作为继续这里的一部分,至少到发布者/订阅者在Python中。完成这一步后,您就可以准备撰写关于软件堆栈的下几篇文章了。

最后,由于本文将重点讨论一些bash脚本,如果您不熟悉命令行,建议您对其进行简要概述——我建议您这样做LinuxCommand

关于Wi-Fi问题和更新的说明

如果你在网上找找,你会发现的一些用户与Wandboard的Wi-Fi连接出现问题。

虽然到目前为止我们还没有遇到确切的情况,但在我们的测试中,我们确实看到了一些问题,以更新板上的软件apt-get在某些情况下,系统会在特定软件包的安装过程中冻结。对此,最简单的解决方案似乎是重新启动系统并单独安装该包,然后再尝试更新升级再次命令。

如果你在Wi-Fi或更新方面遇到问题,请务必在下方评论并告诉我们你所看到的情况,以便我们更好地调查。

SSH登录信息

我们接下来要做的第一件事是让Wandboard告诉我们什么是运行和什么不是运行时,我们登录。为此,我们需要再次编辑.bashrc文件,创建一个全新的部分,在那里我们将创建一个名为.ros_status_script

这些修改是在Wandboard本身上进行的,这一点很重要,因为虽然您可以编辑ssh配置文件来完成这一点,但如果您试图从不同的机器和/或环境登录,这将成为一个麻烦。一旦修改完成,每次登录都会为您提供这组基本信息。完整的剧本文本可在我们的网页找到GitHub页面

下面是基本清单脚本第一次迭代的图片。先看一看,然后继续下面的内容,让你了解一下发生了什么:

实际上,这幅画里并没有太多内容。在本文的这一部分中,我说过我们要做的两件事可能涉及很多重复,所以编写一些简短的函数以使反复执行它们变得容易是一个好主意。第一部分提供了包含命令的输出的变量tput不幸的是,这本书的手册页相当模糊。我们使用它将脚本输出的某些部分涂成绿色或红色,以便更容易阅读和找到一些关键信息。

我们遇到的第一个函数,prog_check的输出,是该脚本的核心部分ps cax,它提供活动程序和pid的列表,并使用grep对于我们指定的关键字(因此1美元,意思是在调用函数名时接受函数名后面的第一个参数)。如果对grep的调用找到了什么,它将触发下面的If -else部分输出包含程序名称的一行,旁边是绿色的“Online”;否则,它用红色打印“Offline”。

第二个函数,ssh_check,是一个更简单的功能,应该有助于防止同时运行太多远程登录(这是我绝对有罪的)。sshlist使用的变量告诉我们哪些会话是活动的,以及通向的管道grep - v localhost确保只将不匹配localhost的结果放入变量中。接下来的两个变量使用wc - l获取返回的行数(以及会话数),以及一些基本的shell算法,以提供正在运行的其他会话的计数,然后像以前一样将其全部打印出来。

最后是运行部分。您可以看到,我目前已经对它进行了设置,以便检查早期ROS教程中的turturlesim节点。对于要运行的东西,您可以对许多更重要的关键字这样做,比如找到的Listener和Talker节点在这里

通过在您自己的Wandboard上创建这个文件,并在Wandboard的主目录下的.bashrc文件中添加一行“source .ros_status_script”,该脚本将在每次启动时运行。下面是另一个屏幕截图,显示了roscore、turtlesim_node和turtle_teleop_key全部运行后的另一个终端的输出(总共7个SSH会话!)

ssh计数可能看起来有点奇怪,特别是当您注意到脚本只告诉您其他会话,但列出了所有会话(包括您刚刚登录的会话)时。我写这篇文章的假设是,当你开始时,你的远程登录可能都来自不同的地方(因此是不同的ip),这应该让你更清楚更容易地确定哪一个是你的。

额外的系统信息(和美化)

这是一个很好的开始,但是如果我们在登录时还获得一些关于系统空闲空间、内存使用和CPU负载的信息,可能会有所帮助。另外,我忘了给ssh_check函数的输出上色,这不是必须的,但这肯定是一个很好的处理。我们现在就开始吧。

首先,让我们给sshcheck函数添加一些颜色。这一次,我们用青色来编号。你需要加上这条线青色= ' tput setaf 6 '附近的变量红色的绿色,以及ssh_check中的print语句的青色指示器,如下所示:

如果您现在保存并关闭文件,然后键入源.ros_status_script,您将看到更改后的输出,SSH连接的数量被着色。

我们将使用awk帮助我们格式化命令的输出免费的(记忆)df(磁盘空间)(各种统计,但显示CPU负载)。有一个很棒的堆栈交换回答这对于我们想要做的事情有很好的格式,所以我们将使用那里的示例(对调用进行少量修改df这样我们可以看到一个更高的精度输出)。让我们把它们添加到一个函数中,这样如果我们想做任何改变,我们只需要把它们放在一个地方。

下面是我创建的一个新函数,名为system_check:

保存该文件后,可以再次使用源.ros_status_script为了测试它,或者只是尝试再次通过SSH登录。

连接设备

作为监视脚本的最后一项功能,最好能够判断与机器人连接的是什么——无论它是否是一个真实的设备。这个功能现在还没有那么有用,但一旦它连接到Wi-Fi上,就能方便地了解所有连接到的额外功能是如何工作的。

有几个好方法来做设备检查。由于输出ls / dev应该是相对较小的,我们会使用吗grep再一次,的基线输出进行比较ls当在/dev目录上使用时输出相同的东西应该被连接。

我们需要做的第一件事是转到主目录(如果还没有的话)。从那里,类型Ls /dev > default_devices.txt,您将看到您已经创建了一个包含/dev目录内容的文件。现在我们需要编辑我们的.ros_status_script文件一次。下面我包含了一个函数的截图,我已经添加调用devices_check:

这可能是我们做过的所有函数中最复杂的一个。在它中,我们(暂时)通过重定向来检查/dev中当前的文件列表ls的输出。ls是一个棘手的工具,当你把它的输出直接放入一个变量时做得不好,所以为了能够grep这样的输出,我们先把它作为文本放到文件中。最后,您可以看到这个文本文件被删除了。

newdevs变量存储对grep调用的结果,该调用检查currentdevs.txt中出现的所有行,但没有default_devices.txt。

devcount仅仅是结果的计数(注意,当涉及到挂载文件系统时,我们通常会从同一设备捕获多个分区)。

最后,我们用一些容易看到的着色打印计数,然后,如果有任何结果,我们列出它们。试着连接USB或游戏控制器,看看当你运行它时会发生什么!

关闭评论

这基本涵盖了这个脚本的基本内容,该脚本用于在连接到机器人时告诉您发生了什么。当我们进入软件方面更复杂的部分时,我们将继续调整和改进它,但如果你有自己的想法,那么尽一切可能添加它们。

在接下来的几篇文章中,我们将混合使用硬件和软件,包括将Digikey的Scheme-It工具用于将要创建的I/O板的测试。

干杯!

系列的下一篇文章: