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/"文件夹下

相关推荐
运维老司机9 分钟前
Jenkins修改LOGO
运维·自动化·jenkins
D-海漠25 分钟前
基础自动化系统的特点
运维·自动化
我言秋日胜春朝★33 分钟前
【Linux】进程地址空间
linux·运维·服务器
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.1 小时前
Linux|环境变量
linux·运维·服务器
yunfanleo1 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m51271 小时前
LinuxC语言
java·服务器·前端
运维-大白同学2 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
烦躁的大鼻嘎2 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师2 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器