sensor_msgs::LaserScan转换为sensor_msgs::PointCloud2
主要用到了transformLaserScanToPointCloud()这个函数,
订阅消息结构为sensor_msgs::LaserScan的话题scan,
发布消息结构为sensor_msgs::PointCloud2的话题cloud2
完整的功能包上传至
https://download.csdn.net/download/zhaohaowu/21227408
或者
1、创建功能包
catkin_create_pkg LaserScan2PointCloud2 roscpp rospy tf sensor_msgs laser_geometry
2、CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(LaserScan2PointCloud2)
find_package(catkin REQUIRED COMPONENTS
laser_geometry
roscpp
rospy
sensor_msgs
tf
)
catkin_package(
CATKIN_DEPENDS laser_geometry roscpp rospy sensor_msgs tf
)
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(LaserScan2PointCloud2 src/LaserScan2PointCloud2.cpp)
target_link_libraries(LaserScan2PointCloud2
${catkin_LIBRARIES}
)
3、src写两个文件
LaserScan2PointCloud2.cpp
#include "LaserScan2PointCloud2.h"
LaserScan2PointCloud2::LaserScan2PointCloud2(){
sub = n.subscribe<sensor_msgs::LaserScan>("/scan", 100, &LaserScan2PointCloud2::callback, this);
pub = n.advertise<sensor_msgs::PointCloud2>("/cloud2", 100);
listener.setExtrapolationLimit(ros::Duration(0.1));
}
void LaserScan2PointCloud2::callback(const sensor_msgs::LaserScan::ConstPtr& scan){
sensor_msgs::PointCloud2 cloud2;
transformer.transformLaserScanToPointCloud("laser", *scan, cloud2, listener);
pub.publish(cloud2);
}
int main(int argc, char** argv){
ros::init(argc, argv, "LaserScan2PointCloud2");
LaserScan2PointCloud2 LaserScan2PointCloud2;
ros::spin();
return 0;
}
LaserScan2PointCloud2.h
#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <laser_geometry/laser_geometry.h>
#include <sensor_msgs/PointCloud2.h>
#include <sensor_msgs/LaserScan.h>
class LaserScan2PointCloud2{
private:
ros::NodeHandle n;
laser_geometry::LaserProjection transformer;
tf::TransformListener listener;
ros::Publisher pub;
ros::Subscriber sub;
public:
LaserScan2PointCloud2();
void callback(const sensor_msgs::LaserScan::ConstPtr& scan);
};
4、消息结构为sensor_msgs::PointCloud2的话题cloud2(a.bag)转换一下话题名字points_raw(b.bag)
rosparam set use_sim_time true
rosbag record /points_raw
rosbag play --clock a.bag /cloud2:=/points_raw
这个步骤可以不要,在上面代码里将cloud2的话题直接改为points_raw
5、安装autoware
https://blog.csdn.net/zhaohaowu/article/details/119839147
6、消息结构为sensor_msgs::PointCloud2的话题points_raw以b.bag格式转换为pcd(a.pcd)
roslaunch runtime_manager runtime_manager.launch
setup里面点击TF和Vehicle Model
Map里面TF处点击Ref,加载~/autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/tf_local.launch,然后点击TF
Computing里面点击lidar_localizer的ndt_mapping
Simulation里面点击Ref加载b.bag,点击play,再点击Pause,点击rviz
选择Fixed Frame为map,添加话题/ndt_map/PointCloud2,size修改为0.1
回到Runtime Manager,点击Pause,等待Playing结束
点击Computing中的lidar_localizer的ndt_mapping的app,再点击Ref选择pcd保存位置,点击PCD OUTPUT,生成a.pcd
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri