Skip to content

Compiling base_controller fails in VScode + PlatformIO #89

@santerioksanen

Description

@santerioksanen

Hello, and thanks for an awesome project!

I am a beginner in PlatformIO, trying to compile the base_controller. My compilation fails due to:
lib/base_controller/base_controller.h:438:17: error: no matching function for call to 'ros::NodeHandle_<ArduinoHardware>::getParam(const char [28], long unsigned int*)'

I am running on Ubuntu 22.04 on top of WSL2, but am also facing the same issue on pure Ubuntu 22.04 on my laptop. I have a freshly cloned repository on both computers, and have only attempted to open and build the project in PlatformIO as advised here: https://ros-mobile-robots.com/processing_units/teensy-mcu/

Would you be able to provide any guidance on how I should proceed?

Full log from the console:

 *  Executing task: platformio run --environment teensy31 

Processing teensy31 (platform: teensy; board: teensy31; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/teensy/teensy31.html
PLATFORM: Teensy (4.18.0) > Teensy 3.1 / 3.2
HARDWARE: MK20DX256 72MHz, 64KB RAM, 256KB Flash
DEBUG: Current (jlink) External (jlink)
PACKAGES: 
 - framework-arduinoteensy @ 1.158.0 (1.58) 
 - toolchain-gccarmnoneeabi-teensy @ 1.110301.0 (11.3.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 109 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Rosserial Arduino Library @ 0.9.1
|-- lib @ 0.0.0+20240131183356
|-- Adafruit Motor Shield V2 Library @ 1.1.3
|-- Wire @ 1.0
|-- motor_controllers
|-- base_controller
|-- config
Building in release mode
Compiling .pio/build/teensy31/src/main.cpp.o
Archiving .pio/build/teensy31/lib2fb/libSPI.a
Indexing .pio/build/teensy31/lib2fb/libSPI.a
Archiving .pio/build/teensy31/liba29/libEthernet.a
Indexing .pio/build/teensy31/liba29/libEthernet.a
Archiving .pio/build/teensy31/lib5fe/libWire.a
Archiving .pio/build/teensy31/lib880/libAdafruit BusIO.a
Indexing .pio/build/teensy31/lib5fe/libWire.a
Indexing .pio/build/teensy31/lib880/libAdafruit BusIO.a
Archiving .pio/build/teensy31/lib189/libAdafruit Motor Shield V2 Library.a
Indexing .pio/build/teensy31/lib189/libAdafruit Motor Shield V2 Library.a
Archiving .pio/build/teensy31/lib625/libmotor_controllers.a
Archiving .pio/build/teensy31/libf57/libEncoder.a
Indexing .pio/build/teensy31/lib625/libmotor_controllers.a
Indexing .pio/build/teensy31/libf57/libEncoder.a
Archiving .pio/build/teensy31/libb01/libencoder.a
Archiving .pio/build/teensy31/lib211/libpid.a
Indexing .pio/build/teensy31/libb01/libencoder.a
Indexing .pio/build/teensy31/lib211/libpid.a
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial1.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial3.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial4.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial5.cpp.o
In file included from src/main.cpp:4:
lib/base_controller/base_controller.h: In member function 'void diffbot::BaseController<TMotorController, TMotorDriver>::init()':
lib/base_controller/base_controller.h:438:17: error: no matching function for call to 'ros::NodeHandle_<ArduinoHardware>::getParam(const char [28], long unsigned int*)'
  438 |     nh_.getParam("/diffbot/encoder_resolution", &this->encoder_resolution_);
      |     ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~Compiling .pio/build/teensy31/FrameworkArduino/HardwareSerial6.cpp.o
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from .pio/libdeps/teensy31/Rosserial Arduino Library/src/ros.h:38,
                 from src/main.cpp:1:
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:568:8: note: candidate: 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, int*, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]' (near match)
  568 |   bool getParam(const char* name, int* param, int length = 1, int timeout = 1000)
      |        ^~~~~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:568:8: note:   conversion of argument 2 would be ill-formed:
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:586:8: note: candidate: 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, float*, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]'
  586 |   bool getParam(const char* name, float* param, int length = 1, int timeout = 1000)
      |        ^~~~~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:586:42: note:   no known conversion for argument 2 from 'long unsigned int*' to 'float*'
  586 |   bool getParam(const char* name, float* param, int length = 1, int timeout = 1000)
      |                                   ~~~~~~~^~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:604:8: note: candidate: 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, char**, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]'
  604 |   bool getParam(const char* name, char** param, int length = 1, int timeout = 1000)
      |        ^~~~~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:604:42: note:   no known conversion for argument 2 from 'long unsigned int*' to 'char**'
  604 |   bool getParam(const char* name, char** param, int length = 1, int timeout = 1000)
      |                                   ~~~~~~~^~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:622:8: note: candidate: 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, bool*, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]'
  622 |   bool getParam(const char* name, bool* param, int length = 1, int timeout = 1000)
      |        ^~~~~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:622:41: note:   no known conversion for argument 2 from 'long unsigned int*' to 'bool*'
  622 |   bool getParam(const char* name, bool* param, int length = 1, int timeout = 1000)
      |                                   ~~~~~~^~~~~
