26 const std::string &old_delim,
27 const std::string new_delim)
30 output.reserve(input.size());
32 std::size_t last_pos = 0;
34 while (last_pos < input.size())
36 std::size_t pos = input.find(old_delim, last_pos);
37 output += input.substr(last_pos, pos - last_pos);
38 if (pos != std::string::npos)
41 pos += old_delim.size();
64 const std_msgs::Bool & ros_msg,
65 ignition::msgs::Boolean & ign_msg)
67 ign_msg.set_data(ros_msg.data);
73 const ignition::msgs::Boolean & ign_msg,
74 std_msgs::Bool & ros_msg)
76 ros_msg.data = ign_msg.data();
82 const std_msgs::ColorRGBA & ros_msg,
83 ignition::msgs::Color & ign_msg)
85 ign_msg.set_r(ros_msg.r);
86 ign_msg.set_g(ros_msg.g);
87 ign_msg.set_b(ros_msg.b);
88 ign_msg.set_a(ros_msg.a);
94 const ignition::msgs::Color & ign_msg,
95 std_msgs::ColorRGBA & ros_msg)
97 ros_msg.r = ign_msg.r();
98 ros_msg.g = ign_msg.g();
99 ros_msg.b = ign_msg.b();
100 ros_msg.a = ign_msg.a();
106 const std_msgs::Empty &,
107 ignition::msgs::Empty &)
114 const ignition::msgs::Empty &,
122 const std_msgs::Int32 & ros_msg,
123 ignition::msgs::Int32 & ign_msg)
125 ign_msg.set_data(ros_msg.data);
131 const ignition::msgs::Int32 & ign_msg,
132 std_msgs::Int32 & ros_msg)
134 ros_msg.data = ign_msg.data();
140 const std_msgs::Float32 & ros_msg,
141 ignition::msgs::Float & ign_msg)
143 ign_msg.set_data(ros_msg.data);
149 const ignition::msgs::Float & ign_msg,
150 std_msgs::Float32 & ros_msg)
152 ros_msg.data = ign_msg.data();
158 const std_msgs::Float64 & ros_msg,
159 ignition::msgs::Double & ign_msg)
161 ign_msg.set_data(ros_msg.data);
167 const ignition::msgs::Double & ign_msg,
168 std_msgs::Float64 & ros_msg)
170 ros_msg.data = ign_msg.data();
176 const std_msgs::Header & ros_msg,
177 ignition::msgs::Header & ign_msg)
179 ign_msg.mutable_stamp()->set_sec(ros_msg.stamp.sec);
180 ign_msg.mutable_stamp()->set_nsec(ros_msg.stamp.nsec);
181 auto newPair = ign_msg.add_data();
182 newPair->set_key(
"seq");
183 newPair->add_value(std::to_string(ros_msg.seq));
184 newPair = ign_msg.add_data();
185 newPair->set_key(
"frame_id");
186 newPair->add_value(ros_msg.frame_id);
192 const ignition::msgs::Header & ign_msg,
193 std_msgs::Header & ros_msg)
195 ros_msg.stamp =
ros::Time(ign_msg.stamp().sec(), ign_msg.stamp().nsec());
196 for (
auto i = 0; i < ign_msg.data_size(); ++i)
198 auto aPair = ign_msg.data(i);
199 if (aPair.key() ==
"seq" && aPair.value_size() > 0)
201 std::string value = aPair.value(0);
204 unsigned long ul = std::stoul(value,
nullptr);
207 catch (std::exception & e)
210 <<
"unsigned int" << std::endl);
213 else if (aPair.key() ==
"frame_id" && aPair.value_size() > 0)
223 const std_msgs::String & ros_msg,
224 ignition::msgs::StringMsg & ign_msg)
226 ign_msg.set_data(ros_msg.data);
232 const ignition::msgs::StringMsg & ign_msg,
233 std_msgs::String & ros_msg)
235 ros_msg.data = ign_msg.data();
241 const ignition::msgs::Clock & ign_msg,
242 rosgraph_msgs::Clock & ros_msg)
244 ros_msg.clock =
ros::Time(ign_msg.sim().sec(), ign_msg.sim().nsec());
250 const rosgraph_msgs::Clock & ros_msg,
251 ignition::msgs::Clock & ign_msg)
253 ign_msg.mutable_sim()->set_sec(ros_msg.clock.sec);
254 ign_msg.mutable_sim()->set_nsec(ros_msg.clock.nsec);
260 const geometry_msgs::Quaternion & ros_msg,
261 ignition::msgs::Quaternion & ign_msg)
263 ign_msg.set_x(ros_msg.x);
264 ign_msg.set_y(ros_msg.y);
265 ign_msg.set_z(ros_msg.z);
266 ign_msg.set_w(ros_msg.w);
272 const ignition::msgs::Quaternion & ign_msg,
273 geometry_msgs::Quaternion & ros_msg)
275 ros_msg.x = ign_msg.x();
276 ros_msg.y = ign_msg.y();
277 ros_msg.z = ign_msg.z();
278 ros_msg.w = ign_msg.w();
284 const geometry_msgs::Vector3 & ros_msg,
285 ignition::msgs::Vector3d & ign_msg)
287 ign_msg.set_x(ros_msg.x);
288 ign_msg.set_y(ros_msg.y);
289 ign_msg.set_z(ros_msg.z);
295 const ignition::msgs::Vector3d & ign_msg,
296 geometry_msgs::Vector3 & ros_msg)
298 ros_msg.x = ign_msg.x();
299 ros_msg.y = ign_msg.y();
300 ros_msg.z = ign_msg.z();
306 const geometry_msgs::Point & ros_msg,
307 ignition::msgs::Vector3d & ign_msg)
309 ign_msg.set_x(ros_msg.x);
310 ign_msg.set_y(ros_msg.y);
311 ign_msg.set_z(ros_msg.z);
317 const ignition::msgs::Vector3d & ign_msg,
318 geometry_msgs::Point & ros_msg)
320 ros_msg.x = ign_msg.x();
321 ros_msg.y = ign_msg.y();
322 ros_msg.z = ign_msg.z();
328 const geometry_msgs::Pose & ros_msg,
329 ignition::msgs::Pose & ign_msg)
338 const ignition::msgs::Pose & ign_msg,
339 geometry_msgs::Pose & ros_msg)
348 const geometry_msgs::PoseArray & ros_msg,
349 ignition::msgs::Pose_V & ign_msg)
351 ign_msg.clear_pose();
352 for (
auto const &t : ros_msg.poses)
354 auto p = ign_msg.add_pose();
364 const ignition::msgs::Pose_V & ign_msg,
365 geometry_msgs::PoseArray & ros_msg)
367 ros_msg.poses.clear();
368 for (
auto const &p : ign_msg.pose())
370 geometry_msgs::Pose pose;
372 ros_msg.poses.push_back(pose);
380 const geometry_msgs::PoseStamped & ros_msg,
381 ignition::msgs::Pose & ign_msg)
390 const ignition::msgs::Pose & ign_msg,
391 geometry_msgs::PoseStamped & ros_msg)
400 const geometry_msgs::Transform & ros_msg,
401 ignition::msgs::Pose & ign_msg)
410 const ignition::msgs::Pose & ign_msg,
411 geometry_msgs::Transform & ros_msg)
420 const geometry_msgs::TransformStamped & ros_msg,
421 ignition::msgs::Pose & ign_msg)
426 auto newPair = ign_msg.mutable_header()->add_data();
427 newPair->set_key(
"child_frame_id");
428 newPair->add_value(ros_msg.child_frame_id);
434 const ignition::msgs::Pose & ign_msg,
435 geometry_msgs::TransformStamped & ros_msg)
439 for (
auto i = 0; i < ign_msg.header().data_size(); ++i)
441 auto aPair = ign_msg.header().data(i);
442 if (aPair.key() ==
"child_frame_id" && aPair.value_size() > 0)
453 const tf2_msgs::TFMessage & ros_msg,
454 ignition::msgs::Pose_V & ign_msg)
456 ign_msg.clear_pose();
457 for (
auto const &t : ros_msg.transforms)
459 auto p = ign_msg.add_pose();
463 if (!ros_msg.transforms.empty())
466 (*ign_msg.mutable_header()));
473 const ignition::msgs::Pose_V & ign_msg,
474 tf2_msgs::TFMessage & ros_msg)
476 ros_msg.transforms.clear();
477 for (
auto const &p : ign_msg.pose())
479 geometry_msgs::TransformStamped tf;
481 ros_msg.transforms.push_back(tf);
488 const geometry_msgs::Twist & ros_msg,
489 ignition::msgs::Twist & ign_msg)
498 const ignition::msgs::Twist & ign_msg,
499 geometry_msgs::Twist & ros_msg)
540 const nav_msgs::OccupancyGrid & ros_msg,
541 ignition::msgs::OccupancyGrid & ign_msg)
545 ign_msg.mutable_info()->mutable_map_load_time()->set_sec(
546 ros_msg.info.map_load_time.sec);
547 ign_msg.mutable_info()->mutable_map_load_time()->set_nsec(
548 ros_msg.info.map_load_time.nsec);
550 ign_msg.mutable_info()->set_resolution(
551 ros_msg.info.resolution);
552 ign_msg.mutable_info()->set_width(
554 ign_msg.mutable_info()->set_height(
555 ros_msg.info.height);
558 (*ign_msg.mutable_info()->mutable_origin()));
560 ign_msg.set_data(&ros_msg.data[0], ros_msg.data.size());
566 const ignition::msgs::OccupancyGrid & ign_msg,
567 nav_msgs::OccupancyGrid & ros_msg)
571 ros_msg.info.map_load_time.sec = ign_msg.info().map_load_time().sec();
572 ros_msg.info.map_load_time.nsec = ign_msg.info().map_load_time().nsec();
573 ros_msg.info.resolution = ign_msg.info().resolution();
574 ros_msg.info.width = ign_msg.info().width();
575 ros_msg.info.height = ign_msg.info().height();
579 ros_msg.data.resize(ign_msg.data().size());
580 memcpy(&ros_msg.data[0], ign_msg.data().c_str(), ign_msg.data().size());
586 const nav_msgs::Odometry & ros_msg,
587 ignition::msgs::Odometry & ign_msg)
593 auto childFrame = ign_msg.mutable_header()->add_data();
594 childFrame->set_key(
"child_frame_id");
595 childFrame->add_value(ros_msg.child_frame_id);
601 const ignition::msgs::Odometry & ign_msg,
602 nav_msgs::Odometry & ros_msg)
608 for (
auto i = 0; i < ign_msg.header().data_size(); ++i)
610 auto aPair = ign_msg.header().data(i);
611 if (aPair.key() ==
"child_frame_id" && aPair.value_size() > 0)
622 const sensor_msgs::FluidPressure & ros_msg,
623 ignition::msgs::FluidPressure & ign_msg)
626 ign_msg.set_pressure(ros_msg.fluid_pressure);
627 ign_msg.set_variance(ros_msg.variance);
633 const ignition::msgs::FluidPressure & ign_msg,
634 sensor_msgs::FluidPressure & ros_msg)
637 ros_msg.fluid_pressure = ign_msg.pressure();
638 ros_msg.variance = ign_msg.variance();
644 const sensor_msgs::Image & ros_msg,
645 ignition::msgs::Image & ign_msg)
649 ign_msg.set_width(ros_msg.width);
650 ign_msg.set_height(ros_msg.height);
652 unsigned int num_channels;
653 unsigned int octets_per_channel;
655 if (ros_msg.encoding ==
"mono8")
657 ign_msg.set_pixel_format_type(
658 ignition::msgs::PixelFormatType::L_INT8);
660 octets_per_channel = 1u;
662 else if (ros_msg.encoding ==
"mono16")
664 ign_msg.set_pixel_format_type(
665 ignition::msgs::PixelFormatType::L_INT16);
667 octets_per_channel = 2u;
669 else if (ros_msg.encoding ==
"rgb8")
671 ign_msg.set_pixel_format_type(
672 ignition::msgs::PixelFormatType::RGB_INT8);
674 octets_per_channel = 1u;
676 else if (ros_msg.encoding ==
"rgba8")
678 ign_msg.set_pixel_format_type(
679 ignition::msgs::PixelFormatType::RGBA_INT8);
681 octets_per_channel = 1u;
683 else if (ros_msg.encoding ==
"bgra8")
685 ign_msg.set_pixel_format_type(
686 ignition::msgs::PixelFormatType::BGRA_INT8);
688 octets_per_channel = 1u;
690 else if (ros_msg.encoding ==
"rgb16")
692 ign_msg.set_pixel_format_type(
693 ignition::msgs::PixelFormatType::RGB_INT16);
695 octets_per_channel = 2u;
697 else if (ros_msg.encoding ==
"bgr8")
699 ign_msg.set_pixel_format_type(
700 ignition::msgs::PixelFormatType::BGR_INT8);
702 octets_per_channel = 1u;
704 else if (ros_msg.encoding ==
"bgr16")
706 ign_msg.set_pixel_format_type(
707 ignition::msgs::PixelFormatType::BGR_INT16);
709 octets_per_channel = 2u;
711 else if (ros_msg.encoding ==
"32FC1")
713 ign_msg.set_pixel_format_type(
714 ignition::msgs::PixelFormatType::R_FLOAT32);
716 octets_per_channel = 4u;
720 ign_msg.set_pixel_format_type(
721 ignition::msgs::PixelFormatType::UNKNOWN_PIXEL_FORMAT);
727 ign_msg.set_step(ign_msg.width() * num_channels * octets_per_channel);
729 ign_msg.set_data(&(ros_msg.data[0]), ign_msg.step() * ign_msg.height());
735 const ignition::msgs::Image & ign_msg,
736 sensor_msgs::Image & ros_msg)
740 ros_msg.height = ign_msg.height();
741 ros_msg.width = ign_msg.width();
743 unsigned int num_channels;
744 unsigned int octets_per_channel;
746 if (ign_msg.pixel_format_type() ==
747 ignition::msgs::PixelFormatType::L_INT8)
749 ros_msg.encoding =
"mono8";
751 octets_per_channel = 1u;
753 else if (ign_msg.pixel_format_type() ==
754 ignition::msgs::PixelFormatType::L_INT16)
756 ros_msg.encoding =
"mono16";
758 octets_per_channel = 2u;
760 else if (ign_msg.pixel_format_type() ==
761 ignition::msgs::PixelFormatType::RGB_INT8)
763 ros_msg.encoding =
"rgb8";
765 octets_per_channel = 1u;
767 else if (ign_msg.pixel_format_type() ==
768 ignition::msgs::PixelFormatType::RGBA_INT8)
770 ros_msg.encoding =
"rgba8";
772 octets_per_channel = 1u;
774 else if (ign_msg.pixel_format_type() ==
775 ignition::msgs::PixelFormatType::BGRA_INT8)
777 ros_msg.encoding =
"bgra8";
779 octets_per_channel = 1u;
781 else if (ign_msg.pixel_format_type() ==
782 ignition::msgs::PixelFormatType::RGB_INT16)
784 ros_msg.encoding =
"rgb16";
786 octets_per_channel = 2u;
788 else if (ign_msg.pixel_format_type() ==
789 ignition::msgs::PixelFormatType::BGR_INT8)
791 ros_msg.encoding =
"bgr8";
793 octets_per_channel = 1u;
795 else if (ign_msg.pixel_format_type() ==
796 ignition::msgs::PixelFormatType::BGR_INT16)
798 ros_msg.encoding =
"bgr16";
800 octets_per_channel = 2u;
802 else if (ign_msg.pixel_format_type() ==
803 ignition::msgs::PixelFormatType::R_FLOAT32)
805 ros_msg.encoding =
"32FC1";
807 octets_per_channel = 4u;
812 << ign_msg.pixel_format_type() <<
"]" << std::endl);
816 ros_msg.is_bigendian =
false;
817 ros_msg.step = ros_msg.width * num_channels * octets_per_channel;
819 auto count = ros_msg.step * ros_msg.height;
820 ros_msg.data.resize(ros_msg.step * ros_msg.height);
822 ign_msg.data().begin(),
823 ign_msg.data().begin() + count,
824 ros_msg.data.begin());
830 const sensor_msgs::CameraInfo & ros_msg,
831 ignition::msgs::CameraInfo & ign_msg)
835 ign_msg.set_width(ros_msg.width);
836 ign_msg.set_height(ros_msg.height);
838 auto distortion = ign_msg.mutable_distortion();
839 if (ros_msg.distortion_model ==
"plumb_bob")
841 distortion->set_model(ignition::msgs::CameraInfo::Distortion::PLUMB_BOB);
843 else if (ros_msg.distortion_model ==
"rational_polynomial")
845 distortion->set_model(ignition::msgs::CameraInfo::Distortion::RATIONAL_POLYNOMIAL);
847 else if (ros_msg.distortion_model ==
"equidistant")
849 distortion->set_model(ignition::msgs::CameraInfo::Distortion::EQUIDISTANT);
854 << ros_msg.distortion_model <<
"]" << std::endl);
856 for (
auto i = 0u; i < ros_msg.D.size(); ++i)
858 distortion->add_k(ros_msg.D[i]);
861 auto intrinsics = ign_msg.mutable_intrinsics();
862 for (
auto i = 0u; i < ros_msg.K.size(); ++i)
864 intrinsics->add_k(ros_msg.K[i]);
867 auto projection = ign_msg.mutable_projection();
868 for (
auto i = 0u; i < ros_msg.P.size(); ++i)
870 projection->add_p(ros_msg.P[i]);
873 for (
auto i = 0u; i < ros_msg.R.size(); ++i)
875 ign_msg.add_rectification_matrix(ros_msg.R[i]);
882 const ignition::msgs::CameraInfo & ign_msg,
883 sensor_msgs::CameraInfo & ros_msg)
887 ros_msg.height = ign_msg.height();
888 ros_msg.width = ign_msg.width();
890 auto distortion = ign_msg.distortion();
891 if (ign_msg.has_distortion())
893 auto distortion = ign_msg.distortion();
894 if (distortion.model() ==
895 ignition::msgs::CameraInfo::Distortion::PLUMB_BOB)
897 ros_msg.distortion_model =
"plumb_bob";
899 else if (distortion.model() ==
900 ignition::msgs::CameraInfo::Distortion::RATIONAL_POLYNOMIAL)
902 ros_msg.distortion_model =
"rational_polynomial";
904 else if (distortion.model() ==
905 ignition::msgs::CameraInfo::Distortion::EQUIDISTANT)
907 ros_msg.distortion_model =
"equidistant";
912 << distortion.model() <<
"]" << std::endl);
915 ros_msg.D.resize(distortion.k_size());
916 for (
auto i = 0; i < distortion.k_size(); ++i)
918 ros_msg.D[i] = distortion.k(i);
922 auto intrinsics = ign_msg.intrinsics();
923 if (ign_msg.has_intrinsics())
925 auto intrinsics = ign_msg.intrinsics();
927 for (
auto i = 0; i < intrinsics.k_size(); ++i)
929 ros_msg.K[i] = intrinsics.k(i);
933 auto projection = ign_msg.projection();
934 if (ign_msg.has_projection())
936 auto projection = ign_msg.projection();
938 for (
auto i = 0; i < projection.p_size(); ++i)
940 ros_msg.P[i] = projection.p(i);
944 for (
auto i = 0; i < ign_msg.rectification_matrix_size(); ++i)
946 ros_msg.R[i] = ign_msg.rectification_matrix(i);
953 const sensor_msgs::Imu & ros_msg,
954 ignition::msgs::IMU & ign_msg)
959 ign_msg.set_entity_name(ros_msg.header.frame_id);
961 if (!ignition::math::equal(ros_msg.orientation_covariance[0], -1.0))
970 (*ign_msg.mutable_angular_velocity()));
972 (*ign_msg.mutable_linear_acceleration()));
978 const ignition::msgs::IMU & ign_msg,
979 sensor_msgs::Imu & ros_msg)
983 if (ign_msg.has_orientation())
993 ros_msg.orientation_covariance[0] = -1.0f;
1005 const sensor_msgs::JointState & ros_msg,
1006 ignition::msgs::Model & ign_msg)
1010 const auto nan = std::numeric_limits<double>::quiet_NaN();
1011 for (
auto i = 0u; i < ros_msg.name.size(); ++i)
1013 auto newJoint = ign_msg.add_joint();
1014 newJoint->set_name(ros_msg.name[i]);
1016 if (ros_msg.position.size() > i)
1017 newJoint->mutable_axis1()->set_position(ros_msg.position[i]);
1019 newJoint->mutable_axis1()->set_position(nan);
1021 if (ros_msg.velocity.size() > i)
1022 newJoint->mutable_axis1()->set_velocity(ros_msg.velocity[i]);
1024 newJoint->mutable_axis1()->set_velocity(nan);
1026 if (ros_msg.effort.size() > i)
1027 newJoint->mutable_axis1()->set_force(ros_msg.effort[i]);
1029 newJoint->mutable_axis1()->set_force(nan);
1036 const ignition::msgs::Model & ign_msg,
1037 sensor_msgs::JointState & ros_msg)
1041 for (
auto i = 0; i < ign_msg.joint_size(); ++i)
1043 ros_msg.name.push_back(ign_msg.joint(i).name());
1044 ros_msg.position.push_back(ign_msg.joint(i).axis1().position());
1045 ros_msg.velocity.push_back(ign_msg.joint(i).axis1().velocity());
1046 ros_msg.effort.push_back(ign_msg.joint(i).axis1().force());
1053 const sensor_msgs::LaserScan & ros_msg,
1054 ignition::msgs::LaserScan & ign_msg)
1056 const unsigned int num_readings =
1057 (ros_msg.angle_max - ros_msg.angle_min) / ros_msg.angle_increment;
1060 ign_msg.set_frame(ros_msg.header.frame_id);
1061 ign_msg.set_angle_min(ros_msg.angle_min);
1062 ign_msg.set_angle_max(ros_msg.angle_max);
1063 ign_msg.set_angle_step(ros_msg.angle_increment);
1064 ign_msg.set_range_min(ros_msg.range_min);
1065 ign_msg.set_range_max(ros_msg.range_max);
1066 ign_msg.set_count(num_readings);
1069 ign_msg.set_vertical_angle_min(0.0);
1070 ign_msg.set_vertical_angle_max(0.0);
1071 ign_msg.set_vertical_angle_step(0.0);
1072 ign_msg.set_vertical_count(0u);
1074 for (
auto i = 0u; i < ign_msg.count(); ++i)
1076 ign_msg.add_ranges(ros_msg.ranges[i]);
1077 ign_msg.add_intensities(ros_msg.intensities[i]);
1084 const ignition::msgs::LaserScan & ign_msg,
1085 sensor_msgs::LaserScan & ros_msg)
1090 ros_msg.angle_min = ign_msg.angle_min();
1091 ros_msg.angle_max = ign_msg.angle_max();
1092 ros_msg.angle_increment = ign_msg.angle_step();
1095 ros_msg.time_increment = 0.0;
1096 ros_msg.scan_time = 0.0;
1098 ros_msg.range_min = ign_msg.range_min();
1099 ros_msg.range_max = ign_msg.range_max();
1101 auto count = ign_msg.count();
1102 auto vertical_count = ign_msg.vertical_count();
1105 size_t start = (vertical_count / 2) * count;
1108 ros_msg.ranges.resize(count);
1110 ign_msg.ranges().begin() +
start,
1111 ign_msg.ranges().begin() +
start + count,
1112 ros_msg.ranges.begin());
1115 ros_msg.intensities.resize(count);
1117 ign_msg.intensities().begin() +
start,
1118 ign_msg.intensities().begin() +
start + count,
1119 ros_msg.intensities.begin());
1125 const sensor_msgs::MagneticField & ros_msg,
1126 ignition::msgs::Magnetometer & ign_msg)
1135 const ignition::msgs::Magnetometer & ign_msg,
1136 sensor_msgs::MagneticField & ros_msg)
1147 const sensor_msgs::NavSatFix & ros_msg,
1148 ignition::msgs::NavSat & ign_msg)
1151 ign_msg.set_latitude_deg(ros_msg.latitude);
1152 ign_msg.set_longitude_deg(ros_msg.longitude);
1153 ign_msg.set_altitude(ros_msg.altitude);
1154 ign_msg.set_frame_id(ros_msg.header.frame_id);
1157 ign_msg.set_velocity_east(0.0);
1158 ign_msg.set_velocity_north(0.0);
1159 ign_msg.set_velocity_up(0.0);
1165 const ignition::msgs::NavSat & ign_msg,
1166 sensor_msgs::NavSatFix & ros_msg)
1170 ros_msg.latitude = ign_msg.latitude_deg();
1171 ros_msg.longitude = ign_msg.longitude_deg();
1172 ros_msg.altitude = ign_msg.altitude();
1175 ros_msg.position_covariance_type = sensor_msgs::NavSatFix::COVARIANCE_TYPE_UNKNOWN;
1176 ros_msg.status.status = sensor_msgs::NavSatStatus::STATUS_FIX;
1182 const sensor_msgs::PointCloud2 & ros_msg,
1183 ignition::msgs::PointCloudPacked &ign_msg)
1187 ign_msg.set_height(ros_msg.height);
1188 ign_msg.set_width(ros_msg.width);
1189 ign_msg.set_is_bigendian(ros_msg.is_bigendian);
1190 ign_msg.set_point_step(ros_msg.point_step);
1191 ign_msg.set_row_step(ros_msg.row_step);
1192 ign_msg.set_is_dense(ros_msg.is_dense);
1193 ign_msg.mutable_data()->resize(ros_msg.data.size());
1194 memcpy(ign_msg.mutable_data()->data(), ros_msg.data.data(),
1195 ros_msg.data.size());
1197 for (
unsigned int i = 0; i < ros_msg.fields.size(); ++i)
1199 ignition::msgs::PointCloudPacked::Field *pf = ign_msg.add_field();
1200 pf->set_name(ros_msg.fields[i].name);
1201 pf->set_count(ros_msg.fields[i].count);
1202 pf->set_offset(ros_msg.fields[i].offset);
1203 switch (ros_msg.fields[i].datatype)
1206 case sensor_msgs::PointField::INT8:
1207 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::INT8);
1209 case sensor_msgs::PointField::UINT8:
1210 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::UINT8);
1212 case sensor_msgs::PointField::INT16:
1213 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::INT16);
1215 case sensor_msgs::PointField::UINT16:
1216 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::UINT16);
1218 case sensor_msgs::PointField::INT32:
1219 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::INT32);
1221 case sensor_msgs::PointField::UINT32:
1222 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::UINT32);
1224 case sensor_msgs::PointField::FLOAT32:
1225 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::FLOAT32);
1227 case sensor_msgs::PointField::FLOAT64:
1228 pf->set_datatype(ignition::msgs::PointCloudPacked::Field::FLOAT64);
1237 const ignition::msgs::PointCloudPacked & ign_msg,
1238 sensor_msgs::PointCloud2 & ros_msg)
1242 ros_msg.height = ign_msg.height();
1243 ros_msg.width = ign_msg.width();
1244 ros_msg.is_bigendian = ign_msg.is_bigendian();
1245 ros_msg.point_step = ign_msg.point_step();
1246 ros_msg.row_step = ign_msg.row_step();
1247 ros_msg.is_dense = ign_msg.is_dense();
1248 ros_msg.data.resize(ign_msg.data().size());
1249 memcpy(ros_msg.data.data(), ign_msg.data().c_str(), ign_msg.data().size());
1251 for (
int i = 0; i < ign_msg.field_size(); ++i)
1253 sensor_msgs::PointField pf;
1254 pf.name = ign_msg.field(i).name();
1255 pf.count = ign_msg.field(i).count();
1256 pf.offset = ign_msg.field(i).offset();
1257 switch (ign_msg.field(i).datatype())
1260 case ignition::msgs::PointCloudPacked::Field::INT8:
1261 pf.datatype = sensor_msgs::PointField::INT8;
1263 case ignition::msgs::PointCloudPacked::Field::UINT8:
1264 pf.datatype = sensor_msgs::PointField::UINT8;
1266 case ignition::msgs::PointCloudPacked::Field::INT16:
1267 pf.datatype = sensor_msgs::PointField::INT16;
1269 case ignition::msgs::PointCloudPacked::Field::UINT16:
1270 pf.datatype = sensor_msgs::PointField::UINT16;
1272 case ignition::msgs::PointCloudPacked::Field::INT32:
1273 pf.datatype = sensor_msgs::PointField::INT32;
1275 case ignition::msgs::PointCloudPacked::Field::UINT32:
1276 pf.datatype = sensor_msgs::PointField::UINT32;
1278 case ignition::msgs::PointCloudPacked::Field::FLOAT32:
1279 pf.datatype = sensor_msgs::PointField::FLOAT32;
1281 case ignition::msgs::PointCloudPacked::Field::FLOAT64:
1282 pf.datatype = sensor_msgs::PointField::FLOAT64;
1285 ros_msg.fields.push_back(pf);
1292 const sensor_msgs::BatteryState & ros_msg,
1293 ignition::msgs::BatteryState & ign_msg)
1297 ign_msg.set_voltage(ros_msg.voltage);
1298 ign_msg.set_current(ros_msg.current);
1299 ign_msg.set_charge(ros_msg.charge);
1300 ign_msg.set_capacity(ros_msg.capacity);
1301 ign_msg.set_percentage(ros_msg.percentage);
1303 if (ros_msg.power_supply_status == sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_UNKNOWN)
1305 ign_msg.set_power_supply_status(ignition::msgs::BatteryState::UNKNOWN);
1307 else if (ros_msg.power_supply_status == sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_CHARGING)
1309 ign_msg.set_power_supply_status(ignition::msgs::BatteryState::CHARGING);
1311 else if (ros_msg.power_supply_status ==
1312 sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_DISCHARGING)
1314 ign_msg.set_power_supply_status(ignition::msgs::BatteryState::DISCHARGING);
1316 else if (ros_msg.power_supply_status ==
1317 sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_NOT_CHARGING)
1319 ign_msg.set_power_supply_status(ignition::msgs::BatteryState::NOT_CHARGING);
1321 else if (ros_msg.power_supply_status == sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_FULL)
1323 ign_msg.set_power_supply_status(ignition::msgs::BatteryState::FULL);
1328 << ros_msg.power_supply_status <<
"]" << std::endl);
1335 const ignition::msgs::BatteryState & ign_msg,
1336 sensor_msgs::BatteryState & ros_msg)
1340 ros_msg.voltage = ign_msg.voltage();
1341 ros_msg.current = ign_msg.current();
1342 ros_msg.charge = ign_msg.charge();
1343 ros_msg.capacity = ign_msg.capacity();
1344 ros_msg.design_capacity = std::numeric_limits<double>::quiet_NaN();
1345 ros_msg.percentage = ign_msg.percentage();
1347 if (ign_msg.power_supply_status() ==
1348 ignition::msgs::BatteryState::UNKNOWN)
1350 ros_msg.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_UNKNOWN;
1352 else if (ign_msg.power_supply_status() ==
1353 ignition::msgs::BatteryState::CHARGING)
1355 ros_msg.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_CHARGING;
1357 else if (ign_msg.power_supply_status() ==
1358 ignition::msgs::BatteryState::DISCHARGING)
1360 ros_msg.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_DISCHARGING;
1362 else if (ign_msg.power_supply_status() ==
1363 ignition::msgs::BatteryState::NOT_CHARGING)
1365 ros_msg.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_NOT_CHARGING;
1367 else if (ign_msg.power_supply_status() ==
1368 ignition::msgs::BatteryState::FULL)
1370 ros_msg.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_FULL;
1375 << ign_msg.power_supply_status() <<
"]" << std::endl);
1378 ros_msg.power_supply_health = sensor_msgs::BatteryState::POWER_SUPPLY_HEALTH_UNKNOWN;
1379 ros_msg.power_supply_technology = sensor_msgs::BatteryState::POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
1380 ros_msg.present =
true;
1386 const visualization_msgs::Marker & ros_msg,
1387 ignition::msgs::Marker & ign_msg)
1393 switch(ros_msg.action)
1395 case visualization_msgs::Marker::ADD:
1396 ign_msg.set_action(ignition::msgs::Marker::ADD_MODIFY);
1398 case visualization_msgs::Marker::DELETE:
1399 ign_msg.set_action(ignition::msgs::Marker::DELETE_MARKER);
1401 case visualization_msgs::Marker::DELETEALL:
1402 ign_msg.set_action(ignition::msgs::Marker::DELETE_ALL);
1406 ros_msg.action <<
"]\n");
1410 ign_msg.set_ns(ros_msg.ns);
1411 ign_msg.set_id(ros_msg.id);
1415 switch(ros_msg.type)
1417 #ifndef IGNITION_CITADEL
1418 case visualization_msgs::Marker::ARROW:
1419 ign_msg.set_type(ignition::msgs::Marker::ARROW);
1422 case visualization_msgs::Marker::CUBE:
1423 ign_msg.set_type(ignition::msgs::Marker::BOX);
1425 case visualization_msgs::Marker::SPHERE:
1426 ign_msg.set_type(ignition::msgs::Marker::SPHERE);
1428 case visualization_msgs::Marker::CYLINDER:
1429 ign_msg.set_type(ignition::msgs::Marker::CYLINDER);
1431 case visualization_msgs::Marker::LINE_STRIP:
1432 ign_msg.set_type(ignition::msgs::Marker::LINE_STRIP);
1434 case visualization_msgs::Marker::LINE_LIST:
1435 ign_msg.set_type(ignition::msgs::Marker::LINE_LIST);
1437 case visualization_msgs::Marker::CUBE_LIST:
1441 case visualization_msgs::Marker::SPHERE_LIST:
1445 case visualization_msgs::Marker::POINTS:
1446 ign_msg.set_type(ignition::msgs::Marker::POINTS);
1448 case visualization_msgs::Marker::TEXT_VIEW_FACING:
1449 ign_msg.set_type(ignition::msgs::Marker::TEXT);
1451 case visualization_msgs::Marker::MESH_RESOURCE:
1453 "[MESH_RESOURCE]\n");
1455 case visualization_msgs::Marker::TRIANGLE_LIST:
1456 ign_msg.set_type(ignition::msgs::Marker::TRIANGLE_LIST);
1460 ros_msg.type <<
"]\n");
1465 ign_msg.mutable_lifetime()->set_sec(ros_msg.lifetime.sec);
1466 ign_msg.mutable_lifetime()->set_nsec(ros_msg.lifetime.nsec);
1480 ign_msg.clear_point();
1481 for (
auto const &pt : ros_msg.points)
1483 auto p = ign_msg.add_point();
1487 ign_msg.set_text(ros_msg.text);
1496 const ignition::msgs::Marker & ign_msg,
1497 visualization_msgs::Marker & ros_msg)
1501 switch(ign_msg.action())
1503 case ignition::msgs::Marker::ADD_MODIFY:
1504 ros_msg.action = visualization_msgs::Marker::ADD;
1506 case ignition::msgs::Marker::DELETE_MARKER:
1507 ros_msg.action = visualization_msgs::Marker::DELETE;
1509 case ignition::msgs::Marker::DELETE_ALL:
1510 ros_msg.action = visualization_msgs::Marker::DELETEALL;
1514 ign_msg.action() <<
"]\n");
1518 ros_msg.ns = ign_msg.ns();
1519 ros_msg.id = ign_msg.id();
1521 switch(ign_msg.type())
1523 #ifndef IGNITION_CITADEL
1524 case ignition::msgs::Marker::ARROW:
1525 ros_msg.type = visualization_msgs::Marker::TRIANGLE_LIST;
1527 case ignition::msgs::Marker::AXIS:
1531 case ignition::msgs::Marker::CONE:
1536 case ignition::msgs::Marker::NONE:
1540 case ignition::msgs::Marker::BOX:
1541 ros_msg.type = visualization_msgs::Marker::CUBE;
1543 case ignition::msgs::Marker::CYLINDER:
1544 ros_msg.type = visualization_msgs::Marker::CYLINDER;
1546 case ignition::msgs::Marker::LINE_LIST:
1547 ros_msg.type = visualization_msgs::Marker::LINE_LIST;
1549 case ignition::msgs::Marker::LINE_STRIP:
1550 ros_msg.type = visualization_msgs::Marker::LINE_STRIP;
1552 case ignition::msgs::Marker::POINTS:
1553 ros_msg.type = visualization_msgs::Marker::POINTS;
1555 case ignition::msgs::Marker::SPHERE:
1556 ros_msg.type = visualization_msgs::Marker::SPHERE;
1558 case ignition::msgs::Marker::TEXT:
1559 ros_msg.type = visualization_msgs::Marker::TEXT_VIEW_FACING;
1561 case ignition::msgs::Marker::TRIANGLE_FAN:
1563 "[TRIANGLE_FAN]\n");
1565 case ignition::msgs::Marker::TRIANGLE_LIST:
1566 ros_msg.type = visualization_msgs::Marker::TRIANGLE_LIST;
1568 case ignition::msgs::Marker::TRIANGLE_STRIP:
1570 "[TRIANGLE_STRIP]\n");
1574 "[" << ign_msg.type() <<
"]\n");
1579 ros_msg.lifetime.sec = ign_msg.lifetime().sec();
1580 ros_msg.lifetime.nsec = ign_msg.lifetime().nsec();
1590 ros_msg.colors.clear();
1593 ros_msg.points.clear();
1594 ros_msg.points.reserve(ign_msg.point_size());
1595 for (
auto const & pt: ign_msg.point())
1597 geometry_msgs::Point p;
1599 ros_msg.points.push_back(p);
1602 ros_msg.text = ign_msg.text();
1608 const visualization_msgs::MarkerArray & ros_msg,
1609 ignition::msgs::Marker_V & ign_msg)
1611 ign_msg.clear_header();
1612 ign_msg.clear_marker();
1613 for (
const auto &marker : ros_msg.markers)
1615 auto m = ign_msg.add_marker();
1623 const ignition::msgs::Marker_V & ign_msg,
1624 visualization_msgs::MarkerArray & ros_msg)
1626 ros_msg.markers.clear();
1627 ros_msg.markers.reserve(ign_msg.marker_size());
1629 for (
auto const &marker : ign_msg.marker())
1631 visualization_msgs::Marker m;
1633 ros_msg.markers.push_back(m);