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

相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟2 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome