四轮阿克曼(前轮转向、后轮驱动)车子仿真控制
目录
- 写在前面的话
- 调用 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.068和0.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 配置键盘控制命令 结果演示 写在前面的话 这里增加一个四轮阿克曼(前轮转向、后轮驱动)车子仿真控制的版本,使用的事gazebo的插件 参考资料…...
Blender均匀放缩模型
解决办法: 首先选中模型,按下“s”键,如下图所示,此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值,再按回车键Enter,模型会根据你该数值进行均匀放缩 指定放大2倍结果——...
Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【AI工具】强大的AI编辑器Cursor详细使用教程
目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日,由四名麻省理工学院(MIT)本科生共同创立的Anysphere公司宣布,其开发的AI代码编辑器Cursor在成立短短两年…...
DApp开发与APP开发的五大区别
随着比特币与区块链技术的不断发展,DApp应用会逐渐成为主流。与APPAPP相比,DApp有许多不同之处,尤其是在架构、数据存储、用户隐私等方面。本文将通过五大关键点,深入探讨DApp开发与APP开发之间的主要区别。 1. 后端架构ÿ…...
哪款云手机适合多开?常用云手机功能对比
在全球化和数字化时代,云手机以其独特的灵活性和高效性,成为多账号运营和数字营销的热门工具。云手机能够解决传统设备管理的诸多痛点,例如账号关联、硬件成本高等问题。本文将为您推荐多款优质云手机品牌,帮助您选择最适合的工具…...
Python几种常用数据结构(重制版)
一、列表 [List] 定义:有序可重复的数据集合。示例:my_list [element1, element2, element3]增加元素方法: append():在列表末尾增加单个元素(列表特有方法),例如 my_list.append(element)。e…...
C++ 游戏开发:开启游戏世界的编程之旅(2)
三、游戏输入处理 (一)键盘输入处理 在游戏中,玩家通过键盘输入来控制角色的行动。我们需要在游戏循环中不断检测键盘事件,并根据不同的按键按下或松开状态来执行相应的操作。例如,在 SDL 中,可以这样处理…...
用 Python 做数据分析需要掌握哪些基础?
用 Python 做数据分析,需要掌握以下几个基础方面: 1. Python 编程基础 语法基础:变量、数据类型(如字符串、整数、浮点数、布尔值)、条件语句(if-else)、循环(for、while࿰…...
UE5 像素流进行内网https证书创建
确定证书需求 内网 HTTPS 通信通常需要以下内容: 自签名证书(适用于内网环境,不需要通过公开的证书颁发机构 CA) 或者通过内部的企业 CA 签发的证书(更安全)。 生成自签名证书 使用工具(如 Ope…...
Envoy-istio
最近研究envoy-istio,发现这个博客,觉得很不错,这里记录一下 envoy-istio介绍 envoy-istio - 随笔分类 - yaowx - 博客园 envoy部分七:envoy的http流量管理基础 envoy部分六:envoy的集群管理 envoy部分五ÿ…...
CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8,支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图,确保页面在不同设备上自适应显示 --&…...
【数据结构与算法】排序算法(上)——插入排序与选择排序
文章目录 一、常见的排序算法二、插入排序2.1、直接插入排序2.2、希尔排序( 缩小增量排序 ) 三、选择排序3.1、直接选择排序3.2、堆排序3.2.1、堆排序的代码实现 一、常见的排序算法 常见排序算法中有四大排序算法,第一是插入排序,二是选择排序ÿ…...
Linux操作系统性能优化
Linux操作系统性能优化 1. TCP连接出现大量ESTABLISHED连接解决方法 1. TCP连接出现大量ESTABLISHED连接解决方法 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于…...
iOS与Windows间传文件
想用数据线从 windows 手提电脑传文件入 iPhone,有点迂回。 参考 [1],要在 windows 装 Apple Devices。装完、打开、插线之后会检测到手机,界面: 点左侧栏「文件」,不是就直接可以传,而是要通过某个应用传…...
在数据库设计中同步冗余字段的思考与实践
目录 前言1. 冗余字段设计的背景与场景1.1 场景描述1.2 冗余字段的必要性 2. 冗余字段设计的优点2.1 提高查询效率2.2 简化应用逻辑 3. 冗余字段设计的缺点与挑战3.1 数据不一致问题3.2 更新开销增加3.3 数据冗余占用存储空间 4. 如何同步更新冗余字段4.1 手动更新方式4.2 使用…...
Qt 带数据库功能的项目部署之后,数据库无法打开问题解决方法
前言:最近项目添加了sqlite数据库功能,在qtcreator直接运行时,打开数据库正常,但是部署之后,发现数据库打开会失败,提示“driver not loaded”错误,后来发现是因为sqldrivers文件夹目录不对导致…...
汇编语言学习-二
好吧,已经隔了两天,下完班看了两天,在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统; 这个第二天应该是称为第二章更为合适,目前第二章已经看完,基本的命令也是敲了敲; 下面就进行一…...
【嘟嘟早教卡】 小程序源码分享带后台管理
【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成,后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片,基本大部分家庭都买过认知卡片,我按照…...
JavaEE-经典多线程样例
文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
《架构即未来》笔记
思维导图 第一部分:可扩展性组织的人员配置 第二部分:构建可扩展的过程 第三部分:可扩展的架构方案 第四部分:其他的问题和挑战 资料 问软件工程研究所: https://www.sei.cmu.edu/ AKF公司博客: http://www.akfpart…...
django paramiko 跳转登录
在使用Django框架结合Paramiko进行SSH远程操作时,通常涉及到自动化脚本的执行,比如远程服务器上的命令执行、文件传输等。如果你的需求是“跳转登录”,即在登录远程服务器后,再通过该服务器的SSH连接跳转到另一台服务器࿰…...
