当前位置: 首页 > 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) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...