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_lib
   src/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

生成的tcalgorithm_lib.so文件,在"工作空间/devel/lib/"文件夹下

相关推荐
可儿·四系桜13 分钟前
如何在多台Linux虚拟机上安装和配置Zookeeper集群
linux·服务器·zookeeper
Flying_Fish_roe17 分钟前
linux-软件包管理-包管理工具(Debian 系)
linux·运维·debian
BLEACH-heiqiyihu42 分钟前
红帽9中nginx-源码编译php
运维·nginx·php
666786661 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
企业管理8MSaaS1 小时前
了解CRM销售自动化:类型、优势、策略和工具
运维·自动化
宇宙第一小趴菜2 小时前
虚拟机安装xubuntu
linux·服务器·vmware
创小董2 小时前
智能机巢+无人机:自动化巡检技术详解
运维·自动化·无人机
henanxiaoman2 小时前
SaltStack自动化运维部署
运维·自动化·saltstack
Run_Snails2 小时前
hcia-openEuler V1.0师资题库-试卷3
运维·服务器·网络
翔云API2 小时前
身份证识别接口的应用场景和作用
运维·服务器·开发语言·自动化·ocr