使用思岚A1激光雷达

A1的ros功能包下载地址:
https://github.com/slamtec/rplidar_ros
因为只有激光雷达,需要其做SLAM的话,就需要有一个laser_scan_matcher工具,其就能解算的我需要的里程计信息。
其他具体的操作过程我也是借鉴了这位大佬的博文:
https://blog.csdn.net/VampireWolf/article/details/90042517
以及另外一个大佬的:
https://blog.csdn.net/weixin_46781669/article/details/107738966?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
注意:串口权限一定要注意:

sudo chmod 777 /dev/ttyUSB0

(ttyUSB0根据自己的串口来改)
特别注意一下几个问题:
(1)问题1

ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
ROS path [0]=/opt/ros/melodic/share/ros ROS path
[1]=/home/derek/catkin_ws/src ROS path [2]=/opt/ros/melodic/share

没有安装gmapping功能包(ros版本自己换成自己的),解决:

sudo apt-get install ros-melodic-gmapping

(2)问题2:

[ERROR] [1619596653.001403083]: Error, operation time out.
RESULT_OPERATION_TIMEOUT! [rplidarNode-2] process has died [pid
12744, exit code 255, cmd
/home/derek/catkin_ws/devel/lib/rplidar_ros/rplidarNode
__name:=rplidarNode __log:=/home/derek/.ros/log/5fe04fd4-a7f7-11eb-aabc-000c29602675/rplidarNode-2.log].
log file:
/home/derek/.ros/log/5fe04fd4-a7f7-11eb-aabc-000c29602675/rplidarNode-2*.log

我的问题是出来波特率的问题上,思岚A1是115200,所以启动代码的中设置为115200,但是对于这种问题其实还有其他原因导致,这位大佬的博文其实说得比较完整:
https://www.freesion.com/article/35451398417/
最后的实验效果:

查看树状图:

rosrun rqt_tf_tree rqt_tf_tree

如何获取/TF数据

这里需要知道的一点是,/TF有其封装好的发布器和订阅器,因为我只用到订阅,所以这里说一下如何订阅/TF话题消息。(其他可以去看下ros wiki)
注意1:需要在CmakeLists.txt中添加 tf 包
注意2:以下两个定义必须放在ros.init()后面,不然会出现错误You must call ros::init() before creating the first NodeHandle。。。这个错误在catkin_make时不会检测出来,只会在运行节点时才会出现。

tf::TransformListener listener;
tf::StampedTransform transform;

与一般的订阅反馈函数机制不一样,主要代码如下:

#include "ros/ros.h"
#include <geometry_msgs/Pose.h>//姿态数据
#include <tf/transform_listener.h> //包含的tf的监听器ros::Publisher pub;geometry_msgs::Pose pose_msg;//发送给Unity的tf的transform数据int main(int argc, char **argv)
{ros::init(argc, argv, "deal_with_laser");ros::NodeHandle node;tf::TransformListener listener;//定义一tf监听器消息pub = node.advertise<geometry_msgs::Pose>("/pose_tf_data",1000);ros::Rate rate(10);while (node.ok()){tf::StampedTransform transform;try{listener.waitForTransform("odom", "base_link",ros::Time(),ros::Duration(5.0));//这句很重要listener.lookupTransform("odom", "base_link",ros::Time(0), transform);//lookupTransform查找到的是target到source坐标变换,对应父子坐标系}catch (tf::TransformException &ex) {ROS_ERROR("%s",ex.what());ros::Duration(1.0).sleep();continue;}  pose_msg.position.x = transform.getOrigin().x();//获取Translation的几个数据的格式pose_msg.position.y = transform.getOrigin().y();pose_msg.position.z = transform.getOrigin().z();pub.publish(pose_msg);rate.sleep();}return 0;
}

注意:

listener.waitForTransform(“odom”,
“base_link”,ros::Time(),ros::Duration(5.0));//这句很重要
listener.lookupTransform(“odom”, “base_link”,ros::Time(0), transform);

说一下两个问题:
(1)waitForTransform()函数用于等待,这个必须加,不然会出现一下错误:

[ERROR] [1619628231.521199770]: “base_link” passed to lookupTransform argument target_frame does not exist.

(2)两个函数

lookupTransform(参数1,参数2,参数3,参数4)
waitForTransform(参数1,参数2,参数3,参数4)

两个的参数说明:主要是 参数1 与 参数2 的关系,参数1是参数2的父级frame(参数位置不要反了)。
这里可以通过查看tf_tree结构看出:(在哪个文件夹下开终端执行以下代码,tf关系图会被创在那儿)

rosrun tf view_tf

关于在jetson nano上编译时出现的问题

(1)提示找不到自定义的ROS消息类型
原因:在我们拥有多个package的时候,我们定义了一个消息或者服务,并在代码中使用了这个消息或者服务。如果是单独编译这个包,编译 通过。但是如果是多个包一起编译,就会出现找不到相关头文件的错误。
解决:先单独编译拥有自定义ROS消息类型的功能包,编译通过后再加入其他功能包进行编译。
(2)编译带有自定义ROS类型的功能包,提示自定义的消息类型.h头文件找不到,这是就需要关注.h的引用格式:
一般出现出现错误的是双引号引用:#include “…h”,出现找不到(前是CMake里没有错误),将其改为#include <…h>,问题解决。

