feat: 更新第九章

This commit is contained in:
fishros
2025-02-22 20:45:21 +08:00
parent 497be290f4
commit 2738b34dc1
225 changed files with 42292 additions and 10 deletions

View File

@@ -0,0 +1 @@
.pio

View File

@@ -0,0 +1,531 @@
//
// !!! WARNING !!! AUTO-GENERATED FILE!
// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
//
{
"configurations": [
{
"name": "PlatformIO",
"includePath": [
"/home/fishros/chapt9/fishbot_motion_control/include",
"/home/fishros/chapt9/fishbot_motion_control/src",
"/home/fishros/chapt9/fishbot_motion_control/lib/PidController",
"/home/fishros/chapt9/fishbot_motion_control/lib/Kinematics",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code/arduino",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/libmicroros/include",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code/arduino/wifi",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/Esp32PcntEncoder",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/Esp32McpwmMotor",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/mem/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/add/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/addc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mulc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/sub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/test/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/variants/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
""
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"path": [
"/home/fishros/chapt9/fishbot_motion_control/include",
"/home/fishros/chapt9/fishbot_motion_control/src",
"/home/fishros/chapt9/fishbot_motion_control/lib/PidController",
"/home/fishros/chapt9/fishbot_motion_control/lib/Kinematics",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code/arduino",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/libmicroros/include",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/micro_ros_platformio/platform_code/arduino/wifi",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/Esp32PcntEncoder",
"/home/fishros/chapt9/fishbot_motion_control/.pio/libdeps/fishbot/Esp32McpwmMotor",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/mem/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/add/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/addc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mulc/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/sub/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/test/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/variants/esp32",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
"/home/fishros/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
""
]
},
"defines": [
"PLATFORMIO=60117",
"ARDUINO_ESP32_DEV",
"HAVE_CONFIG_H",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"UNITY_INCLUDE_CONFIG_H",
"WITH_POSIX",
"_GNU_SOURCE",
"IDF_VER=\"v4.4.7-dirty\"",
"ESP_PLATFORM",
"_POSIX_READER_WRITER_LOCKS",
"ARDUINO_ARCH_ESP32",
"ESP32",
"F_CPU=240000000L",
"ARDUINO=10812",
"ARDUINO_VARIANT=\"esp32\"",
"ARDUINO_BOARD=\"Espressif ESP32 Dev Module\"",
"ARDUINO_PARTITION_default",
"MICRO_ROS_TRANSPORT_ARDUINO_WIFI=1",
"MICRO_ROS_DISTRO_HUMBLE =1",
""
],
"cStandard": "gnu99",
"cppStandard": "gnu++11",
"compilerPath": "/home/fishros/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-gcc",
"compilerArgs": [
"-mlongcalls",
""
]
}
],
"version": 4
}

View File

@@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

View File

@@ -0,0 +1,44 @@
// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
//
// PlatformIO Debugging Solution
//
// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html
// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html
{
"version": "0.2.0",
"configurations": [
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug",
"executable": "/home/fishros/chapt9/fishbot_motion_control/.pio/build/fishbot/firmware.elf",
"projectEnvName": "fishbot",
"toolchainBinDir": "/home/fishros/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": {
"type": "PlatformIO",
"task": "Pre-Debug"
}
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (skip Pre-Debug)",
"executable": "/home/fishros/chapt9/fishbot_motion_control/.pio/build/fishbot/firmware.elf",
"projectEnvName": "fishbot",
"toolchainBinDir": "/home/fishros/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (without uploading)",
"executable": "/home/fishros/chapt9/fishbot_motion_control/.pio/build/fishbot/firmware.elf",
"projectEnvName": "fishbot",
"toolchainBinDir": "/home/fishros/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"loadMode": "manual"
}
]
}

View File

@@ -0,0 +1,5 @@
{
"files.associations": {
"cmath": "cpp"
}
}

View File

@@ -0,0 +1,4 @@
一圈 1930 个脉冲数
轮子的直径是 65mm
轮子转一圈是 65*PI
那么一个脉冲数,相当于走了多远距离 65*PI/1930 0.105805 mm

View File

@@ -0,0 +1,39 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

View File

