当前位置: 首页 > news >正文

四轮阿克曼(前轮转向、后轮驱动)车子仿真控制

目录

  • 写在前面的话
  • 调用 libgazebo_ros_ackermann_drive.so 插件
    • 属性介绍
    • 补充 steering_wheel_joint 配置
    • 键盘控制命令
  • 结果演示

写在前面的话

这里增加一个四轮阿克曼(前轮转向、后轮驱动)车子仿真控制的版本,使用的事gazebo的插件

参考资料:gazebo plugins文档

调用 libgazebo_ros_ackermann_drive.so 插件

这段代码要添加到车子描述的xacro文件

属性介绍

  • plugin 声明调用的插件,name可以随便
  • ros 声明环境和话题映射
  • update_rate 更新频率
  • 底盘车轮控制
    • front_left_joint 这些跟自身的车子进行匹配就行,控制车轮转动的
    • left_steering_joint 这是控制车轮转向的
    • steering_wheel_joint 这个不是一个真正的轮子,类似是车子的方向盘,需要另外添加,后面有代码补充
  • max_steer 车轮最大转向角度,大约是37度(弧度制=0.6458)
  • max_steering_angle 方向盘(steering_wheel_joint)的最大转向角度,大概一圈半(弧度制=7.85)
  • publish_wheel_tf 官方代码是true,但github上很多代码是false
  • robot_base_frame 机器人的基准轴
  • odometry_frame 里程计odom的链接
  <gazebo><plugin name="gazebo_ros_ackermann_drive" filename="libgazebo_ros_ackermann_drive.so"><ros><namespace>/car_nav2</namespace><remapping>cmd_vel:=cmd_demo</remapping><remapping>odom:=odom_demo</remapping><remapping>distance:=distance_demo</remapping></ros><update_rate>100.0</update_rate><!-- wheels --><front_left_joint>left_front_wheel_joint</front_left_joint><front_right_joint>right_front_wheel_joint</front_right_joint><rear_left_joint>left_back_wheel_joint</rear_left_joint><rear_right_joint>right_back_wheel_joint</rear_right_joint><left_steering_joint>left_front_orient_joint</left_steering_joint><right_steering_joint>right_front_orient_joint</right_steering_joint><steering_wheel_joint>virtual_steering_wheel_joint</steering_wheel_joint><!-- Max absolute steer angle for tyre in radians--><!-- Any cmd_vel angular z greater than this would be capped --><max_steer>0.6458</max_steer><!-- Max absolute steering angle of steering wheel --><max_steering_angle>7.85</max_steering_angle><!-- Max absolute linear speed in m/s --><max_speed>5</max_speed><!-- PID tuning --><left_steering_pid_gain>1500 0 1</left_steering_pid_gain><left_steering_i_range>0 0</left_steering_i_range><right_steering_pid_gain>1500 0 1</right_steering_pid_gain><right_steering_i_range>0 0</right_steering_i_range><linear_velocity_pid_gain>1000 0 1</linear_velocity_pid_gain><linear_velocity_i_range>0 0</linear_velocity_i_range><!-- output --><publish_odom>true</publish_odom><publish_odom_tf>true</publish_odom_tf><publish_wheel_tf>false</publish_wheel_tf><publish_distance>true</publish_distance><odometry_frame>odom_demo</odometry_frame><robot_base_frame>base_link</robot_base_frame></plugin></gazebo>

补充 steering_wheel_joint 配置

需要把这段代码添加到车子描述的xacro文件中

  • virtual_steer_link 可以看到都是虚的,惯性啥的都是0,也就是不存在的
  • virtual_steering_wheel_joint 这个设置是前轮的转向的中间位置,z轴高度随意,我这里两个左右两个车轮分别是0.22654 0.5868 -0.0680.22654 -0.5868 -0.068,跟 base_link 绑定上即可
  <!-- Virtual Steering wheel --><link name="virtual_steer_link"><visual><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" /><geometry><box size="0.01 0.15 0.075" /></geometry><material name=""><color rgba="1.0 1.0 0.0 1" /></material></visual><inertial>  <!-- Gazebo won't show this link without this inertial mass --><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" /><mass value="0.001" /><inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" /></inertial></link><joint name="virtual_steering_wheel_joint" type="revolute"><origin xyz="0.22654 0 0" rpy="0.0 0.0 0.0" /><parent link="base_link" /><child link="virtual_steer_link" /><axis xyz="0 0 -1" /><limit lower="-3" upper="3" effort="200" velocity="10" /></joint>

键盘控制命令

注意,这里需要进行cmd_vel的进行映射,因为我们在调用 gazebo 插件的时候进行了 remapping 映射,可以查看上面的描述,同时要加上命名空间(namespace)

ros2 run teleop_twist_keyboard teleop_twist_keyboard cmd_vel:=/car_nav2/cmd_demo

结果演示

前轮转向,后轮驱动

在这里插入图片描述
在这里插入图片描述

相关文章:

四轮阿克曼(前轮转向、后轮驱动)车子仿真控制

目录 写在前面的话调用 libgazebo_ros_ackermann_drive.so 插件属性介绍补充 steering_wheel_joint 配置键盘控制命令 结果演示 写在前面的话 这里增加一个四轮阿克曼&#xff08;前轮转向、后轮驱动&#xff09;车子仿真控制的版本&#xff0c;使用的事gazebo的插件 参考资料…...

Blender均匀放缩模型

解决办法&#xff1a; 首先选中模型&#xff0c;按下“s”键&#xff0c;如下图所示&#xff0c;此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值&#xff0c;再按回车键Enter&#xff0c;模型会根据你该数值进行均匀放缩 指定放大2倍结果——...

Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【AI工具】强大的AI编辑器Cursor详细使用教程

