本文目录
ROS ros_control wiki 学习笔记
本文为笔者根据 ros_control wiki 整理的笔记,文中大多为对原文的翻译,主要用于作者后续查阅。读者在阅读之前可根据自身情况决定是否阅读。
1 架构
ros_control 将来自机器人执行器编码器的关节状态数据和输入设定点作为输入。它使用一种通用的控制回路反馈机制(通常是 PID 控制器)来控制发送到执行器的输出(通常是作用力)。对于没有一对一映射的关节位置和力的物理机构,ros_control 变得更加复杂,但这些场景是使用传输来解释的(Transmissions)。
2 控制器
可用的控制器插件
- joint_state_controller(将注册到 hardware_interface::JointStateInterface 的所有资源状态发布到 sensor_msgs/JointState 类型的话题)
- joint_state_controller
- position_controllers(对硬件控制期望位置)
- joint_position_controller(接收位置输入并发送位置输出,只需使用 forward_command_controller 控制器传输输入即可。)
- joint_group_position_controller(同时设置多关节位置)
- velocity_controllers(对硬件控制期望速度)
- joint_position_controller(使用PID控制器接收位置输入并发送速度输出,)
- joint_velocity_controller(接收速度输入并发送速度输出,只需使用 forward_command_controller 控制器传输输入即可。)
- joint_group_velocity_controller(同时设置多关节速度)
- effort_controllers(对硬件控制期望作用(力/力矩))
- joint_position_controller(使用PID控制器接收位置输入并发送作用力输出。)
- joint_group_position_controller(同时设置多关节位置)
- joint_velocity_controller(使用PID控制器接收速度输入并发送作用力输出。)
- joint_effort_controller(接收作用力输入并发送作用力输出,只需使用 forward_command_controller 控制器传输输入即可。)
- joint_group_effort_controller(同时设置多关节作用力)
- joint_trajectory_controllers(样条连接整条轨迹实现额外功能)(src)
- position_controller
- velocity_controller
- effort_controller
- position_velocity_controller
- position_velocity_acceleration_controller
3 硬件接口
ROS控制与上述一个ROS控制器一起使用硬件接口向硬件发送和接收命令。撰写本文时可用硬件接口的列表(通过硬件资源管理器)。如果您的机器人的硬件接口尚不存在,您当然可以创建自己的接口,但不限于此列表:
- Joint Command Interface()
- Effort Joint Interface(用于控制基于作用力的关节)
- Velocity Joint Interface(用于控制基于速度的关节)
- Position Joint Interface(用于控制基于位置的关节)
- Joint State Interfaces
- Actuator State Interface
- PosVelJoint Interface
- PosVelAccJoint Interface
- Force-torque sensor Interface
- IMU sensor Interface
4 Transmissions
Transmissions是控制管道中的一个元素,用于转换作用力/流量变量,使其产生-功率-保持不变。
机械传诵是保持功率的变换
P_in = P_out
F_in x V_in = F_out x V_out
上述 P、F、V 分别表示功率、力和速度。一般来说,功率是作用力(如力、电压)和流量(如速度、电流)变量的乘积。对于减速比为n的简单机械减速器,有:
effort map: F_joint = F_actuator * n
flow map: V_joint = V_actuator / n
从上面可以看出,功率在输入和输出之间保持不变。(https://en.wikipedia.org/wiki/Bond_graph)
4.1 Transmission URDF Format
4.2 Transmission Interface
Transmission专用代码(非机器人专用),在 Transmission 类型共享的统一接口下实现双向(执行器<->关节)作用力和flow。
Transimission 类型
- Simple Reduction Transmission
- Differential Transmission
- Four Bar Linkage Transimission
用途
- transmission_interface::ActuatorToJointStateInterface 从执行器变量填充关节状态。
- hardware_interface::JointStateInterface 向控制器公开关节状态。
4.3 Transmission Example
5 关节限制
joint_limits_interface 包含用于表示关节限制的数据结构、从通用格式(如URDF和ROSPARM)填充关节限制的方法,以及在不同类型的关节命令上强制执行限制的方法。
joint_limits_interface 不是由控制器本身使用的(它不实现硬件接口),而是在控制器更新后,在robot抽象的write()方法(或等效方法)中运行。
强制限制将覆盖控制器设置的命令,它不会在单独的原始数据缓冲区上运行。
5.1 规范
- Joint limits 位置、速度、加速度、jerk和作用力。
- Soft joint limits 软位置限制,k_ p,k_ v(example: pr2_controller_manager/safety_limits)
- 从URDF加载关节限制信息的实用方法(仅位置、速度、作用力)。
- 从URDF加载软接头极限信息的实用方法。
- 从ROS参数服务器加载关节限制的实用方法(所有值)。参数规范与MoveIt中使用的参数规范相同,此外,还分析jerk和effort限制。
5.2 关节限制接口
- ros_control 接口用于强制执行关节限制
- 对于 effort-controlled joints, position-controlled joints, and velocity-controlled joints,创建了两种类型的接口。第一种是饱和界面,用于具有正常限制但不具有软限制的关节。第二个是实现软限制的接口,类似于PR2上使用的接口。
5.3 Joint limits Example
6 其他示例
- Barrett WAM controllers at Johns Hopkins University: barrett_control on Github
- RRBot in Gazebo: ros_control with Gazebo tutorial
- Rethink Baxter hardware as used at the University of Colorado Boulder: Baxter on Github
- ROS HAL interface provides interfaces to MachineKit HAL from ROS: https://github.com/zultron/hal_ros_control/
7 安装
二进制包安装
sudo apt-get install ros-melodic-ros-control ros-melodic-ros-controllers
源代码安装
cd CATKIN_WORKSPACE/src
wstool init
wstool merge https://raw.github.com/ros-controls/ros_control/melodic-devel/ros_control.rosinstall
wstool update
cd ..
rosdep install --from-paths . --ignore-src --rosdistro melodic -y
catkin_make
Reference
ROScon 2014 talk entitled ros_control Video