ROS Eloquent - Gazebo10 integration
I am failing to integrate a ROS node with a Gazebo10 plugin. I am following this tutorial more or less but translating to the ROS2 API: http://gazebosim.org/tutorials?cat=gu... . It seems that there is something wrong in my declaration of a subscription. I can't upload my file because I don't have 5 points, but I have copied the relevant code. I do not want to use gazebo_ros_pkgs.
// Initialize ros, if it has not already been initialized
if (!rclcpp::is_initialized())
{
int argc = 0;
char** argv = NULL;
//rclcpp::init(argc, argv, rclcpp::init_options::NoSigintHandler);
rclcpp::init(argc, argv);
}
// Setup callback group
this->rosCallbackGroup = this->rosNode->create_callback_group(
rclcpp::callback_group::CallbackGroupType::MutuallyExclusive);
// Setup subscriber options
this->rosSubOptions = rclcpp::SubscriptionOptions();
this->rosSubOptions.callback_group = this->rosCallbackGroup;
// Setup subscriber
this->rosSub = this->rosNode->create_subscription<std_msgs::msg::Float32>(
"/" + this->model->GetName() + "/vel_cmd",
rclcpp::QoS(1),
boost::bind(&VelodynePlugin::OnRosMsg, this, _1),
this->rosSubOptions);
Generating the following error:
In file included from /opt/ros/eloquent/include/rclcpp/client.hpp:31:0,
from /opt/ros/eloquent/include/rclcpp/callback_group.hpp:23,
from /opt/ros/eloquent/include/rclcpp/any_executable.hpp:20,
from /opt/ros/eloquent/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/eloquent/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/eloquent/include/rclcpp/executor.hpp:33,
from /opt/ros/eloquent/include/rclcpp/executors/multi_threaded_executor.hpp:25,
from /opt/ros/eloquent/include/rclcpp/executors.hpp:21,
from /opt/ros/eloquent/include/rclcpp/rclcpp.hpp:145,
from /ros2-dev/gazebo/.gazebo/plugins/velodyne/velodyne_plugin.cc:8: /opt/ros/eloquent/include/rclcpp/function_traits.hpp: In instantiation of ‘struct rclcpp::function_traits::function_traits<boost::_bi::bind_t<void, boost::_mfi::mf1<void, gazebo::VelodynePlugin, std::shared_ptr<std_msgs::msg::Float32_<std::allocator<void>
> > >, boost::_bi::list2<boost::_bi::value<gazebo::VelodynePlugin*>, boost::arg<1> > > >’: /opt/ros/eloquent/include/rclcpp/subscription_traits.hpp:90:8: required from ‘struct rclcpp::subscription_traits::has_message_type<boost::_bi::bind_t<void, boost::_mfi::mf1<void, gazebo::VelodynePlugin, std::shared_ptr<std_msgs::msg::Float32_<std::allocator<void>
> > >, boost::_bi::list2<boost::_bi::value<gazebo::VelodynePlugin*>, boost::arg<1> > >, void, void, void>’ /opt/ros/eloquent/include/rclcpp/node.hpp:199:5: required by substitution of ‘template<class MessageT, class CallbackT, class AllocatorT, class CallbackMessageT, class SubscriptionT, class MessageMemoryStrategyT> std::shared_ptr<SubscriptionT> rclcpp::Node::create_subscription(const string&, const rclcpp::QoS&, CallbackT&&, const rclcpp::SubscriptionOptionsWithAllocator<AllocatorT>&, typename MessageMemoryStrategyT::SharedPtr) [with MessageT = std_msgs::msg::Float32_<std::allocator<void>
>; CallbackT = boost::_bi::bind_t<void, boost::_mfi::mf1<void, gazebo::VelodynePlugin, std::shared_ptr<std_msgs::msg::Float32_<std::allocator<void>
> > >, boost::_bi::list2<boost::_bi::value<gazebo::VelodynePlugin*>, boost::arg<1> > >; AllocatorT = std::allocator<void>; CallbackMessageT
= <missing>; SubscriptionT = <missing>; MessageMemoryStrategyT = <missing>]’ /ros2-dev/gazebo/.gazebo/plugins/velodyne/velodyne_plugin.cc:128:32: required from here /opt/ros/eloquent/include/rclcpp/function_traits.hpp:52:82: error: decltype cannot resolve address of overloaded function
typename function_traits<decltype( &FunctionT::operator())>::arguments>::type;
^ /opt/ros/eloquent/include/rclcpp/function_traits.hpp:57:72: error: decltype cannot resolve address of overloaded function using argument_type = typename std::tuple_element<N, arguments>::type;
^ /opt/ros/eloquent/include/rclcpp/function_traits.hpp:59:95: error: decltype cannot resolve address of overloaded function using return_type = typename function_traits<decltype( &FunctionT::operator())>::return_type;
^ /ros2-dev/gazebo/.gazebo/plugins/velodyne/velodyne_plugin.cc: In ...
I would recommend you edit your question and include a verbatim copy of the error message, then format it with the Preformatted Text button (the one with
101010
on it). As-is, the error message is almost unreadable.Could you give me the points to upload a file? It would be much simpler
Edit: My function declaration OnRosMsg(const std_msgs::msg::Float32::SharedPtr) is correct. Switching from boost::bind to std::bind generates a different long error
there is no support to upload text files or source code. So giving you points would not seem to help.
If you intended to upload a screenshot then I would point you to the Support Guidelines which explicitly state you should not do that.
I intend to use the
attachment
(paperclip) function on the edit barThat only allows image type attachments. Not sure whether that is because of configuration or just how Askbot works.
Please post your last edit as an answer and accept your own answer.
I can't accept my own answer, as I need >10 points.