• ROS学习笔记(6):ros_control


    1.ros_control简介

    ros_control - ROS Wiki

    ros_control是为ROS提供的机器人控制包,包含一系列控制器接口、传动装置接口、控制器工具箱等,有效帮助机器人应用功能包快速落地,提高开发效率。

    2.ros_control框架

    ros_control总体框架:

    针对不同类型的机器人(哨兵小车,机械臂等)ros_control提供了多种类型控制器,这些控制器的接口各不相同。ros_control提供了一个硬件抽象层,用来提高代码的复用率,负责机器人硬件资源管理,控制器从抽象层请求资源,不直接接触硬件。

     ros_control的数据流图:

    1.控制器管理器(Controller Manager)

    每个机器人有一个或多个控制器,控制器管理器提供了通用接口来管理不同的控制器。控制器管理器的输入就是ROS上层应用功能包的输出。

    2.控制器(Controller)

    控制器可以完成每个joint控制,读取硬件资源接口状态,再发布控制命令,提供PID控制器。

    3.硬件资源(Hardware Resource)

    为上下两层提供硬件资源接口。

    4.机器人硬件抽象(RobotHW)

    机器人硬件抽象和硬件资源通信,通过write和read方法完成硬件操作,包含关节约束、力矩转换、状态转换等功能。

    5.真实机器人(Real Robot)

    真实机器人上需要有自己的嵌入式控制器,将接收到的命令反映到执行器上,例如接收到旋转90°的命令后,就需要让执行器快速、稳定地旋转90°。

    3.控制器

    ros_controllers功能包提供了许多控制器:

    创建自己的控制器:

    controller_interface · ros-controls/ros_control Wiki (github.com)

    ros_controllers和ros_control之间的多种控制接口:

    4.硬件接口 

    硬件接口是控制器和RobotHW沟通的接口,基本与控制器的种类相对应:

    创建自己的硬件接口:

    hardware_interface · ros-controls/ros_control Wiki (github.com)

    5.传动系统(Transmission)

     传动系统可以将机器人的关节指令转换成执行器的控制信号。机器人每个需要运动的关节都需要配置相应的传动系统,可以在机器人的URDF模型文件中配置:

    urdf/XML/传输 - ROS Wiki

    6.关节约束(Joint Limits)

     关节约束是硬件抽象层中的一部分,维护一个关节约束的数据结构,这些约束数据可以从机器人的URDF文件中加载、可以在ROS的参数服务器上加载(需要先用YAML配置文件导入ROS参数服务器),包含了关节速度、位置、加速度、加加速度、力矩等约束,还包含了其安全作用的位置软限位、速度边界(k_v)和位置边界(k_p)等。

    URDF文件中设置Joint Limits参数:

    joint_limits_interface · ros-controls/ros_control Wiki (github.com)

    7.控制器管理器(controller_manager)

    控制器管理器提供了一种多控制器控制的机制,实现控制器的加载、运行启动、运行停止、卸载等多种操作。

    控制器的状态跳转:

    1.命令行工具

    1.controller_manager命令格式:
    rosrun controller_manager controller_manager <command> <controller_name>

    支持的:

    ·load:加载一个控制器。 

    ·unload:卸载一个控制器。

    ·start:启动控制器。

    ·stop:停止控制器。

    ·spawn:加载并启动一个控制器。

    ·kill:停止并卸载一个控制器。

    2.查看控制器状态命令:
    rosrun controller_manager controller_manager <command>

    支持的

    ·list:根据执行顺序列出所有控制器,并显示每个控制器的状态。

    ·list-types:显示所有控制器的类型。

    ·reload-libraries:以插件的形式重载所有的控制器的库,不需要重新启动,方便对控制器的开发和测试。

    ·reload-libraries--restore:以插件的形式重载所有控制器的库,并恢复到初始状态。

    3.spawner命令

    spawner命令是用于一次控制多个控制器,可以自动加载、启动控制器,加上--stopped参数,控制器就只会被加载,不会运行:

    rosrun controller_manager spawner [--stopped] name1 name2 name3
    4.unspawner

    unspawner命令用于停止一系列控制器,但不需要卸载:

    rosrun controller_manager unspawner name1 name2 name3

    2.launch工具

    launch文件运行controller_manager命令,加载、启动控制器:

    1. <launch>
    2. <node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2"/>
    3. </launch>

    加载不启动:

    1. <launch>
    2. <node pkg="controller_manager" type="spawner" args="--stopped controller_name1 controller_name2"/>
    3. </launch>

    3.rqt_controller_manager可视化工具

    rosrun rqt_controller_manager rqt_controller_manager

  • 相关阅读:
    血液代谢组学炎症相关的线粒体功能失调慢加急性肝衰竭的潜在机制
    如何重新训练模型?
    Linux sed
    LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】
    [附源码]java毕业设计在线二手车交易信息管理系统
    自动化平台测试开发方案(详解自动化平台开发)
    GoogLeNet 网络简介
    基于单片机智能停车系统的设计与实现(论文+源码)_kaic
    R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...
    [管理与领导-102]:经营与管理的关系:攻守关系;武将文官关系;开疆拓土与守护城池的关系;战斗与练兵的关系;水涨船高,水落船低的关系。
  • 原文地址:https://blog.csdn.net/weixin_75067193/article/details/134272895