@@ -0,0 +1,89 @@
#include "Kinematics.h"
// 设置轮子的间距
void Kinematics::set_wheel_distance(float distance)
{
wheel_distance = distance;
}
void Kinematics::set_motor_param(uint8_t id, float per_pluse_distance)
{
motor_param[id].per_pulse_distance = per_pluse_distance;
}
// 运动学正解,将左右轮的速度转换成线速度和角速度
void Kinematics::kinematics_forward(float left_speed, float right_speed, float *out_linear_speed, float *out_angular_speed)
{
*out_linear_speed = (left_speed + right_speed) / 2;
*out_angular_speed = (right_speed - left_speed) / wheel_distance;
}
// 运动学逆解,将线速度和角速度转换成左右轮的速度
void Kinematics::kinematics_inverse(float linear_speed, float angular_speed, float *out_left_speed, float *out_right_speed)
{
*out_left_speed = linear_speed - angular_speed * wheel_distance / 2;
*out_right_speed = linear_speed + angular_speed * wheel_distance / 2;
}
// 输入:左右轮脉冲数,当前时间,输出更新电机速度和编码器数据
void Kinematics::update_motor_speed(uint64_t current_time, int32_t left_tick, int32_t right_tick)
{
int16_t dt = current_time - last_update_time; // ms
delta_ticks[0] = left_tick - motor_param[0].last_encoder_ticks;
delta_ticks[1] = right_tick - motor_param[1].last_encoder_ticks;
motor_param[0].motor_speed = (delta_ticks[0] * 105.805) / dt;
motor_param[1].motor_speed = (delta_ticks[1] * 105.805) / dt;
// 为了下次还可以正常的计算速度
motor_param[0].last_encoder_ticks = left_tick;
motor_param[1].last_encoder_ticks = right_tick;
last_update_time = current_time;
update_odom(dt);
}
// 获取电机速度,返回值是速度
int16_t Kinematics::get_motor_speed(uint8_t id)
{
if (id < 0 || id > 1)
{
return -1;
}
return motor_param[id].motor_speed;
}
odom_t& Kinematics::get_odom()
{
return odom;
}
void Kinematics::TransAngleInPI(float angle,float& out_angle)
{
if(angle>PI)
{
out_angle -= 2*PI;
}else if (angle<-PI)
{
out_angle += 2*PI;
}
}
void Kinematics::update_odom(uint16_t dt)
{
float dt_s = float(dt)/1000.0; // ms -> s
// 获取实时的角速度和线速度呢?我们拿左右轮实时的速度,进行运动学正解
this->kinematics_forward(motor_param[0].motor_speed,motor_param[1].motor_speed,&odom.linear_speed,&odom.angular_speed);
// 计算里程计信息
odom.linear_speed = odom.linear_speed/1000.0; // 转换成米每秒
// 角度积分
odom.angle += odom.angular_speed*dt_s;
TransAngleInPI(odom.angle,odom.angle);
// 计算机器人行走的距离(沿自身前进方向的)
float delta_distance = odom.linear_speed * dt_s;
// 分解到X轴和Y轴
odom.x += delta_distance * std::cos(odom.angle);
odom.y += delta_distance * std::sin(odom.angle);
}

View File

@@ -0,0 +1,57 @@
#ifndef __KINEMATICS_H__
#define __KINEMATICS_H__
#include "Arduino.h"
typedef struct
{
float per_pulse_distance; // 每个脉冲的前进的距离
int16_t motor_speed; // 单位用mm/s
int64_t last_encoder_ticks; // 上一次点击的编码器读数
} motor_param_t;
typedef struct {
float x;
float y;
float angle;
float linear_speed;
float angular_speed;
}odom_t;
/**
* 1. 运动学正逆解(两个轮子的实时速度->当前实时的角速度和线速度 / 当前目标的角速度和线速度->两个轮子的目标速度)
*
*/
class Kinematics
{
private:
/* data */
motor_param_t motor_param[2];
int16_t delta_ticks[2] = {0, 0}; // 用于存储上一次读取的编码器数值
uint64_t last_update_time = 0; // 用于存储上一次更新电机速度的时间,计算速度的时候使用
float wheel_distance = 0.0; // 两个轮子之间的距离
odom_t odom; // 用于存储里程计信息
public:
Kinematics(/* args */) = default;
~Kinematics() = default;
odom_t& get_odom();
void update_odom(uint16_t dt);
void TransAngleInPI(float angle,float& out_angle);
void set_wheel_distance(float distance); // 设置轮子的间距
void set_motor_param(uint8_t id,float per_pluse_distance);
// 运动学正解,将左右轮的速度转换成线速度和角速度
void kinematics_forward(float left_speed,float right_speed,float* out_linear_speed,float* out_angular_speed);
// 运动学逆解,将线速度和角速度转换成左右轮的速度
void kinematics_inverse(float linear_speed,float angular_speed,float* out_left_speed,float* out_right_speed);
// 更新点击速度和编码器数据
void update_motor_speed(uint64_t current_time,int32_t left_tick,int32_t right_tick);
// 获取电机速度,返回值是速度
int16_t get_motor_speed(uint8_t id);
};
#endif // __KINEMATICS_H__

