{"id":1410,"date":"2019-01-11T15:43:24","date_gmt":"2019-01-11T06:43:24","guid":{"rendered":"https:\/\/www.kdel.org\/wp\/?p=1410"},"modified":"2021-01-02T17:06:39","modified_gmt":"2021-01-02T08:06:39","slug":"fawkes-amcl","status":"publish","type":"post","link":"https:\/\/www.kdel.org\/wp\/?p=1410","title":{"rendered":"fawkes &#8211; amcl"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">fawkes-robotino\/fawkes\/src\/plugin\/amcl \u306b\u3064\u3044\u3066\u306e\u307e\u3068\u3081\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>static double normalize(double z);<ul>\u89d2\u5ea6z[rad]\u3092\u4e0e\u3048\u308b\u3068\u3001[-pi, +pi]\u306e\u7bc4\u56f2\u306b\u76f4\u3057\u305f\u5024\u3092\u623b\u3059\u3002<\/ul><\/li><li>static double angle_diff(double a, double b);<ul>\u89d2\u5ea6a[rad]\u3068b[rad]\u306e\u5dee\u3092\u8fd4\u3057\u307e\u3059\u3002\u5185\u89d2\u5074\u3092\u8fd4\u3057\u307e\u3059\u3002<\/ul><\/li><li>void AmclThread::init();<ul>\u521d\u671f\u5316\u3057\u307e\u3059\u3002read_map_config \u3067\u3001map\u60c5\u5831\u3092\u8aad\u307f\u8fbc\u307f\u3001yaml \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u3001\u8a2d\u5b9a\u3092\u3088\u307f\u3053\u307f\u307e\u3059\u3002<\/ul><\/li><li>bool set_laser_pose();<\/li><li>bool get_odom_pose(fawkes::tf::Stamped<fawkes::tf::pose>&amp; odom_pose,\n                     double&amp; x, double&amp; y, double&amp; yaw,\n                     const fawkes::Time* t, const std::string&amp; f);<\/fawkes::tf::pose><\/li><li>void apply_initial_pose();<\/li><li>static pf_vector_t uniform_pose_generator(void* arg);<\/li><li>void set_initial_pose(const std::string &amp;frame_id, const fawkes::Time &amp;msg_time,\n                        const fawkes::tf::Pose &amp;pose, const double *covariance);<\/li><li>virtual bool bb_interface_message_received(fawkes::Interface *interface,\n                                             fawkes::Message *message) throw();<\/li><li>fawkes::Mutex *conf_mutex_;<ul>\u30b9\u30ec\u30c3\u30c9\u4f5c\u6210\u6642\u306b\u3001Mutex()\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002<\/ul><\/li><li>map_t* map_;<ul>\u30b9\u30ec\u30c3\u30c9\u4f5c\u6210\u6642\u306b\u3001NULL\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002<\/ul><\/li><li>std::string  cfg_map_file_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_resolution_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_origin_x_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_origin_y_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_origin_theta_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_occupied_thresh_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>float        cfg_free_thresh_;<ul>read_map_config \u306b\u3066\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/ul><\/li><li>bool         cfg_read_init_cov_;<\/li><li>bool         cfg_buffer_enable_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ebuffering\/enable\u306e\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>bool         cfg_buffer_debug_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ebuffering\/debug\u306e\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>std::string cfg_laser_ifname_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306elaser_interface_id\u306e\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>std::string cfg_pose_ifname_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306epose_interface_id\u306e\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>unsigned int map_width_;<ul>read_map\u3067\u8aad\u307f\u8fbc\u3093\u3060\u5730\u56f3\u60c5\u5831\u306ex\u30b5\u30a4\u30ba\u306e\u5024\u3067\u3059\u3002<\/ul><\/li><li>unsigned int map_height_;<ul>read_map\u3067\u8aad\u307f\u8fbc\u3093\u3060\u5730\u56f3\u60c5\u5831\u306ey\u30b5\u30a4\u30ba\u306e\u5024\u3067\u3059\u3002<\/ul><\/li><li>bool laser_pose_set_;<ul>loop \u3067\u3001\u521d\u671f\u5ea7\u6a19\u3092\u30bb\u30c3\u30c8\u3059\u308b\u305f\u3081\u306e\u30d5\u30e9\u30b0\u3067\u3059\u3002\uff11\u5ea6\u3060\u3051\u5b9f\u884c\u3057\u307e\u3059\u3002<\/ul><\/li><li>fawkes::Time save_pose_last_time;<ul>set_clock(clock)\u3067\u3001\u6642\u523b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002<\/ul><ul>stamp()\u3067\u3001\u4f55\u304b\u3092\u3057\u307e\u3059\u3002<\/ul><\/li><li>bool sent_first_transform_;<ul>\u521d\u671f\u5024\u306f\u3001false \u3067\u3059\u3002<\/ul><\/li><li>bool latest_tf_valid_;<ul>\u521d\u671f\u5024\u306f\u3001false \u3067\u3059\u3002<\/ul><\/li><li>int resample_count_;<ul>\u521d\u671f\u5024\u306f\u30010 \u3067\u3059\u3002<\/ul><\/li><li>amcl::AMCLOdom* odom_;<ul>\u521d\u671f\u5024\u306f\u3001NULL \u3067\u3059\u3002<\/ul><\/li><li>amcl::AMCLLaser* laser_;<ul>\u521d\u671f\u5024\u306f\u3001NULL \u3067\u3059\u3002<\/ul><\/li><li>amcl_hyp_t* initial_pose_hyp_;<ul>\u521d\u671f\u5024\u306f\u3001NULL \u3067\u3059\u3002<\/ul><\/li><li>bool first_map_received_;<ul>\u521d\u671f\u5024\u306f\u3001false \u3067\u3059\u3002<\/ul><\/li><li>bool first_reconfigure_call_;<ul>\u521d\u671f\u5024\u306f\u3001false \u3067\u3059\u3002<\/ul><\/li><li>float init_pose_[3];<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306einit_pose_x\u3001init_pose_y\u3001init_pose_a\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u8a2d\u5b9a\u304c\u306a\u3044\u5834\u5408\u306f\u3001default\u5024 0.0 \u3067\u3059\u3002\u7c92\u5b50\u306e\u521d\u671f\u4f4d\u7f6e\u3063\u307d\u3044\u3067\u3059\u3002<\/ul><\/li><li>float init_cov_[3];<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eread_init_cov\u304ctrue \u3060\u3068\u3001init_cov_xx\u3001init_cov_yy\u3001init_cov_aa\u3001\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u8a2d\u5b9a\u304c\u306a\u3044\u5834\u5408\u306f\u3001default\u5024 0.5*0.5, 0.5*0.5, (M_PI \/ 12.0) * (M_PI \/ 12.0) \u3067\u3059(PI\/12 = 15\u5ea6)\u3002\u7c92\u5b50\u306e\u5206\u6563\u306e\u5024\u3063\u307d\u3044\u3067\u3059\u3002<\/ul><\/li><li>double save_pose_period_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306esave_pose_period \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>double laser_min_range_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306elaser_min_range \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>double laser_max_range_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306elaser_max_range \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>double pf_err_, pf_z_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ekld_err\u3068kld_z \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float alpha1_, alpha2_, alpha3_, alpha4_, alpha5_ ;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ealpha1 \u304b\u30895 \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u30aa\u30c9\u30e1\u30c8\u30ea\u306e\u30e2\u30c7\u30eb\u306e\u5909\u6570\u306e\u3088\u3046\u3067\u3059\u3002OMNI\u306e\u6642\u306f1\u304b\u30895\u3092\u4f7f\u3044\u3001DIFF\u306e\u6642\u306f1\u304b\u30894\u3092\u4f7f\u3044\u307e\u3059\u3002<\/ul><\/li><li>float z_hit_, z_short_, z_max_, z_rand_, sigma_hit_, lambda_short_, laser_likelihood_max_dist_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ez_hit\u3001z_short\u3001z_max\u3001z_rand\u3001sigma_hit\u3001lambda_short_\u3001laser_likelihood_max_dist \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u30ec\u30fc\u30b6\u30fc\u306e\u8a08\u7b97\u6642\u306b\u3001BEAM\u30bf\u30a4\u30d7\u306e\u6642\u3068\u3001LikelihoodField\u30bf\u30a4\u30d7\u306e\u6642\u3067\u3001\u4f7f\u3046\u5909\u6570\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/ul><\/li><li>float d_thresh_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ed_thresh \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float a_thresh_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ea_thresh \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float t_thresh_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306et_thresh \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float alpha_slow_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ealpha_slow \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float alpha_fast_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306ealpha_fast \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>float angle_increment_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eangle_increment \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>unsigned int angle_min_idx_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eangle_min_idx [\u5ea6]\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\uff08\u6700\u5927\u5024359\uff09\u3002\u9805\u76ee\u304c\u306a\u3044\u5834\u5408\u306f0\u306b\u3057\u307e\u3059\u3002<\/ul><\/li><li>unsigned int angle_max_idx_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eangle_max_idx [\u5ea6]\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\uff08\u6700\u5927\u5024359\uff09\u3002\u9805\u76ee\u304c\u306a\u3044\u5834\u5408\u306f359\u306b\u3057\u307e\u3059\u3002<\/ul><\/li><li>unsigned int angle_range_;<ul>angle_max_idx\u3068angle_min_idx \u306e\u5dee[\u5ea6]\u3067\u3059\uff08\u5185\u89d2\u306e\u5927\u304d\u3055\uff09\u3002<\/ul><\/li><li>float angle_min_;<ul>angle_min_idx\u3000\u3092radian \u306b\u5909\u63db\u3057\u305f\u5024\u3067\u3059\u3002<\/ul><\/li><li>int max_beams_, min_particles_, max_particles_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306emax_beams\u3001min_particles\u3001max_particles \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><ul>min_particles_ &gt; max_particles_ \u3060\u3068\u3001\u8b66\u544a\u304c\u51fa\u3066\u3001max_particles = min_particles \u306b\u3057\u307e\u3059\u3002<\/ul><\/li><li>unsigned int resample_interval_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eresample_interval \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>std::string odom_frame_id_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306e\/frames\/odom \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\uff08amcl\u3068\u306f\u9805\u76ee\u540d\u304c\u7570\u306a\u308b\u306e\u3067\u8981\u6ce8\u610f\uff09\u3002<\/ul><ul>\u540c\u69d8\u306bbase_frame_id_\u3068global_frame_id_\u306byaml\u30d5\u30a1\u30a4\u30eb\u306e\/frames\/base \u3068\/frames\/fixed \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\uff08amcl\u3068\u306f\u9805\u76ee\u540d\u304c\u7570\u306a\u308b\u306e\u3067\u8981\u6ce8\u610f\uff09\u3002<\/ul><\/li><li>amcl::laser_model_t laser_model_type_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306elaser_model_type\u304c&#8221;beam&#8221;\u306e\u5834\u5408\u3001::amcl::LASER_MODEL_BEAM;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002&#8221;likelihood_field&#8221;\u306e\u5834\u5408\u3001::amcl::LASER_MODEL_LIKELIHOOD_FIELD;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u6642\u306f\uff0c\u7a2e\u5225\u4e0d\u660e\u306e\u305f\u3081\u3001::amcl::LASER_MODEL_LIKELIHOOD_FIELD;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002<\/ul><\/li><li>amcl::odom_model_t  odom_model_type_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306eodom_model_type\u304c&#8221;diff&#8221;\u306e\u5834\u5408\u3001 ::amcl::ODOM_MODEL_DIFF;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002&#8221;omni&#8221;\u306e\u5834\u5408\u3001::amcl::ODOM_MODEL_OMNI;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002\u305d\u308c\u4ee5\u5916\u306e\u6642\u306f\uff0c\u7a2e\u5225\u4e0d\u660e\u306e\u305f\u3081\u3001::amcl::ODOM_MODEL_DIFF;\u3092\u4ee3\u5165\u3057\u307e\u3059\u3002<\/ul><\/li><li>double transform_tolerance_;<ul>yaml\u30d5\u30a1\u30a4\u30eb\u306etransform_tolerance\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/ul><\/li><li>pf_t *pf_;<ul> pf_alloc(min_particles_, max_particles_, alpha_slow_, alpha_fast_,\n                 (pf_init_model_fn_t) AmclThread::uniform_pose_generator,\n                 (void *) map_); \u3068\u3001pf_init_model(pf_, (pf_init_model_fn_t)AmclThread::uniform_pose_generator,\n                (void *)map_); \u3067\u3001\u7c92\u5b50\u306e\u521d\u671f\u5316\u3092\u3057\u307e\u3059\u3002<\/ul><\/li><li>fawkes::Laser360Interface     *laser_if_;<ul>blackboard \u306eLaser360Interface \u3092\u8aad\u3080\u305f\u3081\u3067\u3059\u3002<\/ul><\/li><li>fawkes::Position3DInterface   *pos3d_if_;<ul>blackboard \u306ePosition3DInterface \u3092\u66f8\u304f\u305f\u3081\u3067\u3059\u3002<\/ul><\/li><li>fawkes::LocalizationInterface *loc_if_;<ul>blackboard \u306eLocalizationInterface \u3092\u66f8\u304f\u305f\u3081\u3067\u3059\u3002<\/ul><\/li><li>fawkes::tf::Transform latest_tf_;<\/li><li>amcl::odom_model_t  odom_model_type_;<\/li><li>bool pf_init_;<\/li><li>pf_vector_t pf_odom_pose_;<\/li><li>bool laser_update_;<\/li><li>bool laser_buffered_;<\/li><li>fawkes::Time last_cloud_pub_time;<\/li><li>fawkes::Time last_laser_received_ts_;<\/li><li>double last_covariance_[36];<\/li><li>fawkes::Time *last_move_time_;<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">void AmclThread::loop()<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>if (!laser_pose_set_) {<ul>\u521d\u671f\u5316\u3002\u521d\u671f\u4f4d\u7f6e\u60c5\u5831\u3092\u7c92\u5b50\u306b\u9069\u7528\u3002\uff11\u5ea6\u3057\u304b\u5b9f\u884c\u3057\u307e\u305b\u3093\u3002<\/ul><\/li><li>if (laser_if_-&gt;changed()) {<ul>\u30ec\u30fc\u30b6\u30fc\u306e\u5024\u304c\u66f4\u65b0\u3055\u308c\u3066\u3044\u305f\u3089\u3001\u30aa\u30c9\u30e1\u30c8\u30ea\u306e\u5024\u3092\u78ba\u8a8d\u3057\u3066\u3001\u524d\u56de\u304b\u3089\u306e\u79fb\u52d5\u60c5\u5831\u3092\u624b\u306b\u5165\u308c\u307e\u3059\u3002<\/ul><\/li><li>for (int hyp_count = 0; hyp_count &lt; pf_-&gt;sets[pf_ &#8211; current_set].cluster_count; hyp_count++) {<ul>\u7c92\u5b50\u306e\u66f4\u65b0\u3092\u3057\u3001\u91cd\u307f\u3092\u8a08\u7b97\u3057\u3001\u4e00\u756a\u91cd\u307f\u304c\u5927\u304d\u3044\u7c92\u5b50\u3092\u63a2\u3059\u3002<\/ul><\/li><li>if (!pf_get_cluster_stats(pf_, hyp_count, &amp;weight, &amp;pose_mean, &amp;pose_cov))<ul>hyp_count\u756a\u76ee\u306e\u7c92\u5b50\u306e\u91cd\u307f\u3068\u5206\u6563\u306e\u8a08\u7b97\u3002<\/ul><\/li><li>if (max_weight &gt; 0.0) {<ul>\u4e00\u756a\u91cd\u307f\u306e\u5927\u304d\u3044\u7c92\u5b50\u304c\u3001\u73fe\u5728\u306e\u81ea\u5df1\u4f4d\u7f6e\u306b\u8fd1\u3044\u306e\u3067\u3001\u305d\u306e\u60c5\u5831\u3092\u7528\u3044\u3066\u81ea\u5df1\u4f4d\u7f6e\u3092\u8a08\u7b97\u3002<\/ul><ul>\u305d\u306e\u7d50\u679c\u3092\u3001yaml\u306e\u5909\u6570\u306b\u3082\u66f8\u304d\u8fbc\u3080\u3002<\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>fawkes-robotino\/fawkes\/src\/plugin\/amcl \u306b &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.kdel.org\/wp\/?p=1410\"> <span class=\"screen-reader-text\">fawkes &#8211; amcl<\/span> \u7d9a\u304d\u3092\u8aad\u3080 &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[10,3,2],"tags":[],"class_list":["post-1410","post","type-post","status-publish","format-standard","hentry","category-fawkes","category-logistics-league","category-robocup"],"_links":{"self":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1410"}],"version-history":[{"count":34,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1410\/revisions"}],"predecessor-version":[{"id":2562,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1410\/revisions\/2562"}],"wp:attachment":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}