dynamixel_hardware icon indicating copy to clipboard operation
dynamixel_hardware copied to clipboard

failing to compile

Open patrickwasp opened this issue 1 year ago • 1 comments

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 .

patrickwasp avatar Sep 15 '22 21:09 patrickwasp

~~Hi @patrickwasp, I experienced all of those warnings / errors when building for Humble / Rolling and have raised PRs against the rollingbranch. 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?

ijnek avatar Sep 17 '22 06:09 ijnek