1.ros_control Overview
REFERENCE:
roscontrol Wiki:ros_control - ROS Wiki
《ros_control: A generic and simple control framework for ROS》
ROS学习笔记10 —— ros_control和controller的使用_rosrun controller-CSDN博客
Source:https://github.com/ros-controls/ros_control



从上述这张图中可以看出来 ROS control 分成五个模块:Controller Manager, Controller,Hardware Resource Interface Layer,haradware_interface::RobotHW,Real Robot。
- Controller Manager(控制器管理器):负责加载、卸载和管理控制器。
- Controllers(控制器):具体的控制算法(例如 joint_position_controller),通过 ROS 接口接收目标并与硬件交互。
- Hardware Resource Interface Layer(硬件资源接口层):定义了命令接口(Joint Command Interfaces)和状态接口(Joint State Interface),用于控制器与硬件之间的通信。
- hardware_interface::RobotHW(硬件抽象层):抽象真实硬件或仿真的接口,负责读写命令和状态。
- Real Robot(真实机器人):包含执行器(actuators,例如电机)和传感器(encoders,例如编码器),通过通信总线与硬件抽象层交互。
- Optional Hardware:表示硬件可能包含额外的控制逻辑(例如嵌入式 PID 控制器)。
"The ros_control packages takes as input the joint state data from your robot's actuator's encoders and an input set point. It uses a generic control loop feedback mechanism, typically a PID controller, to control the output, typically effort, sent to your actuators. ros_control gets more complicated for physical mechanisms that do not have one-to-one mappings of joint positions, efforts, etc but these scenarios are accounted for using transmissions."
ros_control 的软件包将来自机器人机器人执行器编码器和输入设置点的联合状态数据输入。通常使用通用控制环 PID 来控制发送给执行器的输出。
2.Controllers

- joint_state_controller:读取关节位置,将注册到hardware_interface :: JointStateInterface的所有资源的状态发布到类型 sensor_msgs / JointState的主题。
-
- joint_state_controller
- position_controllers: 一次设置一个或多个关节位置
-
- joint_position_controller 接收位置输入并发送位置输出,只需传输输入
- joint_group_position_controller
- velocity_controllers: 一次设置一个或多个关节速度
-
- joint_position_controller 接收一个位置输入并使用PID控制器发送速度输出。
- joint_velocity_controller 接收速度输入并发送速度输出,只需使用forward_command_controller传输输入即可。
- joint_group_velocity_controller
- joint_trajectory_controllers: 用于为整个轨迹添加附加功能
-
- position_controller
- velocity_controller
- effort_controller
- position_velocity_controller
- position_velocity_acceleration_controller
- effort_controllers:对硬件接口命令所需的 effort(force/torque)。
-
- joint_effort_controller
- joint_group_effort_controller
- joint_position_controller
- joint_group_position_controller
- joint_velocity_controller
不同的controller可以完成对不同模块的控制。例如完成对关节力的控制、速度控制等等。请求下层的 Hardware 资源,并提供PID控制器,读取底层硬件资源的状态,发送控制指令。
可根据自己的需求,创建需要的controller,并通过Controller Manager来管理自己创建的controller,具体参考:https://github.com/ros-controls/ros_control/wiki/controller_interface
controller_manager :controller_manager - ROS Wiki
3.Hardware Interfaces
Hardware 中具体的 API 参考:hardware_interface: Class List
硬件接口(Hardware Interfaces)由 ROS 控制系统与上述 ROS 控制器之一结合使用,用于向硬件发送和接收命令。截至本文撰写时,可用的硬件接口列表(通过硬件资源管理器)。如果您的机器人的硬件接口尚不存在,那么您当然可以创建自己的硬件界面,并且不仅限于此列表:
- Joint Command Interface - 硬件接口支持命令关节数组。请注意,这些命令可以具有任何语义含义,只要它们每个都可以用一个 double 表示,它们不一定是 effort 命令。要指定此命令的含义,请参见派生的类:
-
- Effort Joint Interface - for commanding effort-based joints.
- Velocity Joint Interface - for commanding velocity-based joints.
- Position Joint Interface - for commanding position-based joints.
- Joint State Interfaces - Hardware interface to support reading the state of an array of named joints, each of which has some position, velocity, and effort (force or torque).
- Actuator State Interfaces - Hardware interface to support reading the state of an array of named actuators, each of which has some position, velocity, and effort (force or torque).
- Actuator Command Interfaces
-
- Effort Actuator Interface
- Velocity Actuator Interface
- Position Actuator Interface
- PosVelJointInterface
- PosVelAccJointInterface
- Force-torque sensor Interface
- IMU sensor Interface
4.Transmissions
Transmissions(传动系统)

下文举了个例子:
urdf/XML/Transmission - ROS Wiki 定义了传动比
1 <transmission name="simple_trans">
2 <type>transmission_interface/SimpleTransmission</type>
3 <joint name="foo_joint">
4 <hardwareInterface>EffortJointInterface</hardwareInterface>
5 </joint>
6 <actuator name="foo_motor">
7 <mechanicalReduction>50</mechanicalReduction>
8 <hardwareInterface>EffortJointInterface</hardwareInterface>
9 </actuator>
10 </transmission>
transmission_interface Wiki:transmission_interface - ROS Wiki
transmission_interface Wik:包含用于表示机械传输的数据结构,以及在执行器和关节空间之间传播position, velocity和effort变量的方法。同时他也提供了一些简单的传动方式:简单减速器,四杆连杆和差动传动。
如何写一个 transmission_Interface:https://github.com/ros-controls/ros_control/wiki/transmission_interface
5.Joint Limits
joint_limits_interface包含用于表示关节限制的数据结构。这些限位数据可以从机器人的URDF文件中加载,也可以ROS的参数服务器上加载(先用YAML配置文件导入ROS parameter server)。
控制器本身并不使用 joint_limits_interface(它并不实现硬件接口),而是在控制器更新后,通过机器人抽象的 write() 方法(或类似方法)进行操作。执行限制会覆盖控制器设置的指令,而不会在单独的原始数据缓冲区上运行。
- 限位数据包括:关节速度、位置、加速度、加加速度、力矩等方面的限位;
- 软关节限位 软位置限位 k_p、k_v(如 pr2_controller_manager/safety_limits 中所述)。
- 从 URDF 加载关节限制信息的实用方法(仅位置、速度和力度)。
- 从 URDF 加载软关节限位信息的实用方法。
- 从 ROS 参数服务器加载关节限值(所有值)的实用方法。参数规格与 MoveIt 中使用的相同,但我们也会解析挺举和用力极限。
ROS_CONTROL接口,用于执行关节限制。
对于力度控制关节、位置控制关节和速度控制关节,我们创建了两种界面。第一种是饱和接口,用于有正常极限但没有软极限的关节。第二种是实现软限制的接口,类似于 PR2 上使用的接口。
EXAMPLE:https://github.com/ros-controls/ros_control/wiki/joint_limits_interface
6. ELSE
一些其他的案例,下载方式可以参考ros_control - ROS Wiki

2806

被折叠的 条评论
为什么被折叠?