目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日&#xff0c;由四名麻省理工学院&#xff08;MIT&#xff09;本科生共同创立的Anysphere公司宣布&#xff0c;其开发的AI代码编辑器Cursor在成立短短两年…...

DApp开发与APP开发的五大区别

随着比特币与区块链技术的不断发展&#xff0c;DApp应用会逐渐成为主流。与APPAPP相比&#xff0c;DApp有许多不同之处&#xff0c;尤其是在架构、数据存储、用户隐私等方面。本文将通过五大关键点&#xff0c;深入探讨DApp开发与APP开发之间的主要区别。 1. 后端架构&#xff…...

哪款云手机适合多开?常用云手机功能对比

在全球化和数字化时代&#xff0c;云手机以其独特的灵活性和高效性&#xff0c;成为多账号运营和数字营销的热门工具。云手机能够解决传统设备管理的诸多痛点&#xff0c;例如账号关联、硬件成本高等问题。本文将为您推荐多款优质云手机品牌&#xff0c;帮助您选择最适合的工具…...

Python几种常用数据结构(重制版)

一、列表 [List] 定义&#xff1a;有序可重复的数据集合。示例&#xff1a;my_list [element1, element2, element3]增加元素方法&#xff1a; append()&#xff1a;在列表末尾增加单个元素&#xff08;列表特有方法&#xff09;&#xff0c;例如 my_list.append(element)。e…...

C++ 游戏开发:开启游戏世界的编程之旅(2)

三、游戏输入处理 &#xff08;一&#xff09;键盘输入处理 在游戏中&#xff0c;玩家通过键盘输入来控制角色的行动。我们需要在游戏循环中不断检测键盘事件&#xff0c;并根据不同的按键按下或松开状态来执行相应的操作。例如&#xff0c;在 SDL 中&#xff0c;可以这样处理…...

用 Python 做数据分析需要掌握哪些基础?

用 Python 做数据分析&#xff0c;需要掌握以下几个基础方面&#xff1a; 1. Python 编程基础 语法基础&#xff1a;变量、数据类型&#xff08;如字符串、整数、浮点数、布尔值&#xff09;、条件语句&#xff08;if-else&#xff09;、循环&#xff08;for、while&#xff0…...

UE5 像素流进行内网https证书创建

确定证书需求 内网 HTTPS 通信通常需要以下内容&#xff1a; 自签名证书&#xff08;适用于内网环境&#xff0c;不需要通过公开的证书颁发机构 CA&#xff09; 或者通过内部的企业 CA 签发的证书&#xff08;更安全&#xff09;。 生成自签名证书 使用工具&#xff08;如 Ope…...

Envoy-istio

最近研究envoy-istio&#xff0c;发现这个博客&#xff0c;觉得很不错&#xff0c;这里记录一下 envoy-istio介绍 envoy-istio - 随笔分类 - yaowx - 博客园 envoy部分七&#xff1a;envoy的http流量管理基础 envoy部分六&#xff1a;envoy的集群管理 envoy部分五&#xff…...

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8&#xff0c;支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图&#xff0c;确保页面在不同设备上自适应显示 --&…...

【数据结构与算法】排序算法(上)——插入排序与选择排序

文章目录 一、常见的排序算法二、插入排序2.1、直接插入排序2.2、希尔排序( 缩小增量排序 ) 三、选择排序3.1、直接选择排序3.2、堆排序3.2.1、堆排序的代码实现 一、常见的排序算法 常见排序算法中有四大排序算法&#xff0c;第一是插入排序&#xff0c;二是选择排序&#xff…...

Linux操作系统性能优化

Linux操作系统性能优化 1. TCP连接出现大量ESTABLISHED连接解决方法 1. TCP连接出现大量ESTABLISHED连接解决方法 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于…...

iOS与Windows间传文件

想用数据线从 windows 手提电脑传文件入 iPhone&#xff0c;有点迂回。 参考 [1]&#xff0c;要在 windows 装 Apple Devices。装完、打开、插线之后会检测到手机&#xff0c;界面&#xff1a; 点左侧栏「文件」&#xff0c;不是就直接可以传&#xff0c;而是要通过某个应用传…...

在数据库设计中同步冗余字段的思考与实践

目录 前言1. 冗余字段设计的背景与场景1.1 场景描述1.2 冗余字段的必要性 2. 冗余字段设计的优点2.1 提高查询效率2.2 简化应用逻辑 3. 冗余字段设计的缺点与挑战3.1 数据不一致问题3.2 更新开销增加3.3 数据冗余占用存储空间 4. 如何同步更新冗余字段4.1 手动更新方式4.2 使用…...

Qt 带数据库功能的项目部署之后,数据库无法打开问题解决方法

前言&#xff1a;最近项目添加了sqlite数据库功能&#xff0c;在qtcreator直接运行时&#xff0c;打开数据库正常&#xff0c;但是部署之后&#xff0c;发现数据库打开会失败&#xff0c;提示“driver not loaded”错误&#xff0c;后来发现是因为sqldrivers文件夹目录不对导致…...

汇编语言学习-二

好吧&#xff0c;已经隔了两天&#xff0c;下完班看了两天&#xff0c;在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统&#xff1b; 这个第二天应该是称为第二章更为合适&#xff0c;目前第二章已经看完&#xff0c;基本的命令也是敲了敲&#xff1b; 下面就进行一…...

【嘟嘟早教卡】 小程序源码分享带后台管理

【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成&#xff0c;后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片&#xff0c;基本大部分家庭都买过认知卡片&#xff0c;我按照…...

JavaEE-经典多线程样例

文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...