редактировать после симуляции Возможно, что-то не так с моим деструктором.
Единственный шаг, который я использую "new" - это
«pcl :: PointCloud :: Ptr cloud_inbox (new pcl :: PointCloud);”Для создания данных pcl.
CoordinateTran.h выглядит следующим образом:
#ifndef COORDINATETRAN_H
#define COORDINATETRAN_H
#include...h file
namespace huskybot_arm
{
class CoordinateTran
{
public:
explicit CoordinateTran(ros::NodeHandle nh);
virtual ~CoordinateTran()=default;
protected:
...
};
class CoordinateTran3D :public CoordinateTran
{
public:
explicit CoordinateTran3D(ros::NodeHandle nh);
~CoordinateTran3D()=default;
private:
...
};
}
#endif
main.cpp выглядит так
#include "CoordinateTran.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "coord_tran");
ros::NodeHandle nh("~");
huskybot_arm::CoordinateTran3D coordTran3D(nh);
ros::spin();
return 0;
}
координатаTran.cpp выглядит следующим образом
#include "ros/ros.h"
#include "CoordinateTran.h"
namespace huskybot_arm
{
CoordinateTran::CoordinateTran(ros::NodeHandle nh)
:get_target(0)
{
...
...
...
}
...functions
}
координатаTran3D.cpp похожа на это
#include "ros/ros.h"
#include "CoordinateTran.h"
namespace huskybot_arm
{
CoordinateTran3D::CoordinateTran3D(ros::NodeHandle nh):CoordinateTran(nh),viewer("cloud in box"){
pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 100);
}
void CoordinateTran3D::pointCouldCallback( const sensor_msgs::PointCloud2::ConstPtr &point_cloud_msg)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_inbox (new pcl::PointCloud<pcl::PointXYZ>);
cloud_inbox->clear();
sensor_msgs::PointCloud2 cloud_inbox_msgs;
if (get_target == 1)
{
pcl::PointCloud<pcl::PointXYZ> point_pcl;
pcl::fromROSMsg(*point_cloud_msg, point_pcl);
//pcl::PointCloud<pcl::PointXYZ> cloud_inbox;
if (point_pcl.isOrganized ())
{
cloud_inbox->width =x_max-x_min+1;
cloud_inbox->height =y_max - y_min +1;
std::cout << "cloud_inbox.width "<<cloud_inbox->width << "cloud_inbox.height " << cloud_inbox->height <<std::endl;
cloud_inbox->points.resize (cloud_inbox->width * cloud_inbox->height);
std::cout << "new cloud" <<std::endl;
for (int i=0; i< cloud_inbox->width&&i+x_min<640; ++i)
{
for (int j=0; j< cloud_inbox->height&&j+y_min<480; ++j)
{
cloud_inbox->at(i,j).x =point_pcl.at(x_min+i,y_min+j).x;
cloud_inbox->at(i,j).y =point_pcl.at(x_min+i,y_min+j).y;
cloud_inbox->at(i,j).z =point_pcl.at(x_min+i,y_min+j).z;
}
}
pcl::PointXYZ pt = point_pcl.at(u,v);
camera_x = pt.x;
camera_y = pt.y;
camera_z = pt.z;
std::cout << " coordnate get: " << " camera_x " <<camera_x <<" camera_y " <<camera_y <<" camera_z " <<camera_z <<std::endl;
}
else
std::cout << " the pointcloud is not organized " << std::endl;
//std::cout << "\033[2J\033[1;1H"; // clear terminal
}
viewer.showCloud(cloud_inbox);
pcl::toROSMsg(*cloud_inbox, cloud_inbox_msgs);
cloud_inbox_msgs.header.frame_id = "camera_color_optical_frame";
pcl_pub.publish(cloud_inbox_msgs);
}
}
показывает
/ home / qiuyilin / catkin_ws / src / Huskybot_arm /ordin_tran / координировать_тран / src / координировать_tran_node.cpp: 16: неопределенная ссылка на huskybot_arm::CoordinateTran3D::CoordinateTran3D(ros::NodeHandle)'
CMakeFiles/coord_tran_node.dir/src/coord_tran_node.cpp.o: In function
huskybot_arm :: CoordinateTran3D :: ~ CoordinateTran3D () ': /home/qiuyilin/catkin_ws/src/Huskybot_arm/coord_tran/coord_tran/include/CoordinateTran.h:91 :91:vtable для huskybot_arm :: CoordinateTran3D '