TARE-PLANNER学习记录

参考:

CMU-TARE 探索算法官方社区问答汇总_cmu localplanner 部署-CSDN博客

Tare_planner学习笔记_tare planner-CSDN博客

Tare_planner 学习教程(二)_tareplanner-CSDN博客

(学习笔记)机器人自主导航从零开始第七步——TARE Planner自主探索算法-CSDN博客

11.7

配置:

首先是github地址:caochao39/tare_planner: TARE Exploration Planner for Ground Vehicles

然后需要下载CMU仿真环境(以及仿真对应场景的mesh)GitHub - HongbiaoZ/autonomous_exploration_development_environment: Leveraging system development and robot deployment for ground-based autonomous navigation and exploration.

中途有libusb问题报错,修改了sixpair.c部分代码(本机是ubuntu20.04 noetic)

具体位置如下:

autonomous_exploration_development_environment-noetic/src/joystick_drivers/ps3joy/src/sixpair.c

下面是我修改的sixpair.c全部代码

#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h> // 添加 <stdlib.h> 以支持 exit
#include <libusb-1.0/libusb.h>#define VENDOR 0x054c
#define PRODUCT 0x0268#define USB_DIR_IN 0x80
#define USB_DIR_OUT 0void fatal(char *msg) { perror(msg); exit(1); }void show_master(libusb_device_handle *devh, int itfnum) {printf("Current Bluetooth master: ");unsigned char msg[8];int res = libusb_control_transfer(devh, USB_DIR_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,0x01, 0x03f5, itfnum, msg, sizeof(msg), 5000);if (res < 0) { perror("USB_REQ_GET_CONFIGURATION"); return; }printf("%02x:%02x:%02x:%02x:%02x:%02x\n",msg[2], msg[3], msg[4], msg[5], msg[6], msg[7]);
}void set_master(libusb_device_handle *devh, int itfnum, int mac[6]) {printf("Setting master bd_addr to %02x:%02x:%02x:%02x:%02x:%02x\n",mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);unsigned char msg[8]= { 0x01, 0x00, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] };int res = libusb_control_transfer(devh,USB_DIR_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,0x09,0x03f5, itfnum, msg, sizeof(msg),5000);if (res < 0) fatal("USB_REQ_SET_CONFIGURATION");
}void process_device(int argc, char **argv, libusb_device *dev,struct libusb_config_descriptor *cfg, int itfnum) { // 修正类型声明int mac[6];libusb_device_handle *devh;int res = libusb_open(dev, &devh);if (res != 0 || !devh) fatal("usb_open");libusb_detach_kernel_driver(devh, itfnum);res = libusb_claim_interface(devh, itfnum);if (res < 0) fatal("usb_claim_interface");show_master(devh, itfnum);if (argc >= 2) {if (sscanf(argv[1], "%x:%x:%x:%x:%x:%x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6) {printf("usage: %s [<bd_addr of master>]\n", argv[0]);exit(1);}} else {FILE *f = popen("hcitool dev", "r");if (!f ||fscanf(f, "%*s\n%*s %x:%x:%x:%x:%x:%x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6) {printf("Unable to retrieve local bd_addr from `hcitool dev`.\n");printf("Please enable Bluetooth or specify an address manually.\n");exit(1);}pclose(f);}set_master(devh, itfnum, mac);libusb_release_interface(devh, itfnum);libusb_close(devh);
}int main(int argc, char *argv[]) {  libusb_context *ctx = NULL;int r = libusb_init(&ctx);if (r < 0) {fprintf(stderr, "Failed to initialize libusb: %s\n", libusb_error_name(r));return 1;}libusb_device **devs;ssize_t cnt = libusb_get_device_list(ctx, &devs);if (cnt < 0) {fprintf(stderr, "Failed to get device list\n");libusb_exit(ctx);return 1;}int found = 0;for (ssize_t i = 0; i < cnt; i++) {libusb_device *dev = devs[i];struct libusb_device_descriptor desc; // 使用struct修正类型声明int res = libusb_get_device_descriptor(dev, &desc);if (res < 0) {fprintf(stderr, "Failed to get device descriptor\n");continue;}if (desc.idVendor == VENDOR && desc.idProduct == PRODUCT) {process_device(argc, argv, dev, NULL, 0);found++;}}libusb_free_device_list(devs, 1);libusb_exit(ctx);if (!found) {printf("No controller found on USB busses. Please connect your joystick via USB.\n");return 1;}return 0;
}

然后是protobuf版本问题,降版本到protobuf3.6.1编译就ok了

运行仿真:

选取仿真的环境(替换enviroment)

source devel/setup.sh
roslaunch vehicle_simulator system_<environment>.launch
source devel/setup.sh
roslaunch tare_planner explore_<environment>.launch

比如要在garage中进行:

source devel/setup.sh
roslaunch vehicle_simulator system_garage.launchsource devel/setup.sh
roslaunch tare_planner explore_garage.launch 

下面在campus环境运行,记录在仿真环节的问题:

1.or-tools解决tsp问题(局部路径规划),如何进行路径平滑?

2.随着机器人局部路径规划进行,以及机器人进行运动,发现绿色方块深浅发生变化,这代表什么变化了?

3.发现随着局部路径规划进行,外部绿色方块减少的时候,浅蓝色路径也会更新,是否和全局路径相关?

思考:局部路径算法和全局路径算法分开,局部路径负责动态更新绿色方框内各个view_point之间的路径规划,而全局路径是在绿色方块进行更新时,进行重新规划淡蓝色路径的。

ps:如何去确定哪几个viewpoint去和外面的绿色方块连接呢?

后续校园环境仿真方案:

1.纯lidar方案

采集纯激光雷达点云地图导入CloudCompare进行downsample和计算每个点的normal。然后将其保存成文件(比如ply格式),再用meshlab打开并重建成mesh。最后用meshlab把它存成dae格式的文件,加载进gazebo进行仿真即可。

2.rgb方案

对图像渲染有要求的话则可以用图像生成3D模型(campus环境制作方案),先用google earth对其从不同的角度采集图片,最后用这些图片进行3D reconstruction

用谷歌地球采集图片之后,3D重建再保存为dae  使用meshroom

meshroom:https://github.com/alicevision/meshroom

FAST-LIO部署:

 使用 fastlio 部署 system_real_robot.launch

    问:使用fastlio部署system_real_robot.launch loam接口按照要求已经调整好,发现tf树没连接上,不知道怎么修改,还有fastlio的frame坐标在地图上混乱的 应该怎么调整?
    答:你好,我们的系统实际需要的就是两个话题,一个是包含sensor在map下的odometry(integrated_to_init),另一个就是当前帧点云在map下的投影(velodyne_cloud_registered),只要提供这两个信息,loam_interface会自己发布一套tf以及点云出来。需要注意的就是在fastlio里不能发布重复的map到sensor的关系,最简单的做法就是将fastlio里的map和sensor(如果有的话)都换成别的名字,防止重复发布有冲突的tf

调试问题:

https://bbs.csdn.net/topics/614500720

阅读源码:

1.exploration_path

主要是实现了一个用于探索和路径规划的基础数据结构

类名作用
Node表示探索路径中的一个节点,包含节点类型、位置、状态信息等。
ExplorationPath管理和操作由多个节点组成的路径,支持路径的添加、转换、反转和可视化。

2.graph

基本的图(Graph)结构,用于路径规划和距离计算,特别是支持在图结构中进行A*搜索,以找到两个节点之间的最短路径(这里用的是A*,局部路径tsp采用的or-tools?)

3.keypose_graph

用于处理机器人探索环境中的关键位姿图(Keypose Graph),并为机器人提供了导航、避障、路径规划、连通性检测等功能

  • 图的构建与动态更新
  • 避障与连通性检查
  • 路径规划与最短路径查找
  • 关键位姿节点的管理
  • 环境动态更新与可达性检测

keypose_graph 是用来搜索路径用的,相当于一个 roadmap。

keypose 最开始是从 SLAM 端来的,如果 SLAM 算法提供闭环检测的话,keypose 就是关键帧对应的机器人位姿。在开源的版本里省去了对闭环的处理,所以直接从机器人的轨迹上取点了。

普通点是保留了机器人周围的可行驶视点。

keypose_graph_cloud 内有两类,is_keypose 和 普通节点。

  • keypose 是机器人行进轨迹上按一定频率留下来的点;
  • 其他普通节点是在 global planning里,以视点候选点为节点求出 cells 之间的路径后,在这些路径上留下来的点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6469.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载

Moonshine 是由 Useful Sensors 公司推出的一系列「语音到文本&#xff08;speech-to-text, STT&#xff09;转换模型」&#xff0c;旨在为资源受限设备提供快速而准确的「自动语音识别&#xff08;ASR&#xff09;服务」。Moonshine 的设计特别适合于需要即时响应的应用场景&a…

【实验八】前馈神经网络(4)优化问题

1 参数初始化 模型构建 模型训练 优化 完整代码 2 梯度消失问题 模型构建 模型训练 完整代码 3 死亡Relu问题 模型构建 模型训练 优化 完整代码 1 参数初始化 实现一个神经网络前&#xff0c;需要先初始化模型参数。如果对每一层的权重和偏置都用0初始化&#xff0…

华为-宝塔-MongoDB无法登录

1、宝塔防火墙服务器安全组放开端口号 2、用数据库对应的用户名和密码登录 2-1&#xff1a;不指定验证数据库时用root账号密码登录 2-2&#xff1a;如果设置了验证数据库就用验证数据库对应的账号和密码登录

Scala入门基础(16)scala的包

Scala的包定义包定义包对象Scala的包的导入导入重命名 一.Scala的包 package&#xff08;包&#xff1a;一个容器。可以把类&#xff0c;对象&#xff0c;包&#xff0c;装入。 好处&#xff1a; 区分同名的类&#xff1b;类很多时&#xff0c;更好地管理类&#xff1b;控制…

Android IPC机制(一)多进程模式

1. 什么是进程&#xff1f; 进程是操作系统分配资源&#xff08;如 CPU、内存等&#xff09;的基本单位。简单来说&#xff0c;进程是一个正在执行的程序的实例。每个进程都有自己的内存空间、数据栈和其他辅助数据&#xff0c;用于跟踪进程的执行状态。在 Android 中&#xff…

【笔记】铜导线在高频下的损耗

参考资料&#xff1a;Litz Wire: Practical Design Considerations for Todays High Frequency Applications&#xff0c;kyle jensen,2020 1.高频条件下因为集肤效应&#xff0c;需要选择多股线 否则高频下因为集肤效应和接近效应&#xff0c;所引发的交流阻抗上升&#xff…

火语言RPA流程组件介绍--指纹浏览器管理

&#x1f6a9;【组件功能】&#xff1a;指纹浏览器配置管理创建、删除、判断是否存在 配置预览 配置说明 操作类型 有“创建、删除、判断是否存在”3种类型供选择。 指纹浏览器配置名称 支持T或# 默认FLOW输入项 填写指纹环境分身名称。 操作方式 有“名称、Id”2种方式…

windows自启动 映像劫持 屏保

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门 自启动 自启动路径加载 受控windows机器选择当前用户C盘目录下将文件放到这里每到电脑服务器重启就会自动加这次路径下文件 C:\Users\月\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startu…

SSH实验3拒绝root用户远程登录

打开配置文件&#xff1a; 默认为root用户密码登录&#xff1a; 加一行PermitRootLogin no&#xff0c;拒绝登录&#xff1a; 再打开这个配置文件&#xff1a; yes改为no&#xff1a; 查看SELinux 当前处于宽松模式&#xff0c;并且关闭防火墙&#xff1a; 重启sshd&#xff1a…

mysql 主从复制

一、通过二进制文件binlog进行主从同步 开启防火墙3306端口 1.设置主服务器&#xff1a;/etc/my.cnf log-binbinlog #二进制文件名称&#xff0c;需要开启 binlog-formatROW; # row,statement,mixed mysql默认采用statement statement&#xff1a;主要记录了sql。日志…

Python作业记录

复制过来的代码的换行有问题&#xff0c;但是也不是什么大问题。 后续我会进行补充和修改。 请将如下英文短句根据单词切分成列表&#xff1a; The continent of Antarctica is rising. It is due to a geological phenomenon called post-glacial uplift 并在切分好的列表…

Spring Boot框架下的水电管理系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理大学城水电管理系统的相关信息成为必然。开…

vue3+less使用主题定制(多主题定制)可切换主题

假如要使用两套主题&#xff1a;蓝色、红色 例如&#xff1a; 首先确保自己的vue3项目有less&#xff0c;这边不多做接入解释 1、在src目录下建一个styles文件夹&#xff0c;在syles文件夹下面新建两个less文件&#xff1a;theme.less和variables.less&#xff1b; theme.le…

PyQt5实战——翻译器的UI页面设计以及代码实现(七)

个人博客&#xff1a;苏三有春的博客 系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序…

【种完麦子,我就往南走,去西双版纳,过个冬天!】

麦子奶奶&#xff1a;冰哥&#xff0c;你好。 大冰&#xff1a;你好&#xff0c;咱俩不定谁大呢。 麦子奶奶&#xff1a;嗯&#xff0c;我大&#xff0c;我60多了&#xff0c;你各方面都是哥。 大冰&#xff1a;阿姨好 麦子奶奶&#xff1a;我想出去看看祖国的大好河山&…

koa + sequelize做距离计算(MySql篇)

1.核心思路 1.利用sequelize的fn方法调用MySql原生函数&#xff08;st_distance_sphere、point&#xff09; 2.这里利用到了MySql的原生函数&#xff0c;不懂可以去看看mysql的函数知识 2.核心代码 //st_distance_sphere、point函数用来计算当前经纬度和目的地经纬度 //col…

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化格式&#xff0c;常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读&#xff0c;并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构&#xff1a; Y…

【数据结构】Java 集合 Set 接口及其实现类的定义简介

接口继承接口&#xff0c;类实现接口。 Set 是一个接口&#xff0c;实现了 Collection 接口&#xff08;都带有泛型&#xff09;。它可以被继承或实现。在Java 集合章节的知识点中&#xff0c;学习其子类对象的实现以及关系。 类关系图 可以在IDEA中直接生成 集合 Set 类关系…

【青牛科技】应用方案 | D75xx-150mA三端稳压器

概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器&#xff0c;但它们可以与外部元件一起使用&…

(三)使用Vite创建Vue项目,了解Vue3生命周期

&#xff08;三&#xff09;使用Vite创建Vue项目 序章Vite官网安装方式一安装方式二 Vue3生命周期生命周期的详细解释 序章 其实这个没什么难点&#xff0c;步骤也非常简单&#xff0c;首先我们在本地的目录上创建一个x项目文件夹,然后在控制台上敲一些命令即可。 Vite官网 Vi…