Я использовал ros
и пытался ввести определения подписчиков и серверов в действие снаружи.Тогда обратный вызов не запустился.Функция spin()
не работает.Но я часто вижу, как другие помещают определения серверов в класс, и обратный вызов будет работать.Так в чем же разница между двумя сценами?
Это будет работать
int main(int argc, char **argv)
{
ros::init(argc, argv, "cood_tran");
ros::NodeHandle nh;
std::cout << "coodTran" << std::endl;
target_obj = "None";
ros::param::get("target", target_obj);
ros::Subscriber ros_coord_pixel_sub =
nh.subscribe("/darknet_ros/bounding_boxes", 1, darknetCallback);
ros::Subscriber point_cloud_sub =
nh.subscribe("camera/depth_registered/points", 1, pointCouldCallback);///camera/depth_registered/points /camera/depth_registered/points<->color_optical
ros::ServiceServer location_server =
nh.advertiseService("location_srv", location);
ros::spin();
return 0;
}
Это не будет работать
int main(int argc, char **argv)
{
ros::init(argc, argv, "cood_tran");
ros::NodeHandle nh;
coodTran(nh);
ros::spin();
return 0;
}
void coodTran(ros::NodeHandle nh)
{
std::cout << "coodTran" << std::endl;
target_obj = "None";
ros::param::get("target", target_obj);
ros::Subscriber ros_coord_pixel_sub =
nh.subscribe("/darknet_ros/bounding_boxes", 1, darknetCallback);
ros::Subscriber point_cloud_sub =
nh.subscribe("camera/depth_registered/points", 1, pointCouldCallback);///camera/depth_registered/points /camera/depth_registered/points<->color_optical
ros::ServiceServer location_server =
nh.advertiseService("location_srv", location);
}
Это будет работать:
#include <darknet_ros/YoloObjectDetector.hpp>
#include <ros/ros.h>
int main(int argc, char** argv) {
ros::init(argc, argv, "darknet_ros");
ros::NodeHandle nodeHandle("~");
darknet_ros::YoloObjectDetector yoloObjectDetector(nodeHandle);
ros::spin();
return 0;
}