12 #if PACKAGE_ROS_VERSION == 1 13 #include <dynamic_reconfigure/server.h> 14 #include <mvsim/mvsimNodeConfig.h> 17 #include <mrpt/core/WorkerThreadsPool.h> 18 #include <mrpt/obs/CObservation.h> 19 #include <mrpt/obs/obs_frwds.h> 20 #include <mrpt/system/CTicTac.h> 21 #include <mrpt/system/CTimeLogger.h> 28 #if PACKAGE_ROS_VERSION == 1 29 #include <geometry_msgs/Twist.h> 32 #include <rosgraph_msgs/Clock.h> 33 #include <visualization_msgs/MarkerArray.h> 35 #include <geometry_msgs/msg/polygon.hpp> 36 #include <geometry_msgs/msg/pose_array.hpp> 37 #include <geometry_msgs/msg/pose_with_covariance_stamped.hpp> 38 #include <nav_msgs/msg/map_meta_data.hpp> 39 #include <nav_msgs/msg/occupancy_grid.hpp> 40 #include <nav_msgs/msg/odometry.hpp> 41 #include <visualization_msgs/msg/marker_array.hpp> 43 #include "rclcpp/clock.hpp" 44 #include "rclcpp/rclcpp.hpp" 45 #include "rclcpp/time_source.hpp" 55 class CObservationPointCloud;
65 #if PACKAGE_ROS_VERSION == 1 74 void terminateSimulation();
76 void launch_mvsim_server();
78 void loadWorldModel(
const std::string& world_xml_file);
82 #if PACKAGE_ROS_VERSION == 1 84 void configCallback(mvsim::mvsimNodeConfig& config, uint32_t level);
87 void onNewObservation(
92 std::shared_ptr<mvsim::World> mvsim_world_ =
93 std::make_shared<mvsim::World>();
95 mrpt::WorkerThreadsPool ros_publisher_workers_{
96 4 , mrpt::WorkerThreadsPool::POLICY_FIFO};
99 double realtime_factor_ = 1.0;
100 int gui_refresh_period_ms_ = 50;
101 bool headless_ =
false;
105 bool do_fake_localization_ =
true;
107 int publisher_history_len_ = 50;
110 double transform_tolerance_ = 0.1;
115 #if PACKAGE_ROS_VERSION == 1 119 rclcpp::Node::SharedPtr
n_;
124 #if PACKAGE_ROS_VERSION == 1 128 rclcpp::Publisher<nav_msgs::msg::OccupancyGrid>::SharedPtr
pub_map_ros_;
130 rclcpp::TimeSource ts_{n_};
134 #if PACKAGE_ROS_VERSION == 1 144 #if PACKAGE_ROS_VERSION == 1 153 std::map<std::string, ros::Publisher> pub_sensors;
158 visualization_msgs::MarkerArray chassis_shape_msg;
160 rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr sub_cmd_vel;
163 rclcpp::Publisher<nav_msgs::msg::Odometry>::SharedPtr
pub_odom;
168 rclcpp::Publisher<geometry_msgs::msg::PoseWithCovarianceStamped>::
170 rclcpp::Publisher<geometry_msgs::msg::PoseArray>::SharedPtr
174 std::map<std::string, rclcpp::PublisherBase::SharedPtr>
pub_sensors;
177 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr
180 rclcpp::Publisher<geometry_msgs::msg::Polygon>::SharedPtr
200 #
if PACKAGE_ROS_VERSION == 1
201 const geometry_msgs::Twist::ConstPtr& cmd,
203 const geometry_msgs::msg::Twist::ConstSharedPtr& cmd,
208 #if PACKAGE_ROS_VERSION == 1 216 rclcpp::Duration base_watchdog_timeout_ = std::chrono::seconds(1);
227 std::atomic_bool closing{
false};
235 bool world_init_ok_ =
false;
239 double period_ms_publish_tf_ = 20;
245 double period_ms_teleop_refresh_ = 100;
249 size_t teleop_idx_veh_ = 0;
258 void notifyROSWorldIsUpdated();
261 void spinNotifyROS();
265 std::string vehVarName(
269 const std::string& frame_id,
const std::string& child_frame_id,
271 #
if PACKAGE_ROS_VERSION == 1
274 const rclcpp::Time& stamp
278 #if PACKAGE_ROS_VERSION == 1 281 rclcpp::Time myNow()
const;
284 mrpt::system::CTimeLogger profiler_{
true ,
"mvsim_node"};
291 const mrpt::obs::CObservation2DRangeScan& obs);
296 const mrpt::obs::CObservation3DRangeScan& obs);
299 const mrpt::obs::CObservationPointCloud& obs);
mvsim::World::TGUIKeyEvent gui_key_events_
rclcpp::Publisher< nav_msgs::msg::Odometry >::SharedPtr pub_odom
Publisher of "odom" topic.
visualization_msgs::msg::MarkerArray chassis_shape_msg
mrpt::system::CTicTac realtime_tictac_
rclcpp::Node::SharedPtr n_
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr pub_chassis_markers
"<VEH>/chassis_markers"
rclcpp::Publisher< nav_msgs::msg::OccupancyGrid >::SharedPtr pub_map_ros_
used for simul_map publication
rclcpp::Publisher< geometry_msgs::msg::PoseArray >::SharedPtr pub_particlecloud
rclcpp::Clock::SharedPtr clock_
std::mutex pubsub_vehicles_mtx_
rclcpp::Publisher< geometry_msgs::msg::Polygon >::SharedPtr pub_chassis_shape
"<VEH>/chassis_shape"
mrpt::system::CTicTac tim_teleop_refresh_
TThreadParams thread_params_
mrpt::system::CTicTac tim_publish_tf_
std::map< std::string, rclcpp::PublisherBase::SharedPtr > pub_sensors
Map <sensor_label> => publisher.
rclcpp::Publisher< nav_msgs::msg::Odometry >::SharedPtr pub_ground_truth
"base_pose_ground_truth" topic
rclcpp::Publisher< nav_msgs::msg::MapMetaData >::SharedPtr pub_map_metadata_
std::shared_ptr< mvsim::Server > mvsim_server_
rclcpp::Publisher< geometry_msgs::msg::PoseWithCovarianceStamped >::SharedPtr pub_amcl_pose
"fake_localization" pubs:
rclcpp::Time base_last_cmd_
received a vel_cmd (for watchdog)
std::vector< TPubSubPerVehicle > pubsub_vehicles_