您现在的位置是:首页 > 正文

Autoware pure_pursuit节点适配差速底盘

2024-02-01 05:50:44阅读 2

Autoware pure_pursuit节点输出的话题是 "/twist_raw", 需要转换为我们小车底盘控制速度的话题,我这里直接用"/cmd_vel"。主要任务是消息格式的转换,下面详细介绍。

使用 rostopic info 指令查看话题 /twist_raw的消息格式,查看结果为 geometry_msgs/TwistStamped 显然于我们常用的"/cmd_vel" 的消息格式不一样,cmd_vel的消息格式为geometry_msgs/Twist

使用 rosmsg show查看geometry_msgs/TwistStamped 消息的具体格式,显示如下:

 

创建一个功能包转换消息格式,具体如下:

# 创建功能包

mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_creat_pkg vel_transform roscpp geometry_msgs std_msgs

// 消息格式转换的源码

#include <ros/ros.h>
#include <std_msgs/Float32.h>
#include <geometry_msgs/TwistStamped.h>
#include <geometry_msgs/Twist.h>

ros::Publisher twist_pub_;
ros::Subscriber  twist_sub_;

void twistCmdCallback(const geometry_msgs::TwistStampedConstPtr& msg)
{
    geometry_msgs::Twist twist = msg->twist;
    twist_pub_.publish(twist);

    ROS_INFO("Transform Success !");
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "twist_transform");
    ros::NodeHandle nh;
    twist_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
    twist_sub_ = nh.subscribe<geometry_msgs::TwistStamped>("twist_raw", 1, twistCmdCallback);

    ros::spin();
    return 0;
}

在cmakelists.txt文件中配置下功能包即可

# 这里我的消息转换源码的文件名为twist_transform.cpp

add_executable(twist_transform src/twist_transform.cpp)

target_link_libraries(twist_transform
  ${catkin_LIBRARIES}
)

经测试,pure pursuit在差速底盘上的运行还算可以。

网站文章

  • 调用API

    3.编写API请求:编写代码向API发送请求,包括所需参数和API密钥等。使用最常见的请求方法是HTTP请求,包括GET、POST、PUT、DELETE等。4.解析API响应:API会返回响应数据,需...

    2024-02-01 05:50:30
  • Codeforces 1221E. Game With String

    传送门首先每一段连续的 $...$ 都是互不影响的,所以可以一段段考虑考虑最简单的情况,此时每一段都大于等于 $a$ 并且小于 $2b$ ,那么每一段都只能放一次,胜负直接根据段数即可得到答案考虑如果存在段长小于 $a$ 却大于等于 $b$ 的情况,此时后手可以随时放在那个位置,当然也可以不放,这样胜负就被掌握在后手手里(他可以随时选择交换先后手)所以对于上面那一种情况,...

    2024-02-01 05:50:23
  • spring boot 整合sharding jdbc 遇到的一些问题以及实例源码

    spring boot 整合sharding jdbc 遇到的一些问题以及实例源码

    文章目录一、整合1.pom.xml 新增依赖(这里默认你项目中已经有了Mysql的依赖)2.配置3.遇到的问题“The bean 'dataSource', defined in class path...

    2024-02-01 05:49:55
  • mysqld_safe Directory &#39;/var/lib/mysql&#39; for UNIX socket file don&#39;t exists

    原因:mysql找不着socket文件。 解决办法: 1、修改mysql配置文件my.cnf中[mysqld]下的socket配置项。效果如下。 [mysqld] socket = /tmp/mysql.sock 2、终极解决办法:重启服务器。 ...

    2024-02-01 05:49:47
  • 洛谷 P1618

    https://www.luogu.org/problemnew/show/P1618 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。 //感谢黄小U饮品完善题意 输入输出格式 输入格式: 三个数,A B C。 输出格式: 若干行,每行3个数字。按照每...

    2024-02-01 05:49:41
  • 设计模式之责任链模式

    设计模式之责任链模式

    不同级别的权限检查由不同的权限处理者来执行,如果某个处理者无法处理权限请求,则请求将被传递给下一个处理者。让我们想象一个问题解决系统,根据问题的复杂程度,系统中的不同专家级别的工程师会负责处理不同级别...

    2024-02-01 05:49:13
  • 浅谈MIL、SIL、PIL、HIL

    浅谈MIL、SIL、PIL、HIL

    MBD开过过程中,经常会接触到MIL、SIL、PIL、HIL,下文将从定义着手,将他们区别开来。 定义: MIL:Model in loop, 验证控制算法模型是否满足功能需求 SIL: Software in loop, 在PC上验证模型是否与代码功能一致 PIL:Processor in loop, 在目标处理器上验证模型是否与代码功能一致 HIL:Hardw

    2024-02-01 05:49:07
  • Python(三)微信公众号开发

    Python(三)微信公众号开发

    ps:暂未完善,先做记录。本文核心讲外网穿透及微信Token验证 阅读 基本开发流程 申请个人公众号-订阅号 微信公众平台https://mp.weixin.qq.com 自定义菜单 微信公众平台当然...

    2024-02-01 05:49:01
  • 数据结构 | 交换排序

    数据结构 | 交换排序

    交换排序(包括冒泡排序、快速排序)的C语言实现

    2024-02-01 05:48:32
  • stanford corenlp命名实体识别(基于python)

    stanford corenlp命名实体识别(基于python)

    很多童鞋在用stanford-core-nlp进行命名实体识别时遇到了各种问题,在此本人根据已有经验讲述如何成功利用stanford工具进行命名实体识别处理。 1. 环境安装 需要用到的有java_j...

    2024-02-01 05:48:27