ros-mobile-robots / diffbot

DiffBot is an autonomous 2wd differential drive robot using ROS Noetic on a Raspberry Pi 4 B. With its SLAMTEC Lidar and the ROS Control hardware interface it's capable of navigating in an environment using the ROS Navigation stack and making use of SLAM algorithms to create maps of unknown environments.
https://ros-mobile-robots.com
BSD 3-Clause "New" or "Revised" License
297 stars 86 forks source link

Compiling base_controller fails in VScode + PlatformIO #89

Closed santerioksanen closed 6 months ago

santerioksanen commented 8 months ago

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```
fjp commented 6 months ago

Fixed by #90