Open Buzzology opened 1 year ago
I tried the following "minimal build" on a Ubuntu 22.04 machine with only ROS2 Humble installed:
sudo apt install ros-humble-ros2-control
mkdir -p ~/plucky_wsB/src
cd ~/plucky_wsB/src
git clone https://github.com/Buzzology/diffdrive_arduino.git
git clone https://github.com/joshnewans/serial.git
colcon build
It produced a lot of strange errors. Adding "_rclcpplifecycle" to dependencies in CMakefile didn't help. Any ideas? Thanks!
======================
Starting >>> serial
Finished <<< serial [0.19s]
Starting >>> diffdrive_arduino
--- stderr: diffdrive_arduino
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:1:
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:35:15: error: ‘hardware_interface::return_type FakeRobot::read()’ marked ‘override’, but does not override
35 | return_type read() override;
| ^~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:37:15: error: ‘hardware_interface::return_type FakeRobot::write()’ marked ‘override’, but does not override
37 | return_type write() override;
| ^~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:13:1: error: ‘CallbackReturn’ does not name a type
13 | CallbackReturn FakeRobot::on_init(const hardware_interface::HardwareInfo & info)
| ^~~~~~~~~~~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:67:1: error: ‘CallbackReturn’ does not name a type
67 | CallbackReturn FakeRobot::on_activate(const rclcpp_lifecycle::State & /*previous_state*/)
| ^~~~~~~~~~~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:74:1: error: ‘CallbackReturn’ does not name a type
74 | CallbackReturn FakeRobot::on_deactivate(const rclcpp_lifecycle::State & /*previous_state*/)
| ^~~~~~~~~~~~~~
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:36:15: error: ‘hardware_interface::return_type DiffDriveArduino::read()’ marked ‘override’, but does not override
36 | return_type read() override;
| ^~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:38:15: error: ‘hardware_interface::return_type DiffDriveArduino::write()’ marked ‘override’, but does not override
38 | return_type write() override;
| ^~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:13:1: error: ‘CallbackReturn’ does not name a type
13 | CallbackReturn DiffDriveArduino::on_init(const hardware_interface::HardwareInfo & info)
| ^~~~~~~~~~~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:71:1: error: ‘CallbackReturn’ does not name a type
71 | CallbackReturn DiffDriveArduino::on_activate(const rclcpp_lifecycle::State & /*previous_state*/)
| ^~~~~~~~~~~~~~
/home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:83:1: error: ‘CallbackReturn’ does not name a type
83 | CallbackReturn DiffDriveArduino::on_deactivate(const rclcpp_lifecycle::State & /*previous_state*/)
| ^~~~~~~~~~~~~~
In file included from /opt/ros/humble/include/class_loader/class_loader/class_loader_core.hpp:57,
from /opt/ros/humble/include/class_loader/class_loader/class_loader.hpp:55,
from /opt/ros/humble/include/pluginlib/pluginlib/class_list_macros.hpp:40,
from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:116:
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp: In instantiation of ‘B* class_loader::impl::MetaObject<C, B>::create() const [with C = FakeRobot; B = hardware_interface::SystemInterface]’:
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp:216:7: required from here
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp:218:12: error: invalid new-expression of abstract class type ‘FakeRobot’
218 | return new C;
| ^~~~~
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:1:
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:18:7: note: because the following virtual functions are pure within ‘FakeRobot’:
18 | class FakeRobot : public hardware_interface::SystemInterface
| ^~~~~~~~~
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/fake_robot.h:7,
from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/fake_robot.cpp:1:
/opt/ros/humble/include/hardware_interface/system_interface.hpp:173:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::read(const rclcpp::Time&, const rclcpp::Duration&)’
173 | virtual return_type read(const rclcpp::Time & time, const rclcpp::Duration & period) = 0;
| ^~~~
/opt/ros/humble/include/hardware_interface/system_interface.hpp:184:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::write(const rclcpp::Time&, const rclcpp::Duration&)’
184 | virtual return_type write(const rclcpp::Time & time, const rclcpp::Duration & period) = 0;
| ^~~~~
In file included from /opt/ros/humble/include/class_loader/class_loader/class_loader_core.hpp:57,
from /opt/ros/humble/include/class_loader/class_loader/class_loader.hpp:55,
from /opt/ros/humble/include/pluginlib/pluginlib/class_list_macros.hpp:40,
from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:145:
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp: In instantiation of ‘B* class_loader::impl::MetaObject<C, B>::create() const [with C = DiffDriveArduino; B = hardware_interface::SystemInterface]’:
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp:216:7: required from here
/opt/ros/humble/include/class_loader/class_loader/meta_object.hpp:218:12: error: invalid new-expression of abstract class type ‘DiffDriveArduino’
218 | return new C;
| ^~~~~
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:19:7: note: because the following virtual functions are pure within ‘DiffDriveArduino’:
19 | class DiffDriveArduino : public hardware_interface::SystemInterface
| ^~~~~~~~~~~~~~~~
In file included from /home/sergei/plucky_wsB/src/diffdrive_arduino/include/diffdrive_arduino/diffdrive_arduino.h:7,
from /home/sergei/plucky_wsB/src/diffdrive_arduino/src/diffdrive_arduino.cpp:1:
/opt/ros/humble/include/hardware_interface/system_interface.hpp:173:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::read(const rclcpp::Time&, const rclcpp::Duration&)’
173 | virtual return_type read(const rclcpp::Time & time, const rclcpp::Duration & period) = 0;
| ^~~~
/opt/ros/humble/include/hardware_interface/system_interface.hpp:184:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::write(const rclcpp::Time&, const rclcpp::Duration&)’
184 | virtual return_type write(const rclcpp::Time & time, const rclcpp::Duration & period) = 0;
| ^~~~~
gmake[2]: *** [CMakeFiles/fake_robot.dir/build.make:76: CMakeFiles/fake_robot.dir/src/fake_robot.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:165: CMakeFiles/fake_robot.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
gmake[2]: *** [CMakeFiles/diffdrive_arduino.dir/build.make:76: CMakeFiles/diffdrive_arduino.dir/src/diffdrive_arduino.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[1]: *** [CMakeFiles/Makefile2:139: CMakeFiles/diffdrive_arduino.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
---
Failed <<< diffdrive_arduino [6.10s, exited with code 2]
Summary: 1 package finished [6.50s]
1 package failed: diffdrive_arduino
1 package had stderr output: diffdrive_arduino
=======================================
I merged all necessary code from https://github.com/Buzzology/diffdrive_arduino and copied some snippets from code generated for Humble using this method:
https://rtw.stoglrobotics.de/master/tutorials/quick-start.html#clone-and-source-the-rosteamworkspace
Compiles fine on Humble, not tested yet.
My final version is here: https://github.com/slgrobotics/diffdrive_arduino
sudo apt install ros-humble-ros2-control
mkdir -p ~/plucky_ws/src
cd ~/plucky_ws/src
git clone https://github.com/slgrobotics/diffdrive_arduino.git
git clone https://github.com/joshnewans/articubot_one.git
git clone https://github.com/joshnewans/serial.git
cd ~/plucky_ws
colcon build
Nice, was there anything missing in the galactic MR of mine or just more changes between Galactic and Humble? Took me a while to do the Foxy -> Galactic migration on everything else so I've been holding off on Humble until I really need it.
@Buzzology - Chris, sorry, I don't have previous ROS releases installed anywhere, only Humble. But if you have a Galactic machine, "compilability" of my changes is easy to check in five minutes - just do the following:
mkdir -p ~/plucky_ws/src
cd ~/plucky_ws/src
git clone https://github.com/slgrobotics/diffdrive_arduino.git
git clone https://github.com/joshnewans/serial.git
cd ~/plucky_ws
colcon build
I am pretty sure though that read() and write() signatures did change between your and my code. And I haven't done any testing yet, that might be another can of worms.
Thanks for the info Sergei!
@slgrobotics I was trying to develop the same on humble and ubuntu 22.04 and I ran into these issues if you have any idea please let me know
Failed <<< diffdrive_arduino [6.09s, exited with code 2]
Summary: 5 packages finished [12.3s] 1 package failed: diffdrive_arduino
Hey @SAMPATHONROS , I'm not sure which repo you copied but I ended up upgrading to Humble and 22.04 last week. I ended up using a mixture of Sergei's code and my original Galactic upgrade and it seems to be working okay so far. I added the changes to a humble
branch on this repo: https://github.com/Buzzology/diffdrive_arduino/tree/humble. Sergei's code is likely fine, but if you're using my original Galactic changes there are more changes required in order to go to Humble.
Please make sure you have these prerequisites installed:
sudo apt install ros-humble-ros2-control
sudo apt install ros-humble-ros2-controllers
(?? ros-humble-gazebo-ros2-control - *** can't find package - probably isn't needed in humble ***)
sudo apt install ros-humble-twist-mux
Hey Josh,
Thanks for all your tutorials, they've been really good. I am currently trying to use CommanderAPI and had to upgrade to Galactic. I ran into a few compatibility issues and have attempted to fix it. It's now building on my end but I won't be able to test it properly until I've fixed the remaining issues in the rest of my code.
First time ever using C++ so probably needs a bit of tidying up/fixing. Hopefully it's able to help anyone else hitting the same problem to at least get started.
I mostly followed what was in these links:
Update: Just wanted to add that I've now got everything else working and this seems to be working for me. Feel free to ping me if you have any issues (or if I've missed checking in any files).