本教程是针对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中实现各个功能,分别是:
- balance_controller:主要实现平衡控制的程序
- ble_app_handler: 实现低功耗蓝牙服务端,并且配置客户端
- imu_handler: IMU数据读取和预处理
- kalman_filter: 实现卡尔曼滤波
- Led_handler: 利用板载LED实现机器人状态展示
- motor_servo_handler: 轮毂电机和舵机的数据读取和预处理
- serial_debug:串口调试程序
- wifi_handler:处理wifi连接
- xgo_protocol_handler: 参数传递
主程序通过调用上述文件实现机器人平衡行走。主程序读取IMU寄存器数据,获得机器人俯仰角等,并调用卡尔曼滤波进行处理,再传递给平衡控制程序进行决策,读取轮毂电机和舵机的数据并写入,通过蓝牙连接实现主动控制,处理Wifi连接,最终利用板载LED程序直观展示机器人的状态,主程序完成上述流程,并可使用串口调试程序调试串口。
上述程序需要调用include中的头文件依赖。在test文件夹中实现了XBox手柄的控制,为机器人的控制提供了便利解法。
