24 #include "ConnectGazeboToRosTopic.pb.h" 25 #include "ConnectRosToGazeboTopic.pb.h" 33 sdf::ElementPtr _sdf) {
35 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
49 if (_sdf->HasElement(
"robotNamespace")) {
50 namespace_ = _sdf->GetElement(
"robotNamespace")->Get<std::string>();
52 gzerr <<
"[gazebo_motor_model] Please specify a robotNamespace.\n";
55 node_handle_ = gazebo::transport::NodePtr(
new transport::Node());
60 getSdfParam<std::string>(_sdf,
"commandMotorSpeedSubTopic",
63 getSdfParam<std::string>(_sdf,
"motorSpeedCommandPubTopic",
75 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
87 common::Time now =
world_->SimTime();
89 gz_sensor_msgs::Actuators turning_velocities_msg;
95 turning_velocities_msg.mutable_header()->mutable_stamp()->set_sec(now.sec);
96 turning_velocities_msg.mutable_header()->mutable_stamp()->set_nsec(now.nsec);
99 turning_velocities_msg.mutable_header()->set_frame_id(
"");
105 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
108 gazebo::transport::PublisherPtr gz_connect_gazebo_to_ros_topic_pub =
109 node_handle_->Advertise<gz_std_msgs::ConnectGazeboToRosTopic>(
113 gazebo::transport::PublisherPtr gz_connect_ros_to_gazebo_topic_pub =
114 node_handle_->Advertise<gz_std_msgs::ConnectRosToGazeboTopic>(
124 gzdbg <<
"GazeboControllerInterface creating Gazebo publisher on \"" 132 gz_std_msgs::ConnectGazeboToRosTopic connect_gazebo_to_ros_topic_msg;
133 connect_gazebo_to_ros_topic_msg.set_gazebo_topic(
134 namespace_ +
"/" + motor_velocity_reference_pub_topic_);
135 connect_gazebo_to_ros_topic_msg.set_ros_topic(
136 namespace_ +
"/" + motor_velocity_reference_pub_topic_);
137 connect_gazebo_to_ros_topic_msg.set_msgtype(
138 gz_std_msgs::ConnectGazeboToRosTopic::ACTUATORS);
139 gz_connect_gazebo_to_ros_topic_pub->Publish(connect_gazebo_to_ros_topic_msg,
145 gzdbg <<
"Subscribing to Gazebo topic \"" 153 gz_std_msgs::ConnectRosToGazeboTopic connect_ros_to_gazebo_topic_msg;
154 connect_ros_to_gazebo_topic_msg.set_ros_topic(
namespace_ +
"/" +
157 connect_ros_to_gazebo_topic_msg.set_gazebo_topic(
159 connect_ros_to_gazebo_topic_msg.set_msgtype(
160 gz_std_msgs::ConnectRosToGazeboTopic::ACTUATORS);
161 gz_connect_ros_to_gazebo_topic_pub->Publish(connect_ros_to_gazebo_topic_msg,
164 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
170 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
174 for (
int i = 0; i < actuators_msg->angular_velocities_size(); ++i) {
static const std::string kConnectRosToGazeboSubtopic
void CommandMotorCallback(GzActuatorsMsgPtr &actuators_msg)
Eigen::VectorXd input_reference_
gazebo::transport::SubscriberPtr cmd_motor_sub_
static const bool kPrintOnPluginLoad
event::ConnectionPtr updateConnection_
Pointer to the update event connection.
~GazeboControllerInterface()
gazebo::transport::NodePtr node_handle_
static const bool kPrintOnUpdates
void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf)
bool pubs_and_subs_created_
Flag that is set to true once CreatePubsAndSubs() is called, used to prevent CreatePubsAndSubs() from...
gazebo::transport::PublisherPtr motor_velocity_reference_pub_
GZ_REGISTER_MODEL_PLUGIN(GazeboRosP3D)
void CreatePubsAndSubs()
Creates all required publishers and subscribers, incl. routing of messages to/from ROS if required...
static const std::string kConnectGazeboToRosSubtopic
void OnUpdate(const common::UpdateInfo &)
std::string command_motor_speed_sub_topic_
bool received_first_reference_
Gets set to true the first time a motor command is received.
static const bool kPrintOnMsgCallback
std::string motor_velocity_reference_pub_topic_