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 库的程序,您永远不应该并行运行访问传感器或执行器的任何其他程序,因为这会导致此类程序获得错误的传感器值或崩溃。