ros2-6.4.4 两轮差速控制机器人的问题

devtools/2025/1/17 5:06:09/

遇到一个问题。本节开始尝试在gazebo中仿真上一节构建的模型。

先贴一下现象,启动launch之后,gazebo显示正常移动。但是在rviz中查看就是有问题的:

fixedframe:选择odom.显示添加机器人,按topic 选择。提示:

no transform from left wheel to odom

No transform from [right_wheel_link] to [odom]

可以通过键盘控制小车移动,对比视频:不能显示小车两个轮子TF转动。

如果 fixedframe切回base_link ,在rviz显示是正常的,轮子部件都在。

gazebo显示正常

TF tree对比视频不太一样,视频里面左右轮子right_wheel_link都是在 base_footprint下。

 

关键代码:

启动脚本

import launch
import launch.launch_description_sources
import launch_ros
from ament_index_python.packages import get_package_share_directorydef generate_launch_description():# 获取功能包默认路径urdf_tutorial_path = get_package_share_directory('fishbot_description')default_model_path = urdf_tutorial_path + '/urdf/fishbot/fish_robot.urdf.xacro'default_world_path = urdf_tutorial_path + '/world/custom_room.world'# 为 Launch 声明参数action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(name='model', default_value=str(default_model_path),description='加载模型文件的绝对路径')# 获取文件内容生成新的参数robot_description = launch_ros.parameter_descriptions.ParameterValue(launch.substitutions.Command(['xacro ', launch.substitutions.LaunchConfiguration('model')]),value_type=str)# 状态发布节点robot_state_publisher_node = launch_ros.actions.Node(package='robot_state_publisher',executable='robot_state_publisher',parameters=[{'robot_description': robot_description}])# 通过 IncludeLaunchDescription 包含另外一个 launch 文件launch_gazebo = launch.actions.IncludeLaunchDescription(launch.launch_description_sources.PythonLaunchDescriptionSource([get_package_share_directory('gazebo_ros'), '/launch', '/gazebo.launch.py']),# 传递参数launch_arguments=[('world', default_world_path),('verbose','true')])#请求gazebo 加载机器人action_spawn_entity = launch_ros.actions.Node(package= 'gazebo_ros',executable='spawn_entity.py',arguments=['-topic', '/robot_description','-entity', 'fishbot'])return launch.LaunchDescription([action_declare_arg_mode_path,robot_state_publisher_node,launch_gazebo,action_spawn_entity,])

定义模型

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="fishbot"><xacro:include filename="$(find fishbot_description)/urdf/fishbot/base.urdf.xacro" /><!-- 传感器组件 --><xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/imu.urdf.xacro" /><xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/laser.urdf.xacro" /><xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/camera.urdf.xacro" /><!-- 执行器组件 --><xacro:include filename="$(find fishbot_description)/urdf/fishbot/actuator/wheel.urdf.xacro" /><xacro:include filename="$(find fishbot_description)/urdf/fishbot/actuator/caster.urdf.xacro" /><!--gazebo插件--><xacro:include filename="$(find fishbot_description)/urdf/fishbot/plugins/gazebo_control_plugin.xacro" /><xacro:base_xacro length="0.12" radius="0.1" /><!-- 传感器 --><xacro:imu_xacro xyz="0 0 0.02" /><xacro:laser_xacro xyz="0 0 0.10" /><xacro:camera_xacro xyz="0.10 0 0.075" /><!-- 执行器主动轮+从动轮 --><xacro:wheel_xacro wheel_name="left_wheel" xyz="0 0.10 -0.06" /><xacro:wheel_xacro wheel_name="right_wheel" xyz="0 -0.10 -0.06" /><xacro:caster_xacro caster_name="front_caster" xyz="0.08 0.0 -0.076" /><xacro:caster_xacro caster_name="back_caster" xyz="-0.08 0.0 -0.076" /><xacro:gazebo_control_plugin />
</robot>

