34 int main(
int argc,
char **argv) {
35 ros::init(argc, argv,
"arPoseEstimation");
89 std::string configPath;
92 if (!pn.
getParam(
"marker_map_config", configPath)) {
93 ROS_ERROR(
"Parameter marker_map_config (Path to config file) is not provided. This node can not be started without a valid MarkerMap config.");
100 ROS_ERROR(
"The provided MarkerMap config file (%s) is not existing, is invalid or contains not a single markerMap. This node can not be started without a valid MarkerMap config.", configPath.c_str());
127 float camera_matrix_data[9];
128 for(
int i = 0; i < 9; i++)
129 camera_matrix_data[i] = msg->camera_k[i];
130 cv::Mat camera_k = cv::Mat(3, 3, CV_32F, camera_matrix_data);
132 float distortion_coefficients_data[5];
133 for(
int i = 0; i < 5; i++)
134 distortion_coefficients_data[i] = msg->camera_d[i];
135 cv::Mat camera_d = cv::Mat(1, 5, CV_32F, distortion_coefficients_data);
138 std::vector<MarkerFiducials> markerFiducials;
139 for (
auto &fiducial:msg->fiducial) {
142 for (
auto &object_point:fiducial.object_points)
143 marker.
object_points.push_back(cv::Point3f(object_point.x, object_point.y, object_point.z));
145 for (
auto &image_point:fiducial.image_points)
146 marker.
image_points.push_back(cv::Point2f(image_point.x, image_point.y));
148 markerFiducials.push_back(marker);
152 std::vector<MarkerPose> markerPoses;
169 m.at<
float>(0, 0), m.at<
float>(0, 1), m.at<
float>(0, 2),
170 m.at<
float>(1, 0), m.at<
float>(1, 1), m.at<
float>(1, 2),
171 m.at<
float>(2, 0), m.at<
float>(2, 1), m.at<
float>(2, 2)
174 char markerLabel[64];
175 if (markerPose.
ids.size() > 0) {
176 sprintf(markerLabel,
"t%i", markerPose.
ids[0]);
178 sprintf(markerLabel,
"t?");
184 marker_msgs::MarkerDetection msg;
187 msg.distance_min = 0;
188 msg.distance_max = 8;
189 msg.distance_max_id = 5;
190 msg.view_direction.x = 0;
191 msg.view_direction.y = 0;
192 msg.view_direction.z = 0;
193 msg.view_direction.w = 1;
194 msg.fov_horizontal = 6;
195 msg.fov_vertical = 0;
197 msg.markers = marker_msgs::MarkerDetection::_markers_type();
199 for (
auto &markerPose:markerPoses) {
207 marker_msgs::Marker marker;
209 marker.ids = markerPose.ids;
210 marker.ids_confidence = markerPose.ids_confidence;
213 msg.markers.push_back(marker);
ros::Subscriber fiducialDetectionSubscriber_
dynamic_reconfigure::Server< tuw_marker_pose_estimation::MarkerPoseEstimationConfig >::CallbackType configCallbackFnct_
void publish(const boost::shared_ptr< M > &message) const
std::vector< MarkerMapDetails > markerMaps
void fiducialDetectionCallback(const marker_msgs::FiducialDetection::ConstPtr &msg)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
PoseEstimationMarkerMapNode(ros::NodeHandle &n, MarkerMapConfig markerMapConfig)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void publishMarkers(const std_msgs::Header &header, std::vector< MarkerPose > &markerPoses)
void estimatePose(std::vector< MarkerFiducials > &markers, cv::Mat &camera_k, cv::Mat &camera_d, std::vector< MarkerPose > &markerPoses)
ROSCPP_DECL void spin(Spinner &spinner)
int main(int argc, char **argv)
void setPoseEstimatorType(int type)
static MarkerMapConfig readFromFile(std::string path)
ros::Publisher pub_markers_
PoseEstimationMarkerMapBase base_
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void setPublishTf(bool b)
~PoseEstimationMarkerMapNode()
PoseEstimationMarkerMapParameters & getParameters()
std::vector< cv::Point3f > object_points
static void poseTFToMsg(const Pose &bt, geometry_msgs::Pose &msg)
void setPublishMarkers(bool b)
bool getParam(const std::string &key, std::string &s) const
std::vector< cv::Point2f > image_points
static tf::StampedTransform markerPoseToStampedTransform(MarkerPose &markerPose, const std_msgs::Header &header)
tf::TransformBroadcaster transformBroadcaster_
dynamic_reconfigure::Server< tuw_marker_pose_estimation::MarkerPoseEstimationConfig > configServer_
void configCallback(tuw_marker_pose_estimation::MarkerPoseEstimationConfig &config, uint32_t level)