这篇博文详细记录在windows系统调试ydlidar的全过程

ydlidar采用全无线连接方式,测距雷达放在迷你机器人(型号tianbotmini,中文名天宝迷你)上如下图所示,需要usb无线设备接受雷达信息:

装配雷达的机器人和接收器

由于使用机器人操作系统(ROS1和ROS2),需要安装机器人操作系统的请参考如下:

  • 在Windows系统安装ROS机器人操作系统(更新日期2020年10月,附官网链接)

下面开始操作,使用SDK版本为1.4.7,发布日期为2020年3月31日。

Linux系统下使用简单不做介绍,这里重点围绕windows

简介

ydlidar SDK提供了控制命令和激光扫描数据传输的实现使用C/C++应用程序接口(API),基本结构如下图所示:

架构

安装

1. 检查系统vcpkg环境配置情况:

  • vcpkg integrate install

vcpkg

这里可以看到使用cmake的详细参数,接着就可以完成配置愉快编译啦。

2. cmake配置

新建build文件夹:

build文件夹

使用如下命令进行配置:

  • cmake .. -G "Visual Studio 16 2019" "-DCMAKE_TOOLCHAIN_FILE=C:/opt/ros/melodic/x64/tools/vcpkg/scripts/buildsystems/vcpkg.cmake"

配置顺利成功完成

然后进入build文件夹看一看???

VS工程

熟悉的画面出现啦。

3. VS2019编译

主要Debug或Release版本选择x64,然后点击

主函数main代码如下,非常重要,稍后博文会介绍如何将其接入ROS,愉快玩耍:

#include "CYdLidar.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
using namespace ydlidar;#if defined(_MSC_VER)
#pragma comment(lib, "ydlidar_driver.lib")
#endifint main(int argc, char *argv[]) {printf("__   ______  _     ___ ____    _    ____  \n");printf("\\ \\ / /  _ \\| |   |_ _|  _ \\  / \\  |  _ \\ \n");printf(" \\ V /| | | | |    | || | | |/ _ \\ | |_) | \n");printf("  | | | |_| | |___ | || |_| / ___ \\|  _ <  \n");printf("  |_| |____/|_____|___|____/_/   \\_\\_| \\_\\ \n");printf("\n");fflush(stdout);std::string port;ydlidar::init(argc, argv);std::map<std::string, std::string> ports =ydlidar::YDlidarDriver::lidarPortList();std::map<std::string, std::string>::iterator it;if (ports.size() == 1) {port = ports.begin()->second;} else {int id = 0;for (it = ports.begin(); it != ports.end(); it++) {printf("%d. %s\n", id, it->first.c_str());id++;}if (ports.empty()) {printf("Not Lidar was detected. Please enter the lidar serial port:");std::cin >> port;} else {while (ydlidar::ok()) {printf("Please select the lidar port:");std::string number;std::cin >> number;if ((size_t)atoi(number.c_str()) >= ports.size()) {continue;}it = ports.begin();id = atoi(number.c_str());while (id) {id--;it++;}port = it->second;break;}}}int baudrate = 230400;std::map<int, int> baudrateList;baudrateList[0] = 115200;baudrateList[1] = 128000;baudrateList[2] = 153600;baudrateList[3] = 230400;baudrateList[4] = 512000;printf("Baudrate:\n");for (std::map<int, int>::iterator it = baudrateList.begin();it != baudrateList.end(); it++) {printf("%d. %d\n", it->first, it->second);}while (ydlidar::ok()) {printf("Please select the lidar baudrate:");std::string number;std::cin >> number;if ((size_t)atoi(number.c_str()) > baudrateList.size()) {continue;}baudrate = baudrateList[atoi(number.c_str())];break;}if (!ydlidar::ok()) {return 0;}bool isSingleChannel = false;bool isTOFLidar = false;std::string input_channel;std::string input_tof;printf("Whether the Lidar is one-way communication[yes/no]:");std::cin >> input_channel;std::transform(input_channel.begin(), input_channel.end(),input_channel.begin(),[](unsigned char c) {return std::tolower(c);  // correct});if (input_channel.find("yes") != std::string::npos) {isSingleChannel = true;}if (!ydlidar::ok()) {return 0;}printf("Whether the Lidar is a TOF Lidar [yes/no]:");std::cin >> input_tof;std::transform(input_tof.begin(), input_tof.end(),input_tof.begin(),[](unsigned char c) {return std::tolower(c);  // correct});if (input_tof.find("yes") != std::string::npos) {isTOFLidar = true;}if (!ydlidar::ok()) {return 0;}std::string input_frequency;float frequency = 8.0;while (ydlidar::ok() && !isSingleChannel) {printf("Please enter the lidar scan frequency[3-15.7]:");std::cin >> input_frequency;frequency = atof(input_frequency.c_str());if (frequency <= 15.7 && frequency >= 3.0) {break;}fprintf(stderr,"Invalid scan frequency,The scanning frequency range is 5 to 12 HZ, Please re-enter.\n");}if (!ydlidar::ok()) {return 0;}CYdLidar laser;//<! lidar portlaser.setSerialPort(port);//<! lidar baudratelaser.setSerialBaudrate(baudrate);//<! fixed angle resolutionlaser.setFixedResolution(false);//<! rotate 180laser.setReversion(false); //rotate 180//<! Counterclockwiselaser.setInverted(false);//ccwlaser.setAutoReconnect(true);//hot plug//<! one-way communicationlaser.setSingleChannel(isSingleChannel);//<! tof lidarlaser.setLidarType(isTOFLidar ? TYPE_TOF : TYPE_TRIANGLE);//unit: °laser.setMaxAngle(180);laser.setMinAngle(-180);//unit: mlaser.setMinRange(0.01);laser.setMaxRange(64.0);//unit: Hzlaser.setScanFrequency(frequency);std::vector<float> ignore_array;ignore_array.clear();laser.setIgnoreArray(ignore_array);bool ret = laser.initialize();if (ret) {ret = laser.turnOn();}while (ret && ydlidar::ok()) {bool hardError;LaserScan scan;if (laser.doProcessSimple(scan, hardError)) {fprintf(stdout, "Scan received[%llu]: %u ranges is [%f]Hz\n",scan.stamp,(unsigned int)scan.points.size(), 1.0 / scan.config.scan_time);fflush(stdout);} else {fprintf(stderr, "Failed to get Lidar Data\n");fflush(stderr);}}laser.turnOff();laser.disconnecting();return 0;
}

