25 #include "ConnectGazeboToRosTopic.pb.h" 32 random_generator_(random_device_()),
33 pubs_and_subs_created_(false) {}
40 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
44 parent_sensor_ = std::dynamic_pointer_cast<sensors::GpsSensor>(_sensor);
51 std::string link_name;
53 if (_sdf->HasElement(
"robotNamespace"))
54 namespace_ = _sdf->GetElement(
"robotNamespace")->Get<std::string>();
56 gzerr <<
"[gazebo_gps_plugin] Please specify a robotNamespace.\n";
58 node_handle_ = gazebo::transport::NodePtr(
new transport::Node());
63 if (_sdf->HasElement(
"linkName"))
64 link_name = _sdf->GetElement(
"linkName")->Get<std::string>();
66 gzerr <<
"[gazebo_gps_plugin] Please specify a linkName.\n";
72 boost::dynamic_pointer_cast<physics::Link>(world_->EntityByName(link_name));
74 gzerr <<
"[gazebo_gps_plugin] Couldn't find specified link \"" << link_name
78 double hor_pos_std_dev;
79 double ver_pos_std_dev;
80 double hor_vel_std_dev;
81 double ver_vel_std_dev;
83 getSdfParam<std::string>(_sdf,
"gpsTopic",
gps_topic_,
89 getSdfParam<double>(_sdf,
"horPosStdDev", hor_pos_std_dev,
91 getSdfParam<double>(_sdf,
"verPosStdDev", ver_pos_std_dev,
93 getSdfParam<double>(_sdf,
"horVelStdDev", hor_vel_std_dev,
95 getSdfParam<double>(_sdf,
"verVelStdDev", ver_vel_std_dev,
119 gz_sensor_msgs::NavSatFix::COVARIANCE_TYPE_KNOWN);
121 for (
int i = 0; i < 9; i++) {
157 gzdbg << __FUNCTION__ <<
"() called." << std::endl;
166 common::Time current_time;
169 ignition::math::Vector3d W_ground_speed_W_L =
link_->WorldLinearVel();
183 gz_gps_message_.mutable_header()->mutable_stamp()->set_sec(current_time.sec);
189 W_ground_speed_W_L.X());
191 W_ground_speed_W_L.Y());
193 W_ground_speed_W_L.Z());
208 gazebo::transport::PublisherPtr connect_gazebo_to_ros_topic_pub =
209 node_handle_->Advertise<gz_std_msgs::ConnectGazeboToRosTopic>(
212 gz_std_msgs::ConnectGazeboToRosTopic connect_gazebo_to_ros_topic_msg;
220 connect_gazebo_to_ros_topic_msg.set_gazebo_topic(
"~/" +
namespace_ +
"/" +
222 connect_gazebo_to_ros_topic_msg.set_ros_topic(
namespace_ +
"/" + gps_topic_);
223 connect_gazebo_to_ros_topic_msg.set_msgtype(
224 gz_std_msgs::ConnectGazeboToRosTopic::NAV_SAT_FIX);
225 connect_gazebo_to_ros_topic_pub->Publish(connect_gazebo_to_ros_topic_msg,
232 node_handle_->Advertise<gz_geometry_msgs::TwistStamped>(
235 connect_gazebo_to_ros_topic_msg.set_gazebo_topic(
"~/" +
namespace_ +
"/" +
236 ground_speed_topic_);
237 connect_gazebo_to_ros_topic_msg.set_ros_topic(
namespace_ +
"/" +
238 ground_speed_topic_);
239 connect_gazebo_to_ros_topic_msg.set_msgtype(
240 gz_std_msgs::ConnectGazeboToRosTopic::TWIST_STAMPED);
241 connect_gazebo_to_ros_topic_pub->Publish(connect_gazebo_to_ros_topic_msg);
GZ_REGISTER_SENSOR_PLUGIN(GazeboGpsPlugin)
gz_sensor_msgs::NavSatFix gz_gps_message_
GPS message to be published on sensor update.
gazebo::transport::PublisherPtr gz_ground_speed_pub_
sensors::GpsSensorPtr parent_sensor_
Pointer to the parent sensor.
NormalDistribution ground_speed_n_[3]
Normal distributions for ground speed noise in x, y, and z directions.
gazebo::transport::PublisherPtr gz_gps_pub_
event::ConnectionPtr updateConnection_
Pointer to the update event connection.
gz_geometry_msgs::TwistStamped gz_ground_speed_message_
Ground speed message to be published on sensor update.
static constexpr char GPS[]
static const bool kPrintOnPluginLoad
std::string ground_speed_topic_
Name of topic for ground speed messages, read from SDF file.
std::string gps_topic_
Name of topic for GPS messages, read from SDF file.
static constexpr char GROUND_SPEED[]
std::normal_distribution NormalDistribution
static const bool kPrintOnUpdates
physics::LinkPtr link_
Pointer to the sensor link.
static constexpr double kDefaultHorVelStdDev
static constexpr double kDefaultVerPosStdDev
static constexpr double kDefaultHorPosStdDev
void CreatePubsAndSubs()
Creates all required publishers and subscribers, incl. routing of messages to/from ROS if required...
static const std::string kConnectGazeboToRosSubtopic
physics::WorldPtr world_
Pointer to the world.
void Load(sensors::SensorPtr _sensor, sdf::ElementPtr _sdf)
std::mt19937 random_generator_
bool pubs_and_subs_created_
Flag that is set to true once CreatePubsAndSubs() is called, used to prevent CreatePubsAndSubs() from...
gazebo::transport::NodePtr node_handle_
void OnUpdate()
Publishes both a NavSatFix and Gazebo message.
virtual ~GazeboGpsPlugin()
static constexpr double kDefaultVerVelStdDev