In file included from src/main.cpp:4:
lib/base_controller/base_controller.h: In instantiation of 'diffbot::BaseController<TMotorController, TMotorDriver>::BaseController(ros::NodeHandle&, TMotorController*, TMotorController*) [with TMotorController = diffbot::AdafruitMotorController; TMotorDriver = Adafruit_MotorShield; ros::NodeHandle = ros::NodeHandle_<ArduinoHardware>]':
src/main.cpp:15:130:   required from here
lib/base_controller/base_controller.h:360:105: warning: 'diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::sub_wheel_cmd_velocities_' will be initialized after [-Wreorder]
  360 |         ros::Subscriber<diffbot_msgs::WheelsCmdStamped, BaseController<TMotorController, TMotorDriver>> sub_wheel_cmd_velocities_;
      |                                                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~
lib/base_controller/base_controller.h:191:11: warning:   'diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::LastUpdateTime diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::last_update_time_' [-Wreorder]
  191 |         } last_update_time_;
      |           ^~~~~~~~~~~~~~~~~
lib/base_controller/base_controller.h:384:1: warning:   when initialized here [-Wreorder]
  384 | diffbot::BaseController<TMotorController, TMotorDriver>
      | ^~~~~~~
lib/base_controller/base_controller.h:191:11: warning: 'diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::last_update_time_' will be initialized after [-Wreorder]
Compiling .pio/build/teensy31/FrameworkArduino/IPAddress.cpp.o
  191 |         } last_update_time_;
      |           ^~~~~~~~~~~~~~~~~
lib/base_controller/base_controller.h:146:11: warning:   'diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::UpdateRate diffbot::BaseController<diffbot::AdafruitMotorController, Adafruit_MotorShield>::update_rate_' [-Wreorder]
  146 |         } update_rate_;
      |           ^~~~~~~~~~~~
lib/base_controller/base_controller.h:384:1: warning:   when initialized here [-Wreorder]
  384 | diffbot::BaseController<TMotorController, TMotorDriver>
      | ^~~~~~~
Compiling .pio/build/teensy31/FrameworkArduino/IntervalTimer.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/Print.cpp.o
In file included from .pio/libdeps/teensy31/Rosserial Arduino Library/src/ros.h:38,
                 from src/main.cpp:1:
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h: In instantiation of 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, float*, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]':
lib/base_controller/base_controller.h:441:17:   required from 'void diffbot::BaseController<TMotorController, TMotorDriver>::init() [with TMotorController = diffbot::AdafruitMotorController; TMotorDriver = Adafruit_MotorShield]'
src/main.cpp:21:25:   required from here
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:590:18: warning: comparison of integer expressions of different signedness: 'int' and 'uint32_t' {aka 'long unsigned int'} [-Wsign-compare]
  590 |       if (length == req_param_resp.floats_length)
      |           ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h: In instantiation of 'bool ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::getParam(const char*, bool*, int, int) [with Hardware = ArduinoHardware; int MAX_SUBSCRIBERS = 25; int MAX_PUBLISHERS = 25; int INPUT_SIZE = 512; int OUTPUT_SIZE = 512]':
lib/base_controller/base_controller.h:447:17:   required from 'void diffbot::BaseController<TMotorController, TMotorDriver>::init() [with TMotorController = diffbot::AdafruitMotorController; TMotorDriver = Adafruit_MotorShield]'
src/main.cpp:21:25:   required from here
.pio/libdeps/teensy31/Rosserial Arduino Library/src/ros/node_handle.h:626:18: warning: comparison of integer expressions of different signedness: 'int' and 'uint32_t' {aka 'long unsigned int'} [-Wsign-compare]
  626 |       if (length == req_param_resp.ints_length)
      |           ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compiling .pio/build/teensy31/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/Time.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/teensy31/FrameworkArduino/WMath.cpp.o
*** [.pio/build/teensy31/src/main.cpp.o] Error 1```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions