34 int main(
int argc,
char **argv) {
35 ros::init(argc, argv,
"arPoseEstimation");
59 float camera_matrix_data[9];
60 for(
int i = 0; i < 9; i++)
61 camera_matrix_data[i] = msg->camera_k[i];
62 cv::Mat camera_k = cv::Mat(3, 3, CV_32F, camera_matrix_data);
64 float distortion_coefficients_data[5];
65 for(
int i = 0; i < 5; i++)
66 distortion_coefficients_data[i] = msg->camera_d[i];
67 cv::Mat camera_d = cv::Mat(1, 5, CV_32F, distortion_coefficients_data);
70 std::vector<MarkerFiducials> markers;
71 for (
auto &fiducial:msg->fiducial) {
74 for (
auto &object_point:fiducial.object_points)
75 marker.
object_points.push_back(cv::Point3f(object_point.x, object_point.y, object_point.z));
77 for (
auto &image_point:fiducial.image_points)
78 marker.
image_points.push_back(cv::Point2f(image_point.x, image_point.y));
80 markers.push_back(marker);
84 std::vector<MarkerPose> markerPoses;
101 m.at<
float>(0, 0), m.at<
float>(0, 1), m.at<
float>(0, 2),
102 m.at<
float>(1, 0), m.at<
float>(1, 1), m.at<
float>(1, 2),
103 m.at<
float>(2, 0), m.at<
float>(2, 1), m.at<
float>(2, 2)
106 char markerLabel[64];
107 if (markerPose.
ids.size() > 0) {
108 sprintf(markerLabel,
"t%i", markerPose.
ids[0]);
110 sprintf(markerLabel,
"t?");
116 marker_msgs::MarkerDetection msg;
119 msg.distance_min = 0;
120 msg.distance_max = 8;
121 msg.distance_max_id = 5;
122 msg.view_direction.x = 0;
123 msg.view_direction.y = 0;
124 msg.view_direction.z = 0;
125 msg.view_direction.w = 1;
126 msg.fov_horizontal = 6;
127 msg.fov_vertical = 0;
129 msg.markers = marker_msgs::MarkerDetection::_markers_type();
131 for (
auto &markerPose:markerPoses) {
139 marker_msgs::Marker marker;
141 marker.ids = markerPose.ids;
142 marker.ids_confidence = markerPose.ids_confidence;
145 msg.markers.push_back(marker);
ros::Publisher pub_markers_
int main(int argc, char **argv)
void publish(const boost::shared_ptr< M > &message) const
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void fiducialDetectionCallback(const marker_msgs::FiducialDetection::ConstPtr &msg)
PoseEstimationParameters & getParameters()
ROSCPP_DECL void spin(Spinner &spinner)
void publishMarkers(const std_msgs::Header &header, std::vector< MarkerPose > &markerPoses)
static tf::StampedTransform markerPoseToStampedTransform(MarkerPose &markerPose, const std_msgs::Header &header)
dynamic_reconfigure::Server< tuw_marker_pose_estimation::MarkerPoseEstimationConfig > configServer_
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void setPublishTf(bool b)
dynamic_reconfigure::Server< tuw_marker_pose_estimation::MarkerPoseEstimationConfig >::CallbackType configCallbackFnct_
void estimatePose(std::vector< MarkerFiducials > &markers, cv::Mat &camera_k, cv::Mat &camera_d, std::vector< MarkerPose > &markerPoses)
ros::Subscriber fiducialDetectionSubscriber_
std::vector< cv::Point3f > object_points
static void poseTFToMsg(const Pose &bt, geometry_msgs::Pose &msg)
PoseEstimationNode(ros::NodeHandle &n)
std::vector< cv::Point2f > image_points
tf::TransformBroadcaster transformBroadcaster_
void setPoseEstimatorType(int type)
void configCallback(tuw_marker_pose_estimation::MarkerPoseEstimationConfig &config, uint32_t level)
void setPublishMarkers(bool b)