Wheeltec小车的开发实录(3)之 wheeltec小车中配置自己的全局优化算法

我一贯的学习路子就先模仿后创造

所以我找到了哔哩哔哩上的一个up写好的算法放到我的小车中

ros的官方教程链接是:

navigation/Tutorials/Writing a Local Path Planner As Plugin in ROS - ROS Wiki

首先去up的github上下载插件

Grizi-ju (xiaoju) · GitHub

下载这个

但是该作者用的导航包中是有move_base.launch文件的

up说在该文件中修改如下对应段就可以

<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true"><param name="base_global_planner" value="BAstar_planner/BAstarPlannerROS"/>

但是我没有

我只有move_base.cpp 

所以我找到move_base.cpp修改了一以下内容

// 网上的教程都是在move_base.launch文件中添加下面这句话来引用插件,但是wiki小车中并不存在该launch文件// <param name="base_local_planner" value="local_planner/LocalPlanner" />// 而是通过cpp文件节点的方式调用,因此,我将对应修改下一句为非注释的样子// private_nh.param("base_global_planner", global_planner, std::string("navfn/NavfnROS"));private_nh.param("base_global_planner", global_planner, std::string("BAstar_planner/BAstarPlannerROS"));

我发现我原本调用的插件的名字是navfn所以我就找到了该文件夹的位置改为,发现该文件在navigation-melodic功能包目录级下,所以我将up的插件目录也放在该文件夹下。

复制好文件夹后

会发现,navfn对应的better_aster_global_planner应该是BAstar_planner,但是考录到ros一贯有文件夹名和功能包名是不对应的情况我也没更改

单独编译导航功能包

catkin_make -DCATKIN_WHITELIST_PACKAGES="better_astar_global_planner"

接着试试改包能不能规划

失败move_base_params.yaml试试。

#设置全局路径规划器
#base_global_planner: "carrot_planner/CarrotPlanner"
#base_global_planner: "navfn/NavfnROS" #base_global_planner: "global_planner/GlobalPlanner"
base_global_planner: "BAstar_planner/BAstarPlannerROS" 

该这里就成功了

归根结底就是该move_base的参数

有的是launch 有的就是这个 move_base_params.yaml文件夹。

编写自己的插件

首先创建工作空间

创建功能包

catkin_create_pkg tcalgorithm roscpp rospy nav_core //我自己的功能包

在tcalgorithm/src下创建TC.cpp文件

tcalgorithm/include/TC下创建TC.h头文件

工作空间/src文件夹下粘贴up的cpp文件

编译

ctakin_make

提示缺少nav_core

我是在主机电脑上写的胆码再移植到ros小车中,我主机是noetic版本的ros 小车上是melodic版本的ros

所以我在主机上安装nav_core的命令是

sudo apt-get install ros-noetic-nav-core

再次编译后不在提示错误

 cpp文件和h文件的编写

值得注意的是,一般在ros平台下编写功能包的h头文件是放在“功能包目录/include/功能包名/” 的文件夹下的,但是由于我们后面需要注册插件,因此需要复制h文件到cpp文件所属的src文件夹下。

待到后期封装完成时,才可以将h文件从cpp文件所在的src文件夹下移动到功能包目录/include/功能包名/” 的文件夹下

插件的注册

打开功能包tc_algorithm文件下的CMakeList.txt文件。这是通过终端创建功能包时自动生成的文件,找到下面这一段内容,取消注释。

修改为如下内容

tcalgorithm_lib是我们生成的.so文件,该文件将生成在“工作空间/devel/lib/”文件夹下

add_library(tcalgorithm_libsrc/TC.cpp)

接着编译一下

报错

fatal error: move_base_msgs/MoveBaseAction.h

fatal error: base_local_planner/world_model.h: 没有那个文件或目录

sudo apt-get install ros-noetic-move-base-msgs
sudo apt-get install ros-noetic-base-local-planner

生成的libtcalgorithm_lib.so文件,在“工作空间/devel/lib/”文件夹下

接着在功能包文件夹下新建一个"功能包名字_plugin.xml"文件,输入以下内容,并对照自己的设定的插件名字修改。

<library path="lib/libtcalgorithm_lib"><class name="TC_planner/TCPlannerROS" type="TC_planner::TCPlannerROS" base_class_type="nav_core::BaseGlobalPlanner"><description>This is the better A* global planner plugin by xiaoju.</description></class></library>

打开功能包文件夹下的package.xml

拉到最后将export中插入以下内容

<export><!-- Other tools can request additional information be placed here --><nav_core plugin="${prefix}/功能包名字_plugin.xml" /></export>

到这为止,一个全局规划器就处理好了,可以通过以下命令查看插件是否注册成功

rospack plugins --attrib=plugin nav_core

如果输入结果没有你的插件,请检查是否source工作空间路径。

接下来测试我们的功能包

首先我们将在虚拟平台中实现仿真,这一步需要确保安装以下内容

sudo git clone https://gitclone.com/github.com/guyuehome/guyueclass.git

