SwisTrack/示例/校准/自动顺序
本示例展示了如何通过拍摄在竞技场中移动的标记图像来以自动方式校准您的设置。请注意,这要求您拥有将标记移动到竞技场中精确已知位置的机制。我们之前已经使用以下方法测试过它:
- 经过良好校准的移动机器人四处移动并使用里程计跟踪其位置
- 经过校准的 2 轴移动系统
在本章的其余部分,我们将描述使用 Khepera III 移动机器人的过程。将此方法改编为其他移动机器人(或其他系统)应该相当简单。
设置您的实验竞技场,就像您要运行实验一样。确保相机已正确安装在其最终位置。此外,建议在最终实验的相同光照条件和相同标记下运行此过程。如果您在最终实验中没有标记,请将一个圆形标记(可以与背景很好地区分)放在 Khepera III 机器人顶部。
从 Khepera III 工具箱 中,将 odometry_goto 程序复制到机器人上。该程序使用车轮的旋转(里程计)跟踪机器人的位置。此外,一个简单的控制算法将机器人移动到任何给定的位置。确保您正确校准了 Khepera III 机器人的里程计 - 使用里程计校准不佳的过程会导致巨大误差。在平坦的表面上,经过良好校准的 Khepera III 机器人将在 10 米后积累约 10 厘米的误差。
还将 motor_initialize 程序复制到机器人上并执行它以初始化电机。
在 示例/校准/自动顺序 文件夹中,您会找到一个名为 位置 的文件,其中包含一系列目标点。这些点描述了一个 5x5 网格,网格点之间的间距为 50 厘米。在每个网格点上,机器人都会停止 3 秒,让 SwisTrack 拍摄几张照片。最后,机器人返回原点 (0, 0) 以便验证里程计误差。
将此文件改编为您的竞技场的大小和形状。您也可以使用 create_position_file_grid.pl 脚本生成这样的文件。
准备好位置文件后,将其复制到机器人上。
运行 SwisTrack 并加载您用于实验的配置文件。如果您正在使用任何校准组件,您可以禁用它。将 通过 TCP 输出粒子 组件添加到您的处理管道。
确保您的标记在整个竞技场中都能可靠地检测到,并且没有其他点被检测到。稍后手动删除点非常繁琐且容易出错。
请注意,SwisTrack 必须处于手动模式(即,运行 按钮不能被按下)。
小心地将机器人放置在竞技场中的 (0, 0) 位置。注意方向 - 机器人必须指向 (1, 0) 点。
改编脚本 run_calibration.pl 和 trigger_swistrack_at_target_positions.pl。您将在这些文件中找到说明,但您主要需要提供机器人和运行 SwisTrack 的计算机的 IP 地址。启动
./run_calibration.pl | tee calibration_output
机器人将开始移动到第一个目标点,并在那里等待 3 秒。在此期间,SwisTrack 将拍摄图像并发送机器人的图像位置。这些位置显示在您的终端和 calibration_output 文件中。
要解析 calibration_output 文件,请键入
./parse_calibration_points.pl < calibration_output > matlab_calibration_output
要绘制这些点,请启动 Matlab 并键入
data = load('matlab_calibration_output') plot(data(:, 1), data(:, 2), 'bo');
最后,可以使用以下命令创建 XML 文件:
./write_xml_file.pl < matlab_calibration_output > calibration_points.xml
...