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

ros2 control笔记(还没学完)

1.主要概念:

controller_manager

controller

hardware_interface

resource_manager

不管被控制的设备怎么变化,读nav2数据和根据实际差速轮计算机器人数据给nav2都需要进行,中间部分会根据实体机器人而变化

ros2 control将其耦合性降低,左右两部分之间影响降低,提高了复用性。

2.调用controller和hareware_interface

总体思路:添加hardware resource(xacro文件)-->把hardware resource添加到模型里面(机器人xacro)-->定义controller manager参数文件(yaml文件)-->初始化manager(改第一个xacro文件gazebo路径,也可以后面放到launch文件写)-->编写launch文件,在里面添加要生成的controller

ps:hareware resource指的是机器人上可被控制器使用的关节/接口资源

bbot_demo: https://github.com/WMGIII/bbot_demo

用ros2 control框架调用gazebo,hareware_interface需要读取hareware resource,这个resource需要在urdf文件里面进行声明。因此第一步是新增xacro文件声明ros2_control。

(1)编写xacro文件

command_interface和state_interface的结构:需要控制的节点或joint名字/interface名字

* 一般来说interface的name可以随便取,但是gazebo_ros2_control这个hareware限制了name只能是velocity/position,如果是自己设置的可以任意取。

* ros2 control用于gazebo还需要加标签添加gazebo库,在下面标出来了。主要作用有三个:

1.gazebo和hardware_interface交互:把上面joint标签的内容映射到gazebo里面

2.接收robot state publisher发布的urdf模型:显示模型

3.启动controller manager:controllers都是由他管理的,因为要初始化controller manager所以要传一个初始化参数,参数是个yaml文件(因为还没写所以parameter空着)

<?xml version="1.0"?> <robot xmlns:xacro="http://www.ros.org/wiki/xacro"> <xacro:macro name="bbot_ros2_control"> <ros2_control name="bbot_hardware_interface" type="system"> <hardware> <plugin>gazebo_ros2_control/GazeboSystem</plugin> </hardware> <joint name="left_wheel_joint"> <!--名字必须和urdf的一样--> <command_interface name="velocity"/> <!--还可以传参数 <param name="min">-10</param> <param name="max">10</param> --> <state_interface name="position"/> <state_interface name="velocity"/> </joint> <joint name="right_wheel_joint"> <command_interface name="velocity"/> <state_interface name="position"/> <state_interface name="velocity"/> </joint> </ros2_control> <!--gazebo额外的--> <gazebo> <plugin filename="libgazebo_ros2_control.so" name="gazebo_ros2_control"> <parameters>我不到啊</parameters> </plugin> </gazebo> </xacro:macro> </robot>

(2)把刚刚写的xacro文件放到机器人模型xacro文件里面

<?xml version="1.0" encoding="utf-8"?> <robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="bbot_robot"> <xacro:include filename="bbot_description.xacro"/> <!--新加的--> <xacro:include filename="bbot_ros2_control.xacro"/> <xacro:bbot_ros2_control/> <!----> </robot>

(3)接下来写yaml文件

launch文件启动controller:为了降低耦合性这里新建了个功能包bbot_bringup,里面有launch和config,然后进入config开始写yaml文件(bbot_controllers.yaml)

controller_manager: ros__parameters: update_rate: 30 #暂时随便写 use_sim_time:true #使用仿真时间 # 告诉controller有哪些manager可以加载 # 差速控制器,这里名字随便取 diff_cont: type: diff_drive_controller/DiffDriveController #类,即加载名字为diff_cont的类 # 关节状态发布器,每个controller都要写 joint_broad: type: joint_state_broadcaster/JointStateBroadcaster #和joint state publisher类似 diff_cont: ros__parameter: #两个下划线 publish_rate: 50.0 #必须是浮点数 base_frame_id: base_link #根据实际来写 left_wheel_names: ['left_wheel_joint'] #根据实际urdf名字来写 right_wheel_names: ['right_wheel_joint'] wheel_separation: 0.35 #轮距 wheel_radius: 0.05 #半径 use_stamped_vel: false #就这么写

写完了这个yaml记得在之前那改xacro路径:

<gazebo> <plugin filename="libgazebo_ros2_control.so" name="gazebo_ros2_control"> <parameters>$(find bbot_bringup)/config/bbot_controllers.yaml</parameters> </plugin> </gazebo>

(4)编写launch文件(bbot_bringup.launch.py)