View File

@@ -0,0 +1,64 @@
#include "Arduino.h"
#include "PidController.h"
// 构造函数传入三个PID参数
PidController::PidController(float kp, float ki, float kd)
{
kp_ = kp;
ki_ = ki;
kd_ = kd;
}
float PidController::update(float current)
{
error_ = target_ - current; // 计算error
error_sum_ += error_; // 计算error_sum,同时限制积分上下限
if (error_sum_ > intergral_up_)
error_sum_ = intergral_up_;
if (error_sum_ < -1 * intergral_up_)
error_sum_ = -1 * intergral_up_;
derror_ = prev_error_ - error_; // 计算误差变化率
prev_error_ = error_; // 方便下次计算使用
float output = kp_ * error_ + ki_ * error_sum_ + kd_ * derror_;
if (output > out_max_)
output = out_max_;
if (output < out_min_)
output = out_min_;
return output;
}
void PidController::update_target(float target)
{
target_ = target;
}
void PidController::update_pid(float kp, float ki, float kd)
{
kp_ = kp;
ki_ = ki;
kd_ = kd;
}
void PidController::reset()
{
error_sum_ = 0;
prev_error_ = 0;
error_ = 0;
derror_ = 0;
kp_ = 0;
ki_ = 0;
kd_ = 0;
intergral_up_ = 2500;
out_min_ = 0;
out_max_ = 0;
}
void PidController::out_limit(float min, float max)
{
out_min_ = min;
out_max_ = max;
}

View File

@@ -0,0 +1,33 @@
#ifndef __PID_CONTROLLER_H__
#define __PID_CONTROLLER_H__
class PidController
{
public:
PidController() = default;
PidController(float kp, float ki, float kd);
private:
// PID 参数,可以调节的
float target_;
float out_min_;
float out_max_;
float kp_;
float ki_;
float kd_;
float intergral_up_ = 2500; // 积分上限
// pid 中间过程值
float error_;
float error_sum_;
float derror_;
float prev_error_;
public:
float update(float current); // 提供当前值返回下次输出值也就是PID的结果
void update_target(float target); // 更新目标值
void update_pid(float kp, float ki, float kd); // 更新PID参数
void reset(); // 重置PID
void out_limit(float min, float max); // 设置输出限制
};
#endif // __PID_CONTROLLER_H__

View File

@@ -0,0 +1,46 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

View File

@@ -0,0 +1,19 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:fishbot]
platform = espressif32
board = esp32dev
framework = arduino
board_microros_transport = wifi
monitor_speed = 115200
lib_deps =
http://github.fishros.org/https://github.com/fishros/Esp32McpwmMotor.git
http://github.fishros.org/https://github.com/fishros/Esp32PcntEncoder.git
https://gitee.com/ohhuo/micro_ros_platformio.git

View File

