1. 初识运动功能库

本教程是针对XGO-Rider轮足机器人系列的开源固件教程。

1.1 Quick Start

开源轮足机器人运动库编写的平台:PlatformIO

在拷贝代码后,选择Build -> Upload,即可编译并烧录固件到机器人本体中。

Build成功的标志:

Linking .pio\build\esp32dev\firmware.elf
Retrieving maximum program size .pio\build\esp32dev\firmware.elf
Checking size .pio\build\esp32dev\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [==        ]  19.5% (used 64016 bytes from 327680 bytes)   
Flash: [======    ]  55.3% (used 1738393 bytes from 3145728 bytes)
Building .pio\build\esp32dev\firmware.bin
esptool.py v4.9.0
Creating esp32 image...
Merged 27 ELF sections
Successfully created esp32 image.
===================================================================================== [SUCCESS] Took 26.06 seconds ===================================================================================== 
*  Terminal will be reused by tasks, press any key to close it. 

Upload成功的标志:

Wrote 1744976 bytes (1090663 compressed) at 0x00010000 in 14.5 seconds (effective 966.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
===================================================================================== [SUCCESS] Took 27.98 seconds ===================================================================================== 
*  Terminal will be reused by tasks, press any key to close it. 

1.2 代码结构

代码结构如下:

├─include
│      balance_controller.h
│      ble_app_handler.h
│      config.h
│      imu_handler.h
│      kalman_filter.h
│      led_handler.h
│      motor_servo_handler.h
│      robot_state.h
│      serial_debug.h
│      wifi_handler.h
│      xgo_protocol_handler.h
│
├─libs
│  └─WireServo
│          WireServo.cpp
│          WireServo.h
│
├─src
│  │  main.cpp
│  │
│  └─modules
│          balance_controller.cpp
│          ble_app_handler.cpp
│          imu_handler.cpp
│          kalman_filter.cpp
│          led_handler.cpp
│          motor_servo_handler.cpp
│          serial_debug.cpp
│          wifi_handler.cpp
│          xgo_protocol_handler.cpp
│
├─test
│      xbox_gamepad_handler.cpp
│      xbox_gamepad_handler.h

其中,我们主要会在modules中实现各个功能,分别是:

  1. balance_controller:主要实现平衡控制的程序
  2. ble_app_handler: 实现低功耗蓝牙服务端,并且配置客户端
  3. imu_handler: IMU数据读取和预处理
  4. kalman_filter: 实现卡尔曼滤波
  5. Led_handler: 利用板载LED实现机器人状态展示
  6. motor_servo_handler: 轮毂电机和舵机的数据读取和预处理
  7. serial_debug:串口调试程序
  8. wifi_handler:处理wifi连接
  9. xgo_protocol_handler: 参数传递

主程序通过调用上述文件实现机器人平衡行走。主程序读取IMU寄存器数据,获得机器人俯仰角等,并调用卡尔曼滤波进行处理,再传递给平衡控制程序进行决策,读取轮毂电机和舵机的数据并写入,通过蓝牙连接实现主动控制,处理Wifi连接,最终利用板载LED程序直观展示机器人的状态,主程序完成上述流程,并可使用串口调试程序调试串口。

上述程序需要调用include中的头文件依赖。在test文件夹中实现了XBox手柄的控制,为机器人的控制提供了便利解法。