rplidar 扫描角度设置
参考网站:: https://blog.csdn.net/sunyoop/article/details/78302090
https://blog.csdn.net/dzhongjie/article/details/84575482

例如正面180度扇型数据,那么选取的度数为0~90,270~359的数据
270度面的扇型数据,选取度数为0~135, 225~359的数据
回到代码中
2.打开node.cpp文件,简单看下逻辑
修改publish_scan函数:
void publish_scan(ros::Publisher *pub,
rplidar_response_measurement_node_hq_t *nodes,
size_t node_count, ros::Time start,
double scan_time, bool inverted,
float angle_min, float angle_max,
float max_distance,
std::string frame_id)
{ static int scan_count = ; sensor_msgs::LaserScan scan_msg;
scan_msg.header.stamp = start;
scan_msg.header.frame_id = frame_id; scan_count++; bool reversed = (angle_max > angle_min); if(reversed){
scan_msg.angle_min = M_PI - angle_max;
scan_msg.angle_max = M_PI - angle_min;
}
else{
scan_msg.angle_min = M_PI - angle_min;
scan_msg.angle_max = M_PI - angle_max;
} scan_msg.angle_increment =(scan_msg.angle_max - scan_msg.angle_min) / (double)(node_count-);
scan_msg.scan_time = scan_time;
scan_msg.time_increment = scan_time / (double)(node_count-);
scan_msg.range_min = 0.15;
scan_msg.range_max = 8.0; scan_msg.intensities.resize(node_count);
scan_msg.ranges.resize(node_count);
bool reverse_data = (!inverted && reversed) || (inverted && !reversed); //修改后的代码reverse_data就没有用处了。 /* 将rplidar放到hokuyo的位置,角度信息见上面的图如下
0度/前
270度/左 rplidar的方向 90度/右
180度/后
kobuki接收到 LaserScan scan_msg.ranges数据对应的角度信息
180度/前
270度/左 kobuki的方向 90度/右
0度/后 要把 0~90度对应的node数据映射到 180~90度的scan_msg.ranges中
要把 90~180度对应的node数据映射到 90~0度的scan_msg.ranges中
要把 180~270度对应的node数据映射到 359~270度的scan_msg.ranges中
要把 270~359度对应的node数据映射到 270~180度的scan_msg.ranges中 */
const size_t degree_90 = ; //固定值,算法需要
const size_t degree_270 = ; //固定值,算法需要
const size_t left_degrees = ; // 裁剪的范围 保留数据225~359.
const size_t right_degrees = ; // 裁剪的范围 保留数据0~135.
//先全部置inf,注意:如果初始化是0,则表示范围内无障碍,故不能置0。inf表示无数据
for (size_t i = ; i < node_count; i++){
scan_msg.ranges[i] = std::numeric_limits<float>::infinity();
} //将数据分别对应设置进去
for (size_t i = ; i < node_count; i++)
{
float read_value = (float) nodes[i].dist_mm_q2/4.0f/;
if (i < right_degrees)
{
if (read_value == 0.0)
scan_msg.ranges[*degree_90 - i] = std::numeric_limits<float>::infinity();
else
scan_msg.ranges[*degree_90 - i] = read_value; scan_msg.intensities[*degree_90 - i] = (float) (nodes[i].quality >> ); }
else if (i > left_degrees)
{
if (read_value == 0.0)
scan_msg.ranges[*degree_270 - i] = std::numeric_limits<float>::infinity();
else
scan_msg.ranges[*degree_270 - i] = read_value; scan_msg.intensities[*degree_270 - i] = (float) (nodes[i].quality >> );
}
else
{
//do nothing;
}
}
//发布出去
pub->publish(scan_msg);
}
讲需要裁剪的角度放到launch文件中,当作参数传入,比在代码中修改好很多
例如:在rplidar.launch文件中加入
<param name="cut_angle" type="bool" value="true"/> <param name="right_degrees" type="int" value=""/> <param name="left_degrees" type="int" value=""/>
然后在main()函数中添加参数:
bool cut_angle =false;
int right_degrees=;
int left_degrees=;
nh_private.param<bool>("cut_angle", cut_angle, false);
if (cut_angle){
nh_private.param<int>("left_degrees", left_degrees, );
nh_private.param<int>("right_degrees", right_degrees, );
}
讲需要裁剪的角度放到launch文件中,当作参数传入,比在代码中修改好很多
例如:在rplidar.launch文件中加入
<param name="cut_angle" type="bool" value="true"/> <param name="right_degrees" type="int" value=""/> <param name="left_degrees" type="int" value=""/>
重新编译即可。
(注::不知道为什么Boost模式下 运行报错,A2 standard Express模式没有问题)
rplidar 扫描角度设置的更多相关文章
- 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度
在使用扫描枪的过程中,发现扫描二维码速度比较慢,不到100个字符,花了大概2-3秒的时间才完成显示,这个速度不能忍受啊.通过度娘,说是可以将USB键盘模式接收字符转换成虚拟串口接收,这样可以大大提高速 ...
- 详解ABBYY FineReader 12扫描亮度设置
很多刚接触ABBYY FineReader 12的小伙伴可能出现过这样一个问题:在扫描过程中会显示一条消息以提示更改亮度设置.这是因为你 FineReader扫描设置中亮度未正确设置.下面小编就给小伙 ...
- Box2D淌坑日记: 如何正确的设置角度
对刚体角度设置的唯一函数是 SetTransform 然而,这个函数不会对传入的角度作任何处理,因此,如果你试图设置一个角度,并应用一个revoluteJoint时,可能会出现问题. 我在实践中碰到的 ...
- Rplidar学习(二)—— SDK库文件学习
SDK头文件介绍 1.头文件简介: rplidar.h //一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能. rplidar_driver.h //定义了 SDK ...
- 【译】使用OpenVAS 9进行漏洞扫描
本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...
- TWaver动画之雷达扫描效果
UI和功能是好的产品的两个重要因素,很多产品往往只注重功能上的设计,而忽略了UI.在这个“看脸”的时代,就算产品的功能很强大,如果UI跟不上步伐,你的产品都会在客户心中大打折扣.做安全和监控的项目中经 ...
- Swift 二维码扫描 简单实现
3.30看视频 学到了二维码简单的实现 还有一些动画的实现 今天就先记录一下二维码扫描的简单实现 不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 ...
- Nmap扫描手册
By:WHILE扫描类-sTTCP connect()扫描,完整的通话连接,容易被检测,会被记录日志.-sSTCP同步扫描,不完整的通话连接,很少有系统会记入日志.-sUUDP扫描-sAACK扫描用来 ...
- ABBYY FineReader 12扫描界面介绍
ABBYY FineReader 12OCR图文识别软件自身拥有着自己的扫描界面,一般在默认情况下,ABBYY FineReader 使用其自身的扫描界面.本文就解析了ABBYY FineReader ...
随机推荐
- MVC 视图与控制器传值的几种方法
一.页面取值传给控制器 1.表单传值----利用Action 视图页: <form action="方法名" method="post" ...
- Ubuntu 14.04LTS+Git
Git是我们常用的代码托管工具,作为程序员,Git是必备的. 安装Git的方法很简单,官网就有写:http://git-scm.com/download/linux 根据官网的说明,用: sudo a ...
- UTF-8 setup for workspace
In Eclipse, go to Preferences>General>Workspace and select UTF-8 as the Text File Encoding. Th ...
- 【bzoj2393】【Cirno的完美算数教室】容斥原理的剪枝应用
(上不了p站我要死了,侵权度娘背锅) 在用容斥定理时,常常会用到dfs的形式,如果枚举完所有的情况可能会超时,其剪枝的优化很是重要. Description ~Cirno发现了一种baka数,这种数呢 ...
- eclipse无法导入Android工程的解决办法
我以前在windows平台下写的android源代码无法通过import"existing project into workspace"导入到mac的eclipse中,直接搜不见 ...
- [置顶]
kubernetes资源类型--ingress
Ingress在K8S1.1之前还没有. 概念 Ingress是一种HTTP方式的路由转发机制,为K8S服务配置HTTP负载均衡器,通常会将服务暴露给K8S群集外的客户端. Ingress是一个允许入 ...
- ZeroMQ使用学习记录(转)
ZMQ简介 ZMQ(ØMQ.ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架.它提供的套接字可以在多种协议中传输消息,如线程间.进程间.TCP.广播等.你可以 ...
- log4j教程 10、PatternLayout
如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息. PatternLayout类扩展抽象 org.apache.log ...
- mac 上python编译报错No module named MySQLdb
mac 上python编译报错No module named MySQLdb You installed python You did brew install mysql You did expor ...
- python对文件写操作报错UnicodeEncodeError
2017-04-25 python连mongodb数据库并将提取部分数据写入本地文件时,出现UnicodeEncodeError. 解决方法:指定文件字符集为utf-8,在文件头部加入以下代码 imp ...