@@ -0,0 +1,152 @@
#include <Arduino.h>
#include <Esp32PcntEncoder.h>
#include <Esp32McpwmMotor.h>
#include <PidController.h>
#include <Kinematics.h>
// 引入Microros和wifi相关的库
#include <WiFi.h>
#include <micro_ros_platformio.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <geometry_msgs/msg/twist.h> // 消息接口
#include <nav_msgs/msg/odometry.h> // 里程计消息接口
#include <micro_ros_utilities/string_utilities.h> // 引入字符串内存分配初始化工具
// 声明一些相关的结构体对象
rcl_allocator_t allocator; // 内存分配器,用于动态内存分配管理
rclc_support_t support; // 用于存储时钟,内存分配器和上下文,用于提供支持
rclc_executor_t executor; // 执行器,用于管理订阅和计时器回调的执行
rcl_node_t node; // 节点,用于创建节点
rcl_subscription_t sub_cmd_vel; // 创建一个订阅者
geometry_msgs__msg__Twist msg_cmd_vel; // 订阅到的数据存储到这里
rcl_publisher_t pub_odom; // 创建一个里程计发布者
nav_msgs__msg__Odometry msg_odom; // 里程计消息存储到这里
rcl_timer_t timer; // 定时器,可以定时调用某个函数
Esp32PcntEncoder encoders[2]; // 创建一个数组用于存储两个编码器
Esp32McpwmMotor motor; // 创建一个名为motor的对象用于控制电机
PidController pid_controller[2];
Kinematics kinematics;
float target_linear_speed = 0.0; // 单位 毫米每秒
float target_angular_speed = 0.0; // 单位 弧度每秒
float out_left_speed = 0.0; // 输出的左右轮速度,不是反馈的左右轮速度
float out_right_speed = 0.0;
// 定时器的回调函数
void timer_callback(rcl_timer_t* timer,int64_t last_call_time)
{
// 完成里程计的发布
odom_t odom = kinematics.get_odom(); // 获取当前的里程计
int64_t stamp = rmw_uros_epoch_millis(); // 获取当前的时间
msg_odom.header.stamp.sec = static_cast<int32_t>(stamp/1000); // 秒部分
msg_odom.header.stamp.nanosec = static_cast<int32_t>((stamp%1000)*1e6); // 纳秒部分
msg_odom.pose.pose.position.x = odom.x;
msg_odom.pose.pose.position.y = odom.y;
msg_odom.pose.pose.orientation.w = cos(odom.angle*0.5);
msg_odom.pose.pose.orientation.x = 0;
msg_odom.pose.pose.orientation.y = 0;
msg_odom.pose.pose.orientation.z = sin(odom.angle*0.5);
msg_odom.twist.twist.linear.x = odom.linear_speed;
msg_odom.twist.twist.angular.z = odom.angular_speed;
// 发布里程计,把数据发出去
if(rcl_publish(&pub_odom,&msg_odom,NULL)!=RCL_RET_OK)
{
Serial.println("error: odom pub failed!");
}
}
void twist_callback(const void * msg_in)
{
// 将受到的消息指针转换成 geometry_msgs__msg__Twist 类型的指针
const geometry_msgs__msg__Twist* msg = (const geometry_msgs__msg__Twist*)msg_in;
target_linear_speed = msg->linear.x * 1000;
target_angular_speed = msg->angular.z;
kinematics.kinematics_inverse(target_linear_speed, target_angular_speed, &out_left_speed, &out_right_speed);
Serial.printf("OUT:left_speed=%f,right_speed=%f\n", out_left_speed, out_right_speed);
pid_controller[0].update_target(out_left_speed);
pid_controller[1].update_target(out_right_speed);
}
// 单独创建一个任务运行 micro-ROS 相当于一个线程
void microros_task(void *args)
{
// 1.设置传输协议并延迟一段时间等待设置的完成
IPAddress agent_ip;
agent_ip.fromString("192.168.1.103"); // 设置agent的IP地址
set_microros_wifi_transports("fishros", "88888888", agent_ip, 8888); // 设置传输协议
delay(3000); // 等待2秒,等待WIFI连接
// 2.初始化内存分配器
allocator = rcl_get_default_allocator(); // 获取默认的内存分配器
// 3.初始化支持
rclc_support_init(&support, 0, NULL, &allocator); // 初始化支持
// 4.初始化节点
rclc_node_init_default(&node, "fishbot_motion_control", "", &support); // 初始化节点
// 5.初始化执行器
unsigned int num_handles = 2; // 订阅和计时器的回调数量,注意这是一个要改的参数
rclc_executor_init(&executor, &support.context, num_handles, &allocator); // 初始化执行器
// 初始化订阅者,并将其添加到执行其中
rclc_subscription_init_best_effort(&sub_cmd_vel,&node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs,msg,Twist),"/cmd_vel");
rclc_executor_add_subscription(&executor,&sub_cmd_vel,&msg_cmd_vel,&twist_callback,ON_NEW_DATA);
// 初始化msg
msg_odom.header.frame_id = micro_ros_string_utilities_set(msg_odom.header.frame_id, "odom");
msg_odom.child_frame_id = micro_ros_string_utilities_set(msg_odom.child_frame_id, "base_footprint");
// 初始化发布者和定时器
rclc_publisher_init_best_effort(&pub_odom,&node,ROSIDL_GET_MSG_TYPE_SUPPORT(nav_msgs,msg,Odometry),"/odom");
rclc_timer_init_default(&timer,&support,RCL_MS_TO_NS(50),timer_callback);
rclc_executor_add_timer(&executor,&timer);
// 时间同步
while (!rmw_uros_epoch_synchronized())
{
rmw_uros_sync_session(1000);
delay(10);
}
// 循环执行器
rclc_executor_spin(&executor);
}
// v=w*r
// r = v/w = 0.05/0.1 = 0.5 0.02/0.1 = 0.2 m
void setup()
{
// 初始化串口
Serial.begin(115200); // 初始化串口通信设置通信速率为115200
// 初始化电机驱动器
motor.attachMotor(0, 22, 23); // 将电机0连接到引脚22和引脚23
motor.attachMotor(1, 12, 13); // 将电机1连接到引脚12和引脚13
// 初始化编码器
encoders[0].init(0, 32, 33); // 初始化第一个编码器使用GPIO 32和33连接
encoders[1].init(1, 26, 25); // 初始化第二个编码器使用GPIO 26和25连接
// 初始化PID控制器的参数
pid_controller[0].update_pid(0.625, 0.125, 0.0);
pid_controller[1].update_pid(0.625, 0.125, 0.0);
pid_controller[0].out_limit(-100, 100);
pid_controller[1].out_limit(-100, 100);
// 初始化运动学参数
kinematics.set_wheel_distance(175); // mm
kinematics.set_motor_param(0, 0.105805);
kinematics.set_motor_param(1, 0.105805);
// 测试下运动学逆解
// 创建一个任务运行 micro-ROS
xTaskCreate(microros_task, "microros_task", 10240, NULL, 1, NULL);
}
void loop()
{
delay(10); // 等待10毫秒
kinematics.update_motor_speed(millis(), encoders[0].getTicks(), encoders[1].getTicks()); // 记得调用更新电机速度函数
motor.updateMotorSpeed(0, pid_controller[0].update(
kinematics.get_motor_speed(0)));
motor.updateMotorSpeed(1, pid_controller[1].update(kinematics.get_motor_speed(1)));
// Serial.printf("speed1=%d,speed2=%d\n",kinematics.get_motor_speed(0),kinematics.get_motor_speed(1));
// Serial.printf("x,y,yaw=%f,%f,%f\n", kinematics.get_odom().x, kinematics.get_odom().y, kinematics.get_odom().angle);
}