编译界面如下:

调试环境

分别用debug和release调试一下吧。

很顺利,都分别生成了ydlidar_test.exe。

ydlidar顺利出现

这时候build下会分别多出debug和release两个文件夹,进入release:

详细文件列表

使用

插上无线接收器,打开天宝迷你电源开关,一切配网正确:

  • ydlidar_test.exe

测试

设置波特率等参数如下所示:

参数配置1

但是请依据雷达具体型号配置参数哦,如果不正确建立连接获取状态。

参数配置2

更多具体内容参考SDK文档的readme与API。很全!

API文档

一共199页,满足你的各种需求。


在windows系统调试ydlidar详细记录(物联网机器人方向)相关推荐

  1. Windows 系统 重装为Linux 记录

    因为是老电脑,没怎么用,然后就又一个想法重装为Linux 准备好Linux镜像文件 如果没有准备好,以下是网址:https://man.linuxde.net/download/CentOS_7_4 ...

  2. react-native for android windows开发环境搭建详细记录

    先说说整个环境搭建的过程.上周开始要在windows上搭建react-native for android环境,当时按照找的教程,从git上clone master分支的代码,然后下载了node,安装 ...

  3. 【SLAM】ORB_SLAM3 初步调试运行详细记录

    前言 相关解析及参考: 超详细解读ORB-SLAM3单目初始化(下篇) ORB_SLAM3和之前版本有什么不同?_小白学视觉的技术博客_51CTO博客 orbslam3 官方源码地址:https:// ...

  4. windows系统查看路由详细信息

    windows+r 进入命令行,如下图所示:  输入命令"route print" ,打印输出路由信息,如果需要查看路由详细参数使用:route --help. route --h ...

  5. windows系统 谷歌浏览器崩溃修复记录

    chrome浏览器崩溃了,我的心碎了,STATUS_INVALID_IMAGE_HASH Google Chrome 显示"喔唷,崩溃啦!"后重新安装后就一直提示错误代码" ...

  6. php输出mysql错误日志_PHP_PHP中把错误日志保存在系统日志中(Windows系统),【将错误记录到系统日志中】 - phpStudy...

    PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 i ...

  7. python windows系统_Windows系统下Python-Windows详细安装教程

    安装Python-Windows 在开始Python编程前,需要先安装Python环境.Python安装包可以到Python的官网下载,官网地址是,如果想直接跳过关于Python的介绍相关直接下载安装 ...

  8. php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)

    PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: 复制代码 代码如下: error_log = syslog ...

  9. 递归和Windows系统的栈保护

    Windows系统上创建线程可以使用CreateThread() API,这个API的原型是: HANDLE WINAPI CreateThread( __in          LPSECURITY ...

  10. 101-STM32+Air724UG基本控制篇(自建物联网平台)-基础搭建-购买云主机,安装MQTT服务器软件(.Windows系统)

    说明 云服务器: 就是一台电脑,和咱使用的是一样的.云服务器实际上最终还是物理机,只不过物理机是服务商的,服务商负责维护运行. 服务商提供了网页端让咱去购置和选型,购置完以后就可以登录使用. 云服务器 ...

最新文章

  1. 如何给女朋友解释什么是“元宇宙”?
  2. 【caffe速成】caffe图像分类从模型自定义到测试
  3. centos7下安装storm步骤
  4. 仓储模式到底是不是反模式?
  5. neo4j cypher_neo4j / cypher:悬挂查询参数
  6. Quartz作业调度框架及时间表达式的含义和语法
  7. 重学JAVA基础(三):动态代理
  8. Qt一个进程运行另一个进程
  9. 无限弹窗(python)
  10. 如何给multisim中导入9012/9013/8050/8550三极管
  11. 开发PLO编译器过程的一些体会
  12. 2022出海非洲:加纳电商市场现状及发展前景
  13. Excel应用技巧:不规则合并单元格的求和
  14. App兼容性测试/MONKEY配置和安装
  15. opc ua 用哪种语言编写_什么是OPC UA?
  16. python绘制七巧板_CSS3制作七巧板动画
  17. IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现
  18. 揭开自动驾驶在机场场景的商业化现状、挑战及趋势
  19. 2010.5.11项目管理群主题:网游那些事-DDV731731-SSE
  20. linux上安装java失败,Linux下安装jdk失败怎么办

热门文章

  1. 血氧仪方案指夹式TFT指尖心率监测脉搏
  2. 中国60家最强汽车初创在此!芯片厂高调入局,智能网联强势霸榜
  3. box-sizing属性的理解
  4. 智能语音概念界定及技术架构
  5. 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型
  6. 阿里云ECS安骑士离线修复步骤
  7. python图形绘制星空图_天文星空图谱开源软件Stellarium
  8. ftp服务器批量下载文件(方式二)
  9. 拼接字符串Joiner的用法
  10. 收藏:关于3g手机的市场调查报告