import os from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch.actions import IncludeLaunchDescription from launch.launch_description_sources import PythonLaunchDescriptionSource from launch_ros.actions import Node def generate_launch_description(): package_name = 'bbot_description' bbot = IncludeLaunchDescription( PythonLaunchDescriptionSource([os.path.join( get_package_share_directory(package_name), 'launch', 'bbot.launch.py' )]), launch_arguments={'use_sim_time': 'true'}.items() ) # Include the Gazebo launch file, provided by the gazebo_ros package gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource([os.path.join( get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py' )]) ) # Run the spawner node from the gazebo_ros package. The entity name doesn't really # matter if you only have a single robot. spawn_entity = Node( package='gazebo_ros', executable='spawn_entity.py', arguments=[ '-topic', 'robot_description', '-entity', 'bbot' ], output='screen' ) #本来还要加载joint state publisher,但是前面那个joint_state_controller实现了,所以不用 #接下来写controller manager :因为我们在xacro里面加了gazebo plugin 这里自动生成了 #controllers joint_broad_spawner = Node( package="controller_manager", executable="spawner", arguments=["joint_state"], #名字要和yaml里面controllers名字一样 ) diff_drive_spawner = Node( package="controller_manager", executable="spawner", arguments=["diff_drive"], ) return LaunchDescription([ bbot, gazebo, spawn_entity, diff_drive_spawner, joint_broad_spawner, ])

3.ros_control其他参数(hardware resource)

还有sensor和gpio标签,都是和joint平级的

<sensor name="imu_sensor"> <state_interface name="orientation.x"/> <!--只可读不可写--> </sensor> <gpio name="vacuum_gripper"> <command_interface name="suction_on"/> <state_interface name="pressure"/> </gpio>

type也可以有其他参数:

sensor:这样下面只能写一个sensor标签,joint那些不可以,sensor也只能写一个

actuator:只能写一个joint

所以一般就写system

http://www.zskr.cn/news/1357800.html

相关文章:

  • 3步解锁GTA V无限可能:ScriptHookV脚本注入核心技术深度解析
  • 【RAG】【retrievers11】递归检索器 + 节点引用 + Braintrust评估
  • 2026 全国翻译公司实力排行榜:专业、合规、高效机构权威推荐 - 速递信息
  • 终极指南:如何用md2pdf实现离线Markdown转PDF的完美转换
  • [具身智能-855]:什么是AI应用?AI 应用、AI 模型、AI Agent三者区别?
  • 一多操作系统的生命体架构与当前主流开发语言的区别
  • 【限时解密】Claude 3.5尚未公布的思维缓存机制:如何用1行system prompt激活其人性推理开关?
  • 速学linux命令教程
  • JavaScript 与 TypeScript:前端双巨头深度对比,一文看懂选谁更合适
  • 什么是AI Agent
  • GPU 池化5个真实场景告诉你,为什么需要 OrionX 社区版
  • Gemini深度研究模式到底有多强?3个颠覆性实验结果揭示它如何重构科研工作流
  • 全开源交易所系统源码,加密货币交易所源码,多语言 ai量化
  • 通过Taotoken用量看板分析网站AI功能各模块的token消耗分布
  • Python之anonymous包语法、参数和实际应用案例
  • 2026年10款论文降AIGC网站横评:从90%降至10%的靠谱之选
  • 2026年东莞GEO服务商可信赖排行榜TOP5推荐 - 速递信息
  • TabNet: Attentive Interpretable Tabular Learning——一种具有可解释性的注意力表格学习模型
  • 数学论文降AI工具免费推荐:2026年数学毕业论文降AI4.8元知网达标免费完整方案
  • 2026年实用降AIGC工具:亲测AI率从90%降至4%的靠谱方案
  • 5分钟快速上手:用ComfyUI-MimicMotionWrapper实现AI动作迁移
  • Python之python-dbusx包语法、参数和实际应用案例
  • 论文被吐槽逻辑乱?师姐安利这几个AI写作辅助网站
  • 2026 天津学历提升机构实测排行榜:成考 / 自考避坑指南,这 5 家才是真靠谱 - 商业科技观察
  • 2026 出手闲置名表,西安添价收手表回收安全交易口碑良好 - 薛定谔的梨花猫
  • 利用 TaoToken 多模型聚合能力优化 AIGC 内容生成管线
  • 海事边缘计算实战:基于 Linux 构建船舶多链路高可用网络与隔离防线
  • [具身智能-857]:大模型(大脑、知识记忆、反复推演)、 小模型(小脑、肌肉记忆、条件反射)功能的差别,会导致模型在结构和训练等维度上哪些差别?!!
  • 2026年贵阳中高端室内装修全案设计深度横评:从设计落地到智能交付的完整避坑指南 - 优质企业观察收录
  • 行政管理论文降AI工具免费推荐:2026年行政管理毕业论文AIGC超标4.8元一次过知网完整指南 - 还在做实验的师兄