ADLINK-IST / opensplice

This is the Vortex OpenSplice Community Edition source repository. For our commercial offering see
https://www.adlinktech.com/en/vortex-opensplice-data-distribution-service
Apache License 2.0
259 stars 157 forks source link

Actions on ROS2 Dashing #92

Closed anasarrak closed 5 years ago

anasarrak commented 5 years ago

After the lastest release of ROS2 (Dashing) I've been having some issues compiling the actions, specially the control_msgs. The exact error when compiling is the following:

Starting >>> control_msgs
--- stderr: control_msgs                               
In file included from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/ccpp_GripperCommand_.h:4:0,
                 from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/gripper_command__rosidl_typesupport_opensplice_cpp.hpp:10,
                 from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp:19:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/GripperCommand_.h:41:37: error: ‘dds_’ in namespace ‘control_msgs::msg’ does not name a type
                ::control_msgs::msg::dds_::GripperCommand_ command_;
                                     ^~~~
In file included from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/ccpp_JointTrajectory_.h:4:0,
                 from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/joint_trajectory__rosidl_typesupport_opensplice_cpp.hpp:10,
                 from /mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp:19:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/JointTrajectory_.h:41:40: error: ‘dds_’ in namespace ‘trajectory_msgs::msg’ does not name a type
                ::trajectory_msgs::msg::dds_::JointTrajectory_ trajectory_;
                                        ^~~~
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp: In function ‘void control_msgs::action::typesupport_opensplice_cpp::convert_ros_message_to_dds(const __ros_msg_type_GripperCommand_Goal&, control_msgs::action::typesupport_opensplice_cpp::__dds_msg_type_GripperCommand_Goal&)’:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp:110:38: error: ‘using __dds_msg_type_GripperCommand_Goal = struct control_msgs::action::dds_::GripperCommand_Goal_ {aka struct control_msgs::action::dds_::GripperCommand_Goal_}’ has no member named ‘command_’
     ros_message.command, dds_message.command_);
                                      ^~~~~~~~
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp: In function ‘void control_msgs::action::typesupport_opensplice_cpp::convert_dds_message_to_ros(const __dds_msg_type_GripperCommand_Goal&, control_msgs::action::typesupport_opensplice_cpp::__ros_msg_type_GripperCommand_Goal&)’:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp:166:17: error: ‘const __dds_msg_type_GripperCommand_Goal {aka const struct control_msgs::action::dds_::GripperCommand_Goal_}’ has no member named ‘command_’
     dds_message.command_, ros_message.command);
                 ^~~~~~~~
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp: In function ‘void control_msgs::action::typesupport_opensplice_cpp::convert_ros_message_to_dds(const __ros_msg_type_JointTrajectory_Goal&, control_msgs::action::typesupport_opensplice_cpp::__dds_msg_type_JointTrajectory_Goal&)’:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp:110:41: error: ‘using __dds_msg_type_JointTrajectory_Goal = struct control_msgs::action::dds_::JointTrajectory_Goal_ {aka struct control_msgs::action::dds_::JointTrajectory_Goal_}’ has no member named ‘trajectory_’; did you mean ‘JointTrajectory_Goal_’?
     ros_message.trajectory, dds_message.trajectory_);
                                         ^~~~~~~~~~~
                                         JointTrajectory_Goal_
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp: In function ‘void control_msgs::action::typesupport_opensplice_cpp::convert_dds_message_to_ros(const __dds_msg_type_JointTrajectory_Goal&, control_msgs::action::typesupport_opensplice_cpp::__ros_msg_type_JointTrajectory_Goal&)’:
/mnt/myfiles/test/build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp:166:17: error: ‘const __dds_msg_type_JointTrajectory_Goal {aka const struct control_msgs::action::dds_::JointTrajectory_Goal_}’ has no member named ‘trajectory_’
     dds_message.trajectory_, ros_message.trajectory);
                 ^~~~~~~~~~~
