跳转到内容

Khepera III 工具箱/工具箱/程序

来自维基教科书,开放的书籍,开放的世界

程序文件夹包含一系列在 Khepera III 机器人上运行并与其传感器和执行器(电机)交互的有用程序和算法。这些程序也是 实现自己的算法 的有用模板。在本章中,我们将简要解释如何使用这些程序。

程序列表

[编辑 | 编辑源代码]

红外传感器(包括两个红外地板传感器)

  • infrared_ambient: 测量所有红外传感器的环境红外光。
  • infrared_proximity: 测量所有红外传感器对障碍物的距离。

电机

  • motor_initialize: 初始化两个电机。此程序必须在打开机器人后启动。
  • motor_setspeed: 设置电机速度。
  • motor_stop: 立即停止两个电机。
  • motor_setposition: 设置电机编码器的当前位置。
  • motor_gotoposition: 将电机驱动到特定的电机编码器位置。
  • motor_getposition: 返回电机编码器的当前位置。
  • motor_configuration: 打印两个电机的完整配置(寄存器)。
  • motor_setspeedprofile: 设置梯形速度曲线。

超声波

  • ultrasound_enable: 启用或禁用超声波传感器。
  • ultrasound: 使用超声波传感器测量与障碍物的距离。

电池

  • battery: 返回电池的当前状态。

一般

  • firmware_version: 返回 dsPIC 和电机 PIC 的固件版本。
  • test_math: 测试一些数学函数。此程序更多地充当模板,而不是有用的程序。
  • tcp_server: 演示如何编写接受 TCP 连接的程序。
  • i2c: 通用 I2C 工具。
  • i2c_readstream*: 从 I2C 设备读取数据流。

运动

  • motion_braitenberg: 使用布莱滕贝格算法实现物体跟随、避障和墙体跟随。
  • motion_arrowkeys: 允许使用键盘在周围驾驶机器人。
  • motion_followline: 使机器人沿着地面的线条行驶。
  • motion_forwardbackward: 使机器人持续向前和向后移动。
  • motion_random: 使机器人随机在周围行驶。
  • motion_spiral: 使机器人沿着螺旋线移动。

里程计

  • odometry_track: 使用编码器值基于差速驱动里程计跟踪机器人的位置。
  • odometry_goto: 使用里程计跟踪其位置,将机器人驱动到给定的目标位置。

标有星号 (*) 的程序目前不完整,需要进行一些修改。

启动程序

[编辑 | 编辑源代码]

每个程序都存储在 Programs 的子文件夹中 - 其中包含其源代码、Makefile、编译后的二进制文件以及可能的其他资料。二进制文件是为 Korebot 平台(运行 Linux 内核 2.4 的 ARM 处理器)编译的,因此只能在 Korebot 上运行。

要使用程序,请先将其复制到您的机器人上

cd Programs
k3put +usb infrared_proximity

(如果您的机器人通过 WLAN 连接,请将 +usb 替换为 +RobotID。)然后,通过键入以下内容登录到您的机器人

k3go +usb

并在那里启动程序

cd your_username
./infrared_proximity

该程序将直接在终端窗口中写入其输出。

获取帮助

[编辑 | 编辑源代码]

每个程序在使用 -h 选项启动时都会打印一些帮助文本,例如

./infrared_proximity -h

将程序的输出重定向到文件

[编辑 | 编辑源代码]

在某些情况下,您可能希望将程序的输出(例如红外距离测量值)写入文件,而不是将其显示在屏幕上。标准 Linux 工具提供了多种实现此目的的方法

要将输出写入 机器人上的文件,只需在启动程序时将输出重定向到文件即可

./infrared_proximity > my_infrared_proximity_measures

请注意,机器人的可用空间只有大约 1 MB。

要将输出写入 计算机上的文件,请通过 SSH 启动程序并将输出重定向到文件。对于不熟悉 SSH 的人来说,这可能会有点棘手。但幸运的是,有一个 Khepera III 脚本可以自动完成所有这些工作

k3run +usb -o my_output_file /root/your_username/infrared_proximity -r

如果您的机器人通过 WLAN 连接,请将 +usb 替换为 +RobotID。这会通过网络连接传输程序的输出并将其存储在计算机上 k3-192.168.1.2 文件夹中的 my_output_file 文件中。这实际上比将输出写入机器人上的文件更快(即使这听起来不直观),因为 WLAN 传输通常比写入机器人的闪存更快。

同时运行多个程序

[编辑 | 编辑源代码]

您可以在机器人上同时运行多个程序。例如,如果您想要使用键盘控制机器人(motion_arrowkeys)并同时记录红外传感器测量值(infrared_ambient, infrared_proximity),或者跟踪机器人的路径(odometry_track),这可能很有意义。这也适用于使用后台运行的程序监控电池电量。

要实现这一点,您可以在同一个机器人上多次登录(k3go),在后台运行一个程序(例如./infrared_ambient > my_measures &),或从计算机启动一些程序(k3run).

但是,有一些事情需要注意

  • 同时运行两个都设置电机速度的程序 没有 意义。每次一个程序设置速度时,旧速度都会被覆盖,从而导致相当不可预测的行为。
  • 一个程序可能会减慢另一个程序的速度。CPU 是一种共享且有限的资源(使用top检查 CPU 使用率),但更重要的是用于与机器人传感器和执行器通信的 I2C 总线。因此,您应该避免使用多个程序并行读取同一个传感器值。

重要说明:如果您正在运行基于 K-Team libkorebot 库的程序,您永远不应该并行运行访问传感器或执行器的任何其他程序,因为这会导致此类程序获得错误的传感器值或崩溃。

华夏公益教科书