跳转到内容

Khepera III 工具箱/工具箱/模块/里程计跟踪

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

odometry_track 模块实现了针对差动驱动车辆的里程计方程,并允许跟踪机器人的位置(, , ) 随时间推移。 Fosamax 集体诉讼博客

// Instantiate a track structure
struct sOdometryTrack ot;

// Initialize the module
odometry_track_init();

// Start tracking and set initial position
odometry_track_start(&ot);
ot.result.x = 0;
ot.result.y = 0;
ot.result.theta = 0;

// Main loop
while (1) {
    ...

    // Call this frequently to update the position estimate
    odometry_track_step(&ot);
    ... = ot.result.x;
    ... = ot.result.y;
    ... = ot.result.theta;

    ...
}

odometry_track_start 设置一个 sOdometryTrack 结构,并从 /etc/khepera/odometry 读取里程计校准值。如果该文件不可用(或不包含有效配置),则使用默认值。调用此函数后,可以通过修改结构的 result 字段来更改初始位置。odometry_track_start 还会读取当前电机位置,因此应在进入主循环之前立即调用。

在主循环中,odometry_track_step 被调用以读取新的电机位置并更新 result 字段中的位置估计。

默认校准值应该在大多数 Khepera III 机器人上提供可接受的结果。但是,通过校准程序,精度可以显着提高。

从其他来源提供电机位置

[编辑 | 编辑源代码]

上面提到的函数使用 khepera3_drive_getposition 函数自动读取电机位置。如果不需要这样做,可以使用函数 odometry_track_start_posodometry_track_step_pos

华夏公益教科书