dynamixel_hardware
dynamixel_hardware copied to clipboard
failing to compile
I'm having trouble getting dynamixel_control to compile. Below is a dockerfile for reproducibility. The error I get is
#0 6.315 --- stderr: dynamixel_workbench_toolbox
#0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp: In member function ‘bool DynamixelDriver::readRegister(uint8_t, uint16_t, uint16_t, uint32_t*, const char**)’:
#0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp:776:11: warning: ISO C++ forbids variable length array ‘data_read’ [-Wvla]
#0 6.315 776 | uint8_t data_read[length];
#0 6.315 | ^~~~~~~~~
#0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp: In member function ‘bool DynamixelDriver::syncWrite(uint8_t, uint8_t*, uint8_t, int32_t*, uint8_t, const char**)’:
#0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp:1012:11: warning: ISO C++ forbids variable length array ‘multi_parameter’ [-Wvla]
#0 6.315 1012 | uint8_t multi_parameter[4*data_num_for_each_id];
#0 6.315 | ^~~~~~~~~~~~~~~
#0 6.315 ---
#0 6.316 Finished <<< dynamixel_workbench_toolbox [3.09s]
#0 6.321 Starting >>> dynamixel_hardware
#0 6.336 Starting >>> dynamixel_workbench
#0 7.692 Finished <<< dynamixel_sdk_custom_interfaces [6.74s]
#0 7.693 Starting >>> dynamixel_sdk_examples
#0 7.828 Finished <<< dynamixel_workbench [1.49s]
#0 13.12 --- stderr: dynamixel_hardware
#0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:66:3: error: ‘CallbackReturn’ does not name a type
#0 13.12 66 | CallbackReturn on_init(const hardware_interface::HardwareInfo & info) override;
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:75:3: error: ‘CallbackReturn’ does not name a type
#0 13.12 75 | CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:78:3: error: ‘CallbackReturn’ does not name a type
#0 13.12 78 | CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:51:1: error: ‘CallbackReturn’ does not name a type
#0 13.12 51 | CallbackReturn DynamixelHardware::on_init(const hardware_interface::HardwareInfo & info)
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual std::vector<hardware_interface::StateInterface> dynamixel_hardware::DynamixelHardware::export_state_interfaces()’:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:193:24: error: ‘info_’ was not declared in this scope
#0 13.12 193 | for (uint i = 0; i < info_.joints.size(); i++) {
#0 13.12 | ^~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual std::vector<hardware_interface::CommandInterface> dynamixel_hardware::DynamixelHardware::export_command_interfaces()’:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:209:24: error: ‘info_’ was not declared in this scope
#0 13.12 209 | for (uint i = 0; i < info_.joints.size(); i++) {
#0 13.12 | ^~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: At global scope:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:219:1: error: ‘CallbackReturn’ does not name a type
#0 13.12 219 | CallbackReturn DynamixelHardware::on_activate(const rclcpp_lifecycle::State & previous_state)
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:236:1: error: ‘CallbackReturn’ does not name a type
#0 13.12 236 | CallbackReturn DynamixelHardware::on_deactivate(const rclcpp_lifecycle::State & previous_state)
#0 13.12 | ^~~~~~~~~~~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual hardware_interface::return_type dynamixel_hardware::DynamixelHardware::read()’:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:248:28: error: ‘info_’ was not declared in this scope
#0 13.12 248 | std::vector<uint8_t> ids(info_.joints.size(), 0);
#0 13.12 | ^~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual hardware_interface::return_type dynamixel_hardware::DynamixelHardware::write()’:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:301:28: error: ‘info_’ was not declared in this scope
#0 13.12 301 | std::vector<uint8_t> ids(info_.joints.size(), 0);
#0 13.12 | ^~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘hardware_interface::return_type dynamixel_hardware::DynamixelHardware::enable_torque(bool)’:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:346:26: error: ‘info_’ was not declared in this scope
#0 13.12 346 | for (uint i = 0; i < info_.joints.size(); ++i) {
#0 13.12 | ^~~~~
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:355:26: error: ‘info_’ was not declared in this scope
#0 13.12 355 | for (uint i = 0; i < info_.joints.size(); ++i) {
#0 13.12 | ^~~~~
#0 13.12 In file included from /opt/ros/foxy/include/class_loader/class_loader_core.hpp:57,
#0 13.12 from /opt/ros/foxy/include/class_loader/class_loader.hpp:55,
#0 13.12 from /opt/ros/foxy/include/pluginlib/class_list_macros.hpp:40,
#0 13.12 from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:431:
#0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp: In instantiation of ‘B* class_loader::impl::MetaObject<C, B>::create() const [with C = dynamixel_hardware::DynamixelHardware; B = hardware_interface::SystemInterface]’:
#0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp:216:7: required from here
#0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp:218:12: error: invalid new-expression of abstract class type ‘dynamixel_hardware::DynamixelHardware’
#0 13.12 218 | return new C;
#0 13.12 | ^~~~~
#0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
#0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:59:7: note: because the following virtual functions are pure within ‘dynamixel_hardware::DynamixelHardware’:
#0 13.12 59 | class DynamixelHardware
#0 13.12 | ^~~~~~~~~~~~~~~~~
#0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:22,
#0 13.12 from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
#0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:48:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::configure(const hardware_interface::HardwareInfo&)’
#0 13.12 48 | virtual return_type configure(const HardwareInfo & system_info) = 0;
#0 13.12 | ^~~~~~~~~
#0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:116:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::start()’
#0 13.12 116 | virtual return_type start() = 0;
#0 13.12 | ^~~~~
#0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:122:23: note: ‘virtual hardware_interface::return_type hardware_interface::SystemInterface::stop()’
#0 13.12 122 | virtual return_type stop() = 0;
#0 13.12 | ^~~~
#0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:128:23: note: ‘virtual std::string hardware_interface::SystemInterface::get_name() const’
#0 13.12 128 | virtual std::string get_name() const = 0;
#0 13.12 | ^~~~~~~~
#0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:134:18: note: ‘virtual hardware_interface::status hardware_interface::SystemInterface::get_status() const’
#0 13.12 134 | virtual status get_status() const = 0;
#0 13.12 | ^~~~~~~~~~
#0 13.12 make[2]: *** [CMakeFiles/dynamixel_hardware.dir/build.make:63: CMakeFiles/dynamixel_hardware.dir/src/dynamixel_hardware.cpp.o] Error 1
#0 13.12 make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/dynamixel_hardware.dir/all] Error 2
#0 13.12 make: *** [Makefile:141: all] Error 2
#0 13.12 ---
#0 13.12 Failed <<< dynamixel_hardware [6.80s, exited with code 2]
#0 18.16 Aborted <<< dynamixel_sdk_examples [10.5s]
#0 23.98 Aborted <<< dynamixel_workbench_msgs [23.0s]
#0 24.02
#0 24.02 Summary: 4 packages finished [23.3s]
#0 24.02 1 package failed: dynamixel_hardware
#0 24.02 2 packages aborted: dynamixel_sdk_examples dynamixel_workbench_msgs
#0 24.02 2 packages had stderr output: dynamixel_hardware dynamixel_workbench_toolbox
#0 24.02 2 packages not processed
------
failed to solve: executor failed running [/bin/bash -c source /opt/ros/$ROS_DISTRO/setup.bash && colcon build --symlink-install]: exit code: 2
dockerfile
FROM ros:foxy
# use bash instead of sh
SHELL ["/bin/bash", "-c"]
ENV DEBIAN_FRONTEND=noninteractive
# update system
RUN apt-get update && apt-get upgrade --yes
RUN apt-get install -y \
wget \
ros-foxy-ros2-control \
ros-foxy-ros2-controllers \
&& rm -rf /var/lib/apt/lists/*
# create workspace
RUN mkdir -p /ros2_ws/src
WORKDIR /ros2_ws
# download ROS packages
RUN wget -c https://github.com/ROBOTIS-GIT/DynamixelSDK/archive/refs/tags/3.7.60.tar.gz -O - | tar -xz -C /ros2_ws/src
RUN wget -c https://github.com/ROBOTIS-GIT/dynamixel-workbench/archive/ros2.tar.gz -O - | tar -xz -C /ros2_ws/src
RUN wget -c https://github.com/ROBOTIS-GIT/dynamixel-workbench-msgs/archive/ros2.tar.gz -O - | tar -xz -C /ros2_ws/src
RUN wget -c https://github.com/youtalk/dynamixel_control/archive/1a1e6ef0cec860e0d44d25e910d269af89ab41c4.tar.gz -O - | tar -xz -C /ros2_ws/src
RUN apt-get update \
&& rosdep install --from-paths src --ignore-src -r -y \
&& rm -rf /var/lib/apt/lists/*
# build ROS packages and allow non-compiled
# sources to be edited without rebuild
RUN source /opt/ros/$ROS_DISTRO/setup.bash && colcon build --symlink-install
# add packages to path
RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
RUN echo "source /ros2_ws/install/setup.bash" >> ~/.bashrc
run using docker build .
~~Hi @patrickwasp, I experienced all of those warnings / errors when building for Humble / Rolling and have raised PRs against the rolling
branch. They have been merged. But I wouldn't expect the errors/warnings to show on Foxy / Galactic. I'm going to give your dockerfile a try.~~
Hi @patrickwasp, I believe the main branch is targeting galactic, whereas you're using foxy. Although I haven't tested the foxy branch out (since I'm not a maintainer here), there is one so you could try it out?