当前位置: 首页 > 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

结果演示

前轮转向,后轮驱动

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

http://www.lryc.cn/news/497488.html

相关文章:

  • Blender均匀放缩模型
  • Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
  • 【AI工具】强大的AI编辑器Cursor详细使用教程
  • DApp开发与APP开发的五大区别
  • 哪款云手机适合多开?常用云手机功能对比
  • Python几种常用数据结构(重制版)
  • C++ 游戏开发:开启游戏世界的编程之旅(2)
  • 用 Python 做数据分析需要掌握哪些基础?
  • UE5 像素流进行内网https证书创建
  • Envoy-istio
  • CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
  • 【数据结构与算法】排序算法(上)——插入排序与选择排序
  • Linux操作系统性能优化
  • iOS与Windows间传文件
  • 在数据库设计中同步冗余字段的思考与实践
  • Qt 带数据库功能的项目部署之后,数据库无法打开问题解决方法
  • 汇编语言学习-二
  • 【嘟嘟早教卡】 小程序源码分享带后台管理
  • JavaEE-经典多线程样例
  • 从 HTML 到 CSS:开启网页样式之旅(五)—— CSS盒子模型
  • 数据分析(一): 掌握STDF 掌握金钥匙-码农切入半导体的捷径
  • HCIA-openGauss_1_4基本功能介绍
  • 医学临床机器学习中算法公平性与偏差控制简析
  • Leetcode打卡:棋盘上有效移动组合的数目
  • 生产看板到底在看什么?
  • 12,攻防世界simple_php
  • 解决Jupyter Notebook无法转化为Pdf的问题(基于Typora非常实用)
  • 齐护机器人ModbusRTU RS485转TTL通信模块与ESP32 Arduino通信可Mixly的图形化编程Scratch图形化编程
  • python学习笔记15 python中的类
  • PMP–一、二、三模、冲刺–分类–10.沟通管理