keyFramesManager.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // Created by zx on 23-8-4.
  3. //
  4. #include "keyFramesManager.h"
  5. #include <pcl/common/transforms.h>
  6. keyFrame::keyFrame(PointCloudXYZI::Ptr cloud) {
  7. cloud_=cloud;
  8. cloud_world_.reset(new PointCloudXYZI());
  9. pose_changed_=true;
  10. }
  11. keyFrame::keyFrame(PointTypePose pose, PointCloudXYZI::Ptr cloud) {
  12. cloud_=cloud;
  13. cloud_world_.reset(new PointCloudXYZI());
  14. pose_changed_=true;
  15. }
  16. keyFrame::~keyFrame() {}
  17. void keyFrame::ResetPose(PointTypePose pose){
  18. pose_=pose;
  19. pose_changed_=true;
  20. }
  21. PointCloudXYZI::Ptr keyFrame::world_cloud(){
  22. if(pose_changed_==false){
  23. return cloud_world_;
  24. }
  25. int cloudSize = cloud_->size();
  26. cloud_world_->resize(cloudSize);
  27. Eigen::Affine3f transCur = pcl::getTransformation(pose_.x, pose_.y, pose_.z, pose_.roll, pose_.pitch, pose_.yaw);
  28. int numberOfCores=4;
  29. #pragma omp parallel for num_threads(numberOfCores)
  30. for (int i = 0; i < cloudSize; ++i)
  31. {
  32. const auto &pointFrom = cloud_->points[i];
  33. cloud_world_->points[i].x = transCur(0, 0) * pointFrom.x + transCur(0, 1) * pointFrom.y + transCur(0, 2) * pointFrom.z + transCur(0, 3);
  34. cloud_world_->points[i].y = transCur(1, 0) * pointFrom.x + transCur(1, 1) * pointFrom.y + transCur(1, 2) * pointFrom.z + transCur(1, 3);
  35. cloud_world_->points[i].z = transCur(2, 0) * pointFrom.x + transCur(2, 1) * pointFrom.y + transCur(2, 2) * pointFrom.z + transCur(2, 3);
  36. cloud_world_->points[i].intensity = pointFrom.intensity;
  37. }
  38. pose_changed_=false;
  39. return cloud_world_;
  40. }
  41. pcl::PointCloud<PointTypePose>::Ptr keyFramesManager::GetPoses(){
  42. pcl::PointCloud<PointTypePose>::Ptr ret(new pcl::PointCloud<PointTypePose>);
  43. ret->resize(frames_.size());
  44. for(int i=0;i<frames_.size();++i){
  45. ret->points[i]=frames_[i].Pose();
  46. }
  47. return ret;
  48. }