C++开发星秒PAVO雷达

·前言

 

根据之前研究思岚Ax系列雷达和YDLIDAR G4雷达的相关思路....

现在研究各个雷达厂家的c++sdk越来越得心应手了

今天我们拿星秒来学习

(我隐约记得好像可以对标北阳URG)

æä¸æ¯ æ没æ å«ç说 你乱说ï¼åµæ人å¦è®¤åè¿ï¼_åè¿_åµæ人_乱说_ç说_å¦è®¤è¡¨æ

我们看下官方的参数:

来看看长啥模样 

玩过北阳雷达的都知道,是否感jio很眼熟^_^

 ·下载

官网技术支持-上海星秒光电科技有限公司

 下载包:

Pavoview1.2.1.12.rar =>官方调试工具

pavo_ros2.0.5.rar =>官方机器人相关SDK

pavo_sdk2.0.6.rar =>官方c++SDK

开发之前先看sdk内部的Pavo SDK编程指南-V2.0.6.pdf

我们先解读下这篇指南

· SDK编程指南注意事项

(1)需要配置boost1.76.0库,自行百度配置

LNK1104 无法打开文件“libboost_system-vc141-mt-gd-x64-1_68.lib”_专注学习游戏开发【真原创】-CSDN博客LNK1104 无法打开文件“libboost_system-vc141-mt-gd-x64-1_68.lib”笔者的情况:1:Visual Studio 2017 已经设置 项目属性 -> VC++目录->包含目录和库目录但是在编译工程时依然报错,网上找资料各种解决方法都有,这里贴下我认为靠谱的解决方法解决方案:1:确保你的工程平台对应你生成的boost lib ,例...https://blog.csdn.net/u013700908/article/details/82751159

编译失败,注意下你的运行库MT还是MD,需要保持一致,boost库是static还是shared的

b2 stage --toolset=msvc-14.2 --without-graph --without-graph_parallel --stagedir="F:\boost_1_76_0_mtd_lib\build\lib" link=static runtime-link=static runtime-link=static threading=multi debug release

runtimelink=static     ==>MT库
runtimelink=shared   ==>MD库

(2)雷达被动上传数据模式,指的是在上位机和雷达能进行网络正常通信的情况下,由上位机根据雷达 IP 打开雷达,直接发送数据请求,从而获取雷达数据。

        1.知晓雷达配置界面中的 PavoIP、PavoPort 信息

        2.保证雷达与上位机能进行正常网络通信

(3)雷达主动上传数据模式,指的是根据雷达中关于 DestIP 和 DestPort 的配置,设置与雷达相连的网口 IP,由上位机根据配置界面中 DestIP 和 DestPort,打开接受数据的端口,根据雷达 IP 打开雷达,从 而获取雷达主动上传数据。

        1. 知晓雷达配置界面中的 PavoIP、PavoPort、DestIP、DestPort 信息

        2. 设置与雷达相连的网卡 IP 为配置界面中的 DestIP

        3. 根据雷达配置界面中的 DestIP 和 DestPort,设置接受数据的端口

(4)工程需引用sdk源码

        ./include

        ./src

(5) 新建静态库(.lib)工程,导入相对应的sdk文件

 

· 测试代码

int main()
{
	pavo_driver* driver = new  pavo_driver();

	std::string ip;
	printf("输入IP(10.10.10.100):");
	std::cin >> ip;

	int port;
	printf("输入端口(2368):");
	std::cin >> port;

	bool isConnect = false;
	bool isOk = false;

	try
	{
		isConnect = driver->pavo_open(ip, port);
		isOk = true;
	}
	catch (pavo_exception& e)
	{
		printf(e.what());
		isOk = false;
	}

	if (isConnect && isOk) {
		std::cout << "雷达连接成功" << std::endl;

		device_config(driver);
		enable_data(driver, true);
		enable_motor(driver, true);
		set_motor_speed(driver);
		set_ladar_mode(driver, pavo_mode_t::Normal);

		while (isConnect) {
			int time_out = 100;
			std::vector<pavo_response_scan_t> buffer;
			if (driver->get_scanned_data(buffer, time_out)) {
				size_t count = buffer.size();
				for (int pos = 0; pos < (int)count; ++pos) {
					std::cout << "角度:" << buffer[pos].angle << "距离:" << buffer[pos].distance << "强度:" << buffer[pos].intensity << std::endl;
				}
			}
			else {
				fprintf(stderr, "Failed to get Lidar Data\n");
				fflush(stderr);
			}
		}
	}
	else {
		if (isOk) {
			std::string ok_str = get_error_code(driver);
			std::cout << ok_str << std::endl;
		}
		else {
			std::cout << "传参错误,连接失败!" << std::endl;
		}
	}

	if (isOk) {
		enable_data(driver, false);
		enable_motor(driver, false);
		driver->pavo_close();
        delete driver;
	}
	std::cout << "ok!" << std::endl;

}

2021年9月7号更新:

使用sdk给出的平面坐标更加方便快捷,不用自己去转笛卡尔坐标了

	// 使用平面坐标
	std::vector<pavo_response_pcd_t> buffer;
	if (lidar_drv->get_scanned_data(buffer)) {
		size_t count = buffer.size();
		for (int pos = 0; pos < (int)count; ++pos) {
			ptr[pos].angle = -buffer[pos].x * 0.002f;
			ptr[pos].distant = -buffer[pos].y * 0.002f;
			ptr[pos].quality = (unsigned int)buffer[pos].intensity;
		}
		return count;
	}

· C++动态库(.dll)

参照Unity C#调用RPLidar的C++动态库(.dll)文件(2)_欲望如海水,越喝越渴。-CSDN博客

1.新建管理类代码

2.定义 DLL 应用程序的导出函数

dll载入到你的引擎中,愉快的使用吧!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerrt-J

希望我创作能给你带来有用的帮助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值