make[2]: *** [CMakeFiles/control_msgs__rosidl_typesupport_opensplice_cpp.dir/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/gripper_command__type_support.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/control_msgs__rosidl_typesupport_opensplice_cpp.dir/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/joint_trajectory__type_support.cpp.o] Error 1
make[1]: *** [CMakeFiles/control_msgs__rosidl_typesupport_opensplice_cpp.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [all] Error 2
---
Failed   <<< control_msgs   [ Exited with code 2 ]

This has been discussed on the following topic, and it seems that the error is on the DDS .

ahcorde commented 5 years ago

For ROS2 dashing, this package (released version, 0.7.0, and master) generates C header files with duplicated guard names, e.g.

$ grep -r _GRIPPERCOMMAND__H_ .
./build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/msg/dds_opensplice/GripperCommand_.h:#ifndef _GRIPPERCOMMAND__H_
./build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/msg/dds_opensplice/GripperCommand_.h:#define _GRIPPERCOMMAND__H_
./build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/GripperCommand_.h:#ifndef _GRIPPERCOMMAND__H_
./build/control_msgs/rosidl_typesupport_opensplice_cpp/control_msgs/action/dds_opensplice/GripperCommand_.h:#define _GRIPPERCOMMAND__H_

There is more info in this issue https://github.com/ros2/rosidl_typesupport_opensplice/issues/30

dirk-thomas commented 5 years ago

@MarcelJordense @eboasson Is it possible to fix this bug and make a new release? I would assume that more and more users will run into this and will be unable to use ROS 2 with OpenSplice.

MarcelJordense commented 5 years ago

@dirk-thomas We will try to provide a solution for this problem.

anasarrak commented 5 years ago

@MarcelJordense Is there any update?

MarcelJordense commented 5 years ago

@anasarrak We hopefully have implemented a solution for this problem. A new release of the OpenSplice CE version will be available soon. I will inform you when this release is available.

anasarrak commented 5 years ago

@MarcelJordense Can you give us an aproximation of time of when it should be available? Do you have the patch so we can test it locally?

MarcelJordense commented 5 years ago

@anasarrak A new version of OpenSplice CE is now available which should solve the problem. The release is OSPL_V6_9_190624OSS_RELEASE. Currently however only for two supported platforms generated installers are available. The installers for the other platforms will be added later. Currently I cannot provide an estimation when these installers will be available.

anasarrak commented 5 years ago

@MarcelJordense After using your release the following error appears

Starting >>> control_msgs
--- stderr: control_msgs                               
Traceback (most recent call last):
  File "/opt/ros/dashing/lib/rosidl_typesupport_opensplice_cpp/rosidl_typesupport_opensplice_cpp", line 55, in <module>
    sys.exit(main())
  File "/opt/ros/dashing/lib/rosidl_typesupport_opensplice_cpp/rosidl_typesupport_opensplice_cpp", line 50, in main
    args.idl_pp,
  File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_typesupport_opensplice_cpp/__init__.py", line 82, in generate_dds_opensplice_cpp
    _modify(h_filename, msg_name, _replace_path_and_timestamp, idl_path=idl_path)
  File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_typesupport_opensplice_cpp/__init__.py", line 96, in _modify
    modified = callback(lines, msg_name, idl_path=idl_path)
  File "/opt/ros/dashing/lib/python3.6/site-packages/rosidl_typesupport_opensplice_cpp/__init__.py", line 115, in _replace_path_and_timestamp
    assert False, "Failed to find '// Generated: ' line"
AssertionError: Failed to find '// Generated: ' line
make[2]: *** [rosidl_typesupport_opensplice_cpp/control_msgs/msg/dds_opensplice/gripper_command__type_support.cpp] Error 1
make[2]: *** Deleting file 'rosidl_typesupport_opensplice_cpp/control_msgs/msg/dds_opensplice/gripper_command__type_support.cpp'
make[1]: *** [CMakeFiles/control_msgs__rosidl_typesupport_opensplice_cpp.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [all] Error 2
---
Failed   <<< control_msgs   [ Exited with code 2 ]

Commenting out the assert makes the compilation work and it seems like the messages are getting generated.

erle@kaladin:/mnt/myfiles/github/control_msgs$ du -a|grep gripper_command.hpp
    ./install/include/control_msgs/msg/gripper_command.hpp
    ./install/include/control_msgs/action/gripper_command.hpp
    ./build/control_msgs/rosidl_generator_cpp/control_msgs/msg/gripper_command.hpp
    ./build/control_msgs/rosidl_generator_cpp/control_msgs/action/gripper_command.hpp
MarcelJordense commented 5 years ago

@anasarrak The assert in the init.py is not valid anymore. Sorry I forgot about that. I have issued a pull request to solve this.

anasarrak commented 5 years ago

Great! Thanks for everything @MarcelJordense

supercjb commented 5 years ago

@anasarrak It seems being solved. Could you please close this ?