ROS只使用思岚A1激光雷达进行slam建图相关推荐

  1. 思岚A1激光雷达windows系统与ROS系统中的使用

    前言: 忙了一天,遇到了无数个问题解不开,结果竟然是因为安卓的USB连接线有问题,博友们,如果你们遇到如下问题: 思岚A1激光雷达windows上位机的使用:下载了串口的驱动(CP210x VCP W ...

  2. 图文并茂详细教程之---Pixhawk扩展思岚A1激光雷达实现360°避障

    转载自:https://mp.weixin.qq.com/s/FCBbjAmmn-rMDskIen_i4Q 图文并茂详细教程之---Pixhawk扩展思岚A1激光雷达实现360°避障 原创 CJKK ...

  3. [STM32]手持建图仪--基于STM32F103+思岚A1激光雷达的扫描仪

    前言 一个朋友在做服务机器人项目,用到思岚的激光雷达,于是便把淘汰的A1M8雷达送我一个,本着拿到啥就玩啥的态度,必须整一波.其实激光雷达还是搭配ROS才能发挥最大的作用,奈何资源有限,实力不足,只能 ...

  4. 【ROS-cartographer学习小记-01】使用自己的激光雷达思岚A1运行cartographer,附代码以及bag包-直接运行即可看到结果

    [ROS-cartographer学习小记-01]使用自己的激光雷达思岚A1运行cartographer 0.前提条件 1.修改revo_Ids.lua文件 3.修改demo_revo_lds.lau ...

  5. 关于思岚s1激光雷达ROS下的使用与测试

    笔者在很长一段时间,对于激光雷达的测距具体细节不是了解,很长一段时间就是调用人家写好的package,根本不清楚具体里面的技术细节,但是要做项目,要自己写算法,不清楚就很难进行下去. 首先介绍一下ro ...

  6. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文:机器人操作系统ROS-深度相机+激光雷达实现vSLAM建图与导航_wx5d23599e462fa的技术博客_51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航. ...

  7. 从零搭建一台基于ROS的自动驾驶车-----3.激光Slam建图

    系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jet ...

  8. Turtlebot_01——激光雷达运行gmapping建图

    一.基本功能包安装 1.使用环境:Ubuntu14.04 LTS + ROS indigo + hokuyo URG-04LX-UG01(激光型号) 2.安装 Turtlebot包(若要学习源码,修改 ...

  9. 思岚科技激光雷达全面升级:RPLIDAR A1仅需900元,A2测距提升至8米

    思岚科技自2009年着手研发低成本激光雷达,2014年面向全球推出了第一代产品RPLIDAR A1,在6米测量半径内,可完成每秒2000次激光测距.自推出至今,已累计使用用户达上千家.   时隔两年, ...

  10. ROS中使用思岚激光雷达进行跟随和Cmakelist.txt讲解

    之前一直在弄ROS小车的底盘和编写底盘的代码,现在把底盘已经弄好了,所以开始编写一些上层的代码和算法,这篇博客主要介绍使用思岚雷达来进行跟随和Cmakelist.txt的讲解,本人注重于手动DIY R ...

最新文章

  1. Sql Server:创建用户并指定该用户只能看指定的视图
  2. Linux配置Nginx与PHP-FPM出现[error] 80143#0: *1 connect() failed (111: Connection refused) while connectin
  3. 苹果开发账号过期不续费会怎样?
  4. windows 64 oracle sga,oracle 10g for windows sga区最大多少
  5. 使用git如何批量对文件进行rm操作
  6. Android实战:手把手实现“捧腹网”APP(三)-----UI实现,逻辑实现
  7. 9.1-微操作命令的分析(学习笔记)
  8. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
  9. 面试前你需要掌握的二叉树、二叉排序树的创建和四种遍历方式
  10. idea如何设置类头注释和方法注释
  11. php页面重定向到html,javascript-页面重定向(PHP,HTML)
  12. 如何在Java中使用Array实现ArrayList
  13. Spring MVC + freemarker实现半自动静态化
  14. Atitit q2016 q4 doc list on home ntpc.docx
  15. 吃一堑长一智,作为程序员的我们记住这几点,2021年Android开发实战
  16. 2018年高教社杯A题 高温作业专用服装设计
  17. 人工智能系列:AI 赋能平台
  18. 嵌入式Linux下获取CPU温度方法
  19. Android APP极光推送取消关联启动配置
  20. 技能get!如何使用PDF查找关键字

热门文章

  1. python—wordcloud库绘制词云
  2. H3C WA4320H-ACN 无线AP硬改支持集客256M内存启动
  3. Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
  4. 计算机中的查找快捷键,Excel搜索快捷键如何在excel中快速找到所需信息
  5. 小程序转发功能(类似于美团红包转发功能)的简单实现
  6. JAVA中的getBytes方法
  7. 超平面(hyperplane)的定义
  8. python中unicode编码的url如何正确解码
  9. 如何将qlv格式视频转换成mp4格式
  10. CentOS7—Firefox—截图工具—fireshot插件