View File

@@ -0,0 +1,91 @@
#include <Arduino.h>
#include <Esp32PcntEncoder.h>
#include <Esp32McpwmMotor.h>
#include <PidController.h>
#include <Kinematics.h>
// 引入Microros和wifi相关的库
#include <WiFi.h>
#include <micro_ros_platformio.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
// 声明一些相关的结构体对象
rcl_allocator_t allocator; // 内存分配器,用于动态内存分配管理
rclc_support_t support; // 用于存储时钟,内存分配器和上下文,用于提供支持
rclc_executor_t executor; // 执行器,用于管理订阅和计时器回调的执行
rcl_node_t node; // 节点,用于创建节点
// 单独创建一个任务运行 micro-ROS 相当于一个线程
void microros_task(void *args)
{
// 1.设置传输协议并延迟一段时间等待设置的完成
IPAddress agent_ip;
agent_ip.fromString("192.168.1.103"); // 设置agent的IP地址
set_microros_wifi_transports("fishros", "88888888", agent_ip, 8888); // 设置传输协议
delay(3000); // 等待2秒,等待WIFI连接
// 2.初始化内存分配器
allocator = rcl_get_default_allocator(); // 获取默认的内存分配器
// 3.初始化支持
rclc_support_init(&support, 0, NULL, &allocator); // 初始化支持
// 4.初始化节点
rclc_node_init_default(&node, "fishbot_motion_control", "", &support); // 初始化节点
// 5.初始化执行器
unsigned int num_handles = 1; // 订阅和计时器的回调数量,注意这是一个要改的参数
rclc_executor_init(&executor, &support.context, num_handles, &allocator); // 初始化执行器
// 循环执行器
rclc_executor_spin(&executor);
}
Esp32PcntEncoder encoders[2]; // 创建一个数组用于存储两个编码器
Esp32McpwmMotor motor; // 创建一个名为motor的对象用于控制电机
PidController pid_controller[2];
Kinematics kinematics;
float target_linear_speed = 0.0; // 单位 毫米每秒
float target_angular_speed = 0.0; // 单位 弧度每秒
float out_left_speed = 0.0; // 输出的左右轮速度,不是反馈的左右轮速度
float out_right_speed = 0.0;
// v=w*r
// r = v/w = 0.05/0.1 = 0.5 0.02/0.1 = 0.2 m
void setup()
{
// 初始化串口
Serial.begin(115200); // 初始化串口通信设置通信速率为115200
// 初始化电机驱动器
motor.attachMotor(0, 22, 23); // 将电机0连接到引脚22和引脚23
motor.attachMotor(1, 12, 13); // 将电机1连接到引脚12和引脚13
// 初始化编码器
encoders[0].init(0, 32, 33); // 初始化第一个编码器使用GPIO 32和33连接
encoders[1].init(1, 26, 25); // 初始化第二个编码器使用GPIO 26和25连接
// 初始化PID控制器的参数
pid_controller[0].update_pid(0.625, 0.125, 0.0);
pid_controller[1].update_pid(0.625, 0.125, 0.0);
pid_controller[0].out_limit(-100, 100);
pid_controller[1].out_limit(-100, 100);
// 初始化运动学参数
kinematics.set_wheel_distance(175); // mm
kinematics.set_motor_param(0, 0.105805);
kinematics.set_motor_param(1, 0.105805);
// 测试下运动学逆解
kinematics.kinematics_inverse(target_linear_speed, target_angular_speed, &out_left_speed, &out_right_speed);
Serial.printf("OUT:left_speed=%f,right_speed=%f\n", out_left_speed, out_right_speed);
pid_controller[0].update_target(out_left_speed);
pid_controller[1].update_target(out_right_speed);
// 创建一个任务运行 micro-ROS
xTaskCreate(microros_task, "microros_task", 10240, NULL, 1, NULL);
}
void loop()
{
delay(10); // 等待10毫秒
kinematics.update_motor_speed(millis(), encoders[0].getTicks(), encoders[1].getTicks()); // 记得调用更新电机速度函数
motor.updateMotorSpeed(0, pid_controller[0].update(
kinematics.get_motor_speed(0)));
motor.updateMotorSpeed(1, pid_controller[1].update(kinematics.get_motor_speed(1)));
// Serial.printf("speed1=%d,speed2=%d\n",kinematics.get_motor_speed(0),kinematics.get_motor_speed(1));
// Serial.printf("x,y,yaw=%f,%f,%f\n", kinematics.get_odom().x, kinematics.get_odom().y, kinematics.get_odom().angle);
}

