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

相关推荐
为思念酝酿的痛6 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪6 小时前
什么是docker
运维·docker·容器
隔窗听雨眠6 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
人还是要有梦想的7 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通7 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops7 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush47 小时前
嵌入式linux学习记录二
linux·运维·学习
9分钟带帽7 小时前
linux_通过NFS挂载远程服务器的硬盘
linux·服务器
weixin_468466858 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷8 小时前
Nginx自签名-图形化工具 XCA
运维·nginx