轮子定义:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"><xacro:include filename="$(find fishbot_description)/urdf/fishbot/common_inertia.xacro" /><xacro:macro name="wheel_xacro" params="wheel_name xyz"><link name="${wheel_name}_link"><visual><origin xyz="0 0 0" rpy="1.57079 0 0" /><geometry><cylinder length="0.04" radius="0.032" /></geometry><material name="yellow"><color rgba="1.0 1.0 0.0 0.8"/></material></visual><collision><origin xyz="0 0 0" rpy="1.57079 0 0" /><geometry><cylinder length="0.04" radius="0.032" /></geometry><material name="yellow"><color rgba="1.0 1.0 0.0 0.8"/></material></collision><xacro:cylinder_inertia m="0.1" h="0.04" r="0.032"/></link><gazebo reference="${wheel_name}_link"><mu1 value="20.0" /><mu2 value="20.0" /><kp value="1000000000.0" /><kd value="1.0" /></gazebo><joint name="${wheel_name}_joint" type="continuous"><parent link="base_link" /><child link="${wheel_name}_link" /><origin xyz="${xyz}" /><!--轮子绕那个轴旋转--><axis xyz="0 1 0" /></joint></xacro:macro>
</robot>

差速控制:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"><xacro:macro name="gazebo_control_plugin"><gazebo><plugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'><ros><namespace>/</namespace><remapping>cmd_vel:=cmd_vel</remapping><remapping>odom:=odom</remapping></ros><update_rate>30</update_rate><!-- wheels --><left_joint>left_wheel_joint</left_joint><right_joint>right_wheel_joint</right_joint><!-- kinematics --><wheel_separation>0.2</wheel_separation><wheel_diameter>0.064</wheel_diameter><!-- limits --><max_wheel_torque>20</max_wheel_torque><max_wheel_acceleration>1.0</max_wheel_acceleration><!-- output --><publish_odom>true</publish_odom><publish_odom_tf>true</publish_odom_tf><publish_wheel_tf>true</publish_wheel_tf><odometry_frame>odom</odometry_frame><robot_base_frame>base_footprint</robot_base_frame></plugin></gazebo></xacro:macro>
</robot>


http://www.ppmy.cn/devtools/151179.html

相关文章

CNCF云原生计算基金会

CNCF&#xff0c;全称为云原生计算基金会&#xff08;Cloud Native Computing Foundation&#xff09;&#xff0c;成立于2015年&#xff0c;是一个隶属于Linux基金会的非营利组织。CNCF旨在促进和支持开源技术的发展&#xff0c;特别是那些支持云原生&#xff08;cloud native…

高斯数据库 Shell 脚本:批量执行 SQL 文件

高斯数据库 Shell 脚本&#xff1a;批量执行 SQL 文件 优化后的高斯数据库 Shell 脚本 #!/bin/bash# 数据库信息文件路径 DB_INFO_FILE"db_info.txt"# 要执行的 SQL 文件 SQL_FILE"create_table.sql"# 检查数据库信息文件是否存在 if [[ ! -f "$DB_…

ubuntu Android : adb logcat 过滤多个log

指定字符串的log&#xff0c;可以用下面的形式&#xff0c;注意加-E和单引号&#xff1a; adb shell " logcat | grep -E strings1|strings2 " 参考&#xff1a;Android : adb logcat 过滤多个log 用adb shell “ logcat | grep -E ‘strings1| strings2 ‘ “ 形…

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想&#xff1a;数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架&#xff1a; create-react-app &#xff0c;目前使用它安装默认是19版本&#xff0c;我们这里降为18…

Redis雪崩以及解决方法

概述&#xff1a; Redis中大量缓存数据在同一时间过期&#xff08;失效&#xff09;或者Redis故障宕机时&#xff0c;如果此时有大量的用户请求&#xff0c;都无法在Redis中处理&#xff0c;于是全部请求都直接访问数据库&#xff0c;从而导致数据库的压力骤增&#xff0c;严重…

构建高效的进程池:深入解析C++实现

构建高效的进程池&#xff1a;深入解析C实现 在高性能计算和服务器应用中&#xff0c;进程池&#xff08;Process Pool&#xff09;是一种重要的设计模式。它通过预先创建和维护一定数量的子进程来处理大量的任务请求&#xff0c;从而避免频繁地创建和销毁进程带来的开销。本文…

Ubuntu无法进入图像化界面

目录 1.情况介绍 2.安装ubuntu-session 3.重装显卡驱动 4.后记 1.情况介绍 使用timeshift创建系统快照的时候中途暂停&#xff0c;然后重启系统&#xff0c;系统无法进入图形化界面&#xff0c;出错的现象如下。 2.安装ubuntu-session 键盘操作&#xff1a;CtrlAltF2&#…

4种革新性AI Agent工作流设计模式全解析

导读:AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不仅接收任务,还自主制定和执行工作计划,并在过程中不断自我评估和调整,类似于人类在创造性任务中的思考和修正过程。AI Agent的四种关键设计模式是实现高效执行复杂任务的基础,共同构成了AI Agent的能力框…