View File

@@ -0,0 +1,108 @@
#include <Arduino.h>
#include <Esp32PcntEncoder.h>
#include <Esp32McpwmMotor.h>
#include <PidController.h>
#include <Kinematics.h>
// 引入Microros和wifi相关的库
#include <WiFi.h>
#include <micro_ros_platformio.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <geometry_msgs/msg/twist.h> // 消息接口
// 声明一些相关的结构体对象
rcl_allocator_t allocator; // 内存分配器,用于动态内存分配管理
rclc_support_t support; // 用于存储时钟,内存分配器和上下文,用于提供支持
rclc_executor_t executor; // 执行器,用于管理订阅和计时器回调的执行
rcl_node_t node; // 节点,用于创建节点
rcl_subscription_t sub_cmd_vel; // 创建一个订阅者
geometry_msgs__msg__Twist msg_cmd_vel; // 订阅到的数据存储到这里
Esp32PcntEncoder encoders[2]; // 创建一个数组用于存储两个编码器
Esp32McpwmMotor motor; // 创建一个名为motor的对象用于控制电机
PidController pid_controller[2];
Kinematics kinematics;
float target_linear_speed = 0.0; // 单位 毫米每秒
float target_angular_speed = 0.0; // 单位 弧度每秒
float out_left_speed = 0.0; // 输出的左右轮速度,不是反馈的左右轮速度
float out_right_speed = 0.0;
void twist_callback(const void * msg_in)
{
// 将受到的消息指针转换成 geometry_msgs__msg__Twist 类型的指针
const geometry_msgs__msg__Twist* msg = (const geometry_msgs__msg__Twist*)msg_in;
target_linear_speed = msg->linear.x * 1000;
target_angular_speed = msg->angular.z;
kinematics.kinematics_inverse(target_linear_speed, target_angular_speed, &out_left_speed, &out_right_speed);
Serial.printf("OUT:left_speed=%f,right_speed=%f\n", out_left_speed, out_right_speed);
pid_controller[0].update_target(out_left_speed);
pid_controller[1].update_target(out_right_speed);
}
// 单独创建一个任务运行 micro-ROS 相当于一个线程
void microros_task(void *args)
{
// 1.设置传输协议并延迟一段时间等待设置的完成
IPAddress agent_ip;
agent_ip.fromString("192.168.1.103"); // 设置agent的IP地址
set_microros_wifi_transports("fishros", "88888888", agent_ip, 8888); // 设置传输协议
delay(3000); // 等待2秒,等待WIFI连接
// 2.初始化内存分配器
allocator = rcl_get_default_allocator(); // 获取默认的内存分配器
// 3.初始化支持
rclc_support_init(&support, 0, NULL, &allocator); // 初始化支持
// 4.初始化节点
rclc_node_init_default(&node, "fishbot_motion_control", "", &support); // 初始化节点
// 5.初始化执行器
unsigned int num_handles = 1; // 订阅和计时器的回调数量,注意这是一个要改的参数
rclc_executor_init(&executor, &support.context, num_handles, &allocator); // 初始化执行器
// 初始化订阅者,并将其添加到执行其中
rclc_subscription_init_best_effort(&sub_cmd_vel,&node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs,msg,Twist),"/cmd_vel");
rclc_executor_add_subscription(&executor,&sub_cmd_vel,&msg_cmd_vel,&twist_callback,ON_NEW_DATA);
// 循环执行器
rclc_executor_spin(&executor);
}
// v=w*r
// r = v/w = 0.05/0.1 = 0.5 0.02/0.1 = 0.2 m
void setup()
{
// 初始化串口
Serial.begin(115200); // 初始化串口通信设置通信速率为115200
// 初始化电机驱动器
motor.attachMotor(0, 22, 23); // 将电机0连接到引脚22和引脚23
motor.attachMotor(1, 12, 13); // 将电机1连接到引脚12和引脚13
// 初始化编码器
encoders[0].init(0, 32, 33); // 初始化第一个编码器使用GPIO 32和33连接
encoders[1].init(1, 26, 25); // 初始化第二个编码器使用GPIO 26和25连接
// 初始化PID控制器的参数
pid_controller[0].update_pid(0.625, 0.125, 0.0);
pid_controller[1].update_pid(0.625, 0.125, 0.0);
pid_controller[0].out_limit(-100, 100);
pid_controller[1].out_limit(-100, 100);
// 初始化运动学参数
kinematics.set_wheel_distance(175); // mm
kinematics.set_motor_param(0, 0.105805);
kinematics.set_motor_param(1, 0.105805);
// 测试下运动学逆解
// 创建一个任务运行 micro-ROS
xTaskCreate(microros_task, "microros_task", 10240, NULL, 1, NULL);
}
void loop()
{
delay(10); // 等待10毫秒
kinematics.update_motor_speed(millis(), encoders[0].getTicks(), encoders[1].getTicks()); // 记得调用更新电机速度函数
motor.updateMotorSpeed(0, pid_controller[0].update(
kinematics.get_motor_speed(0)));
motor.updateMotorSpeed(1, pid_controller[1].update(kinematics.get_motor_speed(1)));
// Serial.printf("speed1=%d,speed2=%d\n",kinematics.get_motor_speed(0),kinematics.get_motor_speed(1));
// Serial.printf("x,y,yaw=%f,%f,%f\n", kinematics.get_odom().x, kinematics.get_odom().y, kinematics.get_odom().angle);
}

