当前位置: 首页 > 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.jsqmd.com/news/872033/

相关文章:

  • 学Simulink——推挽式(Push-Pull)DC-DC 变换器的磁芯饱和抑制仿真
  • 2026年实用降AIGC工具:亲测AI率从90%降至4%的靠谱方案
  • 洛雪音乐终极音源解决方案:如何构建多平台FLAC无损播放生态?
  • 系统架构师学校计划
  • 2026年惠州黄金回收门店推荐,品质之选尽在其中 - 黄金上门回收
  • 网易季报图解:营收306亿,净利108亿 游戏拉动增长,贡献84%收入
  • 基于深度学习+AI的玉米叶片病害目标检测与预警系统(Python源码+数据集+UI可视化界面+YOLOv11训练结果)
  • 【告别限速!2026最新免费下载神器,下载即用】Motrix 下载神器全攻略: 超详细图文指南(保姆级教学)
  • 2026国内铸铝门别墅入户门工厂权威推荐指南:铸铝门|别墅大门|锌合金门|自建房大门|入户门|铜门|防盗门|装甲门|高端墅门定制|工程集采|文旅地标配套|全屋入户售后服务体系 - 企业品牌优选推荐官
  • 【QMT 量化实战】股市 “高开低走“ 是陷阱还是机会?(下)附完整 Python 代码
  • 3步掌握跨平台网络资源捕获神器:res-downloader终极指南
  • 【RAG】【retrievers11】递归检索器 + 节点引用 + Braintrust评估
  • 2026 苏州高评价上门回收黄金实测:哪家靠谱不踩坑? - 速递信息
  • 2026 全国翻译公司实力排行榜:专业、合规、高效机构权威推荐 - 速递信息
  • 利用Taotoken模型广场为你的网站选择最合适的AI模型
  • MySQL 运维实战系列(一)二进制安装 Mysql 8.0
  • 论文初稿被批太水?,有哪些真正亲测好用的的降AI率软件推荐?
  • taotoken的openai兼容协议让现有应用迁移成本降至最低
  • GHelper:华硕笔记本硬件控制的模块化架构与技术实现深度解析
  • 海事边缘计算实战:基于 Linux 构建船舶多链路高可用网络与隔离防线
  • 7天深度拆解:openpilot自动驾驶系统技术实现与二次开发指南
  • 2026年海口黄金回收平台深度盘点,标杆企业花落谁家? - 黄金上门回收
  • 下载 | Win10正式版最新系统ISO映像 (22H2、19045.7291、多合一版本)-修复系统问题
  • 市面上有哪些是真正性价比高的降AIGC软件(轻松压低AI生成疑似率)
  • 一多操作系统的生命体架构与当前主流开发语言的区别
  • Python之运算符优先级规则
  • TVBoxOSC:打造全能电视媒体中心的终极解决方案
  • [具身智能-855]:什么是AI应用?AI 应用、AI 模型、AI Agent三者区别?
  • 2026年东莞黄金回收避坑指南——福昌夏等六大机构实测对比 - 黄金上门回收
  • GPU 池化5个真实场景告诉你,为什么需要 OrionX 社区版