9 #include <std_msgs/Float64.h> 10 #include <geometry_msgs/Vector3.h> 15 #include <nav_msgs/Odometry.h> 16 #include <sensor_msgs/Imu.h> 17 #include <sensor_msgs/NavSatFix.h> 18 #include <Eigen/Dense> 32 :
nh_(node_handle),
pnh_(private_node_handle)
39 void headingCb(
const sensor_msgs::ImuConstPtr& imu_msg);
113 if (gps_msg->status.status==2 && gps_msg->position_covariance[0]<=0.0049){
129 ROS_WARN(
"Waiting for RTK fix to initialize localization...");
147 std::string utm_zone_tmp;
153 nav_msgs::Odometry gps_odom;
161 gpsToRobotPose(transformed_utm_gps, transformed_utm_robot, gps_odom.header.stamp);
164 std::ofstream myfile;
165 nav_msgs::Odometry init_state{};
168 tf2::toMsg(transformed_utm_robot, init_state.pose.pose);
169 double roll, pitch, yaw;
172 myfile <<
"initial_state: [" << init_state.pose.pose.position.x <<
", ";
173 myfile << init_state.pose.pose.position.y <<
", ";
174 myfile << init_state.pose.pose.position.z <<
",\n";
175 myfile << 0.0 <<
", ";
176 myfile << 0.0 <<
", ";
177 myfile << yaw <<
", \n";
178 myfile << 0.0 <<
", " << 0.0 <<
", " << 0.0 <<
", \n";
179 myfile << 0.0 <<
", " << 0.0 <<
", " << 0.0 <<
", \n";
180 myfile << 0.0 <<
", " << 0.0 <<
", " << 0.0 <<
"]";
183 ROS_INFO(
"Loaded initial_state param into yaml file");
191 nav_msgs::Odometry gps_odom{};
200 utm_world_transform_);
204 transformed_utm_gps.mult(utm_world_transform_, utm_pose);
212 tf2::toMsg(transformed_utm_gps, gps_odom.pose.pose);
213 gps_odom.pose.pose.position.z = (
zero_altitude_ ? 0.0 : gps_odom.pose.pose.position.z);
234 robot_odom_pose = gps_offset_rotated.
inverse() * gps_odom_pose;
238 int main(
int argc,
char **argv)
240 ros::init(argc, argv,
"set_initial_state_filter");
tf2_ros::Buffer tf_buffer_
std::string base_link_frame_id_
static const Quaternion & getIdentity()
std::string gps_frame_id_
void headingCb(const sensor_msgs::ImuConstPtr &imu_msg)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
tf2::Quaternion robot_orientation_
sensor_msgs::Imu imu_msg_avg_
sensor_msgs::NavSatFix gps_msg_avg_
tf2_ros::TransformListener tf_listener_
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
std::string world_frame_id_
SetInitialStateFilter(const ros::NodeHandle &node_handle, const ros::NodeHandle &private_node_handle)
tf::Quaternion robot_quat_
ros::Duration transform_timeout_
Eigen::MatrixXd utm_covariance_
ROSCPP_DECL void spin(Spinner &spinner)
void gpsToRobotPose(const tf2::Transform &gps_odom_pose, tf2::Transform &robot_odom_pose, const ros::Time &transform_time)
static void quaternionMsgToTF(const geometry_msgs::Quaternion &msg, Quaternion &bt)
void getRPY(tfScalar &roll, tfScalar &pitch, tfScalar &yaw, unsigned int solution_number=1) const
void fromMsg(const A &, B &b)
static void LLtoUTM(const double Lat, const double Long, double &UTMNorthing, double &UTMEasting, std::string &UTMZone, double &gamma)
ROSLIB_DECL std::string getPath(const std::string &package_name)
TF2SIMD_FORCE_INLINE Vector3 quatRotate(const Quaternion &rotation, const Vector3 &v)
bool getParam(const std::string &key, std::string &s) const
int main(int argc, char **argv)
void gpsCallback(const sensor_msgs::NavSatFixConstPtr &msg)
ros::Subscriber sub_heading_
ROSCPP_DECL void shutdown()
bool lookupTransformSafe(const tf2_ros::Buffer &buffer, const std::string &targetFrame, const std::string &sourceFrame, const ros::Time &time, const ros::Duration &timeout, tf2::Transform &targetFrameTrans, const bool silent=false)
~SetInitialStateFilter()=default
nav_msgs::Odometry utmToMap(const tf2::Transform &utm_pose, const ros::Time &transform_time) const