View File

@@ -0,0 +1,91 @@
#include <Arduino.h>
#include <Esp32PcntEncoder.h>
#include <Esp32McpwmMotor.h>
#include <PidController.h>
#include <Kinematics.h>
// 引入Microros和wifi相关的库
#include <WiFi.h>
#include <micro_ros_platformio.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
// 声明一些相关的结构体对象
rcl_allocator_t allocator; // 内存分配器,用于动态内存分配管理
rclc_support_t support; // 用于存储时钟,内存分配器和上下文,用于提供支持
rclc_executor_t executor; // 执行器,用于管理订阅和计时器回调的执行
rcl_node_t node; // 节点,用于创建节点
// 单独创建一个任务运行 micro-ROS 相当于一个线程
void microros_task(void *args)
{
// 1.设置传输协议并延迟一段时间等待设置的完成
IPAddress agent_ip;
agent_ip.fromString("192.168.1.103"); // 设置agent的IP地址
set_microros_wifi_transports("fishros", "88888888", agent_ip, 8888); // 设置传输协议
delay(3000); // 等待2秒,等待WIFI连接
// 2.初始化内存分配器
allocator = rcl_get_default_allocator(); // 获取默认的内存分配器
// 3.初始化支持
rclc_support_init(&support, 0, NULL, &allocator); // 初始化支持
// 4.初始化节点
rclc_node_init_default(&node, "fishbot_motion_control", "", &support); // 初始化节点
// 5.初始化执行器
unsigned int num_handles = 1; // 订阅和计时器的回调数量,注意这是一个要改的参数
rclc_executor_init(&executor, &support.context, num_handles, &allocator); // 初始化执行器
// 循环执行器
rclc_executor_spin(&executor);
}
Esp32PcntEncoder encoders[2]; // 创建一个数组用于存储两个编码器
Esp32McpwmMotor motor; // 创建一个名为motor的对象用于控制电机
PidController pid_controller[2];
Kinematics kinematics;
float target_linear_speed = 0.0; // 单位 毫米每秒
float target_angular_speed = 0.0; // 单位 弧度每秒
float out_left_speed = 0.0; // 输出的左右轮速度,不是反馈的左右轮速度
float out_right_speed = 0.0;
// v=w*r
// r = v/w = 0.05/0.1 = 0.5 0.02/0.1 = 0.2 m
void setup()
{
// 初始化串口
Serial.begin(115200); // 初始化串口通信设置通信速率为115200
// 初始化电机驱动器
motor.attachMotor(0, 22, 23); // 将电机0连接到引脚22和引脚23
motor.attachMotor(1, 12, 13); // 将电机1连接到引脚12和引脚13
// 初始化编码器
encoders[0].init(0, 32, 33); // 初始化第一个编码器使用GPIO 32和33连接
encoders[1].init(1, 26, 25); // 初始化第二个编码器使用GPIO 26和25连接
// 初始化PID控制器的参数
pid_controller[0].update_pid(0.625, 0.125, 0.0);
pid_controller[1].update_pid(0.625, 0.125, 0.0);
pid_controller[0].out_limit(-100, 100);
pid_controller[1].out_limit(-100, 100);
// 初始化运动学参数
kinematics.set_wheel_distance(175); // mm
kinematics.set_motor_param(0, 0.105805);
kinematics.set_motor_param(1, 0.105805);
// 测试下运动学逆解
kinematics.kinematics_inverse(target_linear_speed, target_angular_speed, &out_left_speed, &out_right_speed);
Serial.printf("OUT:left_speed=%f,right_speed=%f\n", out_left_speed, out_right_speed);
pid_controller[0].update_target(out_left_speed);
pid_controller[1].update_target(out_right_speed);
// 创建一个任务运行 micro-ROS
xTaskCreate(microros_task, "microros_task", 10240, NULL, 1, NULL);
}
void loop()
{
delay(10); // 等待10毫秒
kinematics.update_motor_speed(millis(), encoders[0].getTicks(), encoders[1].getTicks()); // 记得调用更新电机速度函数
motor.updateMotorSpeed(0, pid_controller[0].update(
kinematics.get_motor_speed(0)));
motor.updateMotorSpeed(1, pid_controller[1].update(kinematics.get_motor_speed(1)));
// Serial.printf("speed1=%d,speed2=%d\n",kinematics.get_motor_speed(0),kinematics.get_motor_speed(1));
// Serial.printf("x,y,yaw=%f,%f,%f\n", kinematics.get_odom().x, kinematics.get_odom().y, kinematics.get_odom().angle);
}

View File

@@ -0,0 +1,11 @@
This directory is intended for PlatformIO Test Runner and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html