找到guyueclass/planning&perception/mbot_navigation 文件夹下的4个功能包复制到你的工作空间目录下的src文件夹中。

编译

catkin_make

注意:编译之前删除工作空间目录下的devel和build文件夹。

接着测试

roslaunch mbot_gazebo view_mbot_with_laser_gazebo.launch

roslaunch mbot_navigation exploring_slam_demo.launch

这一部分的参考网站:

https://github.com/guyuehome/guyueclass/tree/main/ros_basic/mbot_gazebo

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Workstation创建虚拟机

一、VMware Workstation下载安装 1、安装教程 VMware Workstation下载安装&#xff08;含密钥&#xff09; 二、VMware Workstation 创建虚拟机 1、新建虚拟机&#xff0c;点击“创建新的虚拟机” 2、选择自定义&#xff08;高级&#xff09;&#xff0c;点击“下一步” 3…

【Java EE初阶十二】网络原理(二)

2. 传输层 2.2 TCP协议 2.2.2 关于可靠传输 4.滑动窗口 前面的三个机制&#xff0c;都是在保证 tcp 的可靠性&#xff1b; TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了)&#xff1b; 滑动窗口,就让可靠传输对性能的影响,更…

[嵌入式系统-24]:RT-Thread -11- 内核组件编程接口 - 网络组件 - TCP/UDP Socket编程

目录 一、RT-Thread网络组件 1.1 概述 1.2 RT-Thread支持的网络协议栈 1.3 RT-Thread如何选择不同的网络协议栈 二、Socket编程 2.1 概述 2.2 UDP socket编程 2.3 TCP socket编程 2.4 TCP socket收发数据 一、RT-Thread网络组件 1.1 概述 RT-Thread 是一个开源的嵌入…

【C Primer Plus第六版 学习笔记】 第十七章 高级数据表示

有基础&#xff0c;进阶用&#xff0c;个人查漏补缺 链表&#xff1a;假设要编写一个程序&#xff0c;让用户输入一年内看过的所有电影&#xff0c;要储存每部影片的片名和评级。 #include <stdio.h> #include <stdlib.h> /* 提供malloc()的原型 */ #include <s…

数据记笔记:USGS 查看上世纪卫星图

1 先到USGS EarthExplorer 界面&#xff0c;在address 处选择需要的城市/也可以在底下polygon处手动标出需要研究的区域 2&#xff0c;点击show&#xff0c;就会出找到的对应的区域&#xff0c;点击这个区域&#xff0c;polygon处就会有响应了。然后选择date range 3 点击下方的…

精工电联:定制精工线缆,赋能科技互联---致力于为客户提供卓越的连接线缆和连接器产品

精工电联 “定制精工线缆 &#xff0c;赋能科技互联”&#xff0c;精工电联致力于为高科技产业提供全方位、多维度的集成线缆解决方案。凭借深厚的研发实力和丰富的行业经验&#xff0c;精工电联已经成功地在工控设备、医疗设备、人工智能、新能源领域、轨道交通和超声波设备等…

7. Qt添加滑动条

前言&#xff1a; 添加一个这样的滑条&#xff0c;双方关联自动修改,也提供代码创建方式 技能&#xff1a; QSpinBox QSlider 方式一 Qt 的图形化编程&#xff08;用ui文件&#xff0c;非常简单&#xff09; 1.Spin Box 首先找到显示数字的这个部分。是input widget->sp…

Jenkins 2.426.3新版设置中文

1. 插件页面显示无法联网 &#xff0c;点击Plugins一直提示连接超时&#xff0c;设置公司代理后 2. 稍等一会儿点击如下图&#xff0c;插件就出来了&#xff0c;然后输入Locale进行下载 3. 以下是我下载安装好的 4.打开设置&#xff0c;找到Locale选项&#xff0c;设置成zh_CN…

相机图像质量研究(32)常见问题总结:图像处理对成像的影响--振铃效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

IDEA配置Lombok不起作用

IDEA配置Lombok不起作用 我们通常会只用lombok来简化代码。但是使用IDEA的lombok插件时&#xff0c;Lombok并不起作用。 可以按照如下操作。 FIle -> settings ->build,excecution,deployment–>compiler–>annotation processors勾选上 enable annotation proc…

Ubuntu 20.04 安装RVM

RVM是管理Ruby版本的工具,使用RVM可以在单机上方便地管理多个Ruby版本。 下载安装脚本 首先使下载安装脚本 wget https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer 如果出现了 Connection refused 的情况, 可以考虑执行以下命令修改dns,再执…

专业140+总410+合工大合肥工业大学833信号分析与处理综合考研经验电子信息与通信工程,真题,大纲,参考书。

经过一年努力奋战&#xff0c;今年初试总分410&#xff0c;其中专业课833信号分析与处理综合&#xff08;ss和dsp&#xff09;140&#xff08;感谢信息通信Jenny老师去年的悉心指导&#xff09;&#xff0c;数一130&#xff0c;顺利上岸&#xff0c;被合工大录取&#xff0c;看…