TL-机械臂模型功能包

tl_description功能包说明

tl_description功能包为显示机器人模型和TF变换的功能包,通过该功能包,我们可以实现电脑中的虚拟机械臂与现实中的实际机械臂的联动的效果。

  • 1. 功能包使用。
  • 2. 功能包架构说明。
  • 3. 功能包话题说明。

通过这三部分内容的介绍可以帮助大家:

  • 1. 了解该功能包的使用。
  • 2. 熟悉功能包中的文件构成及作用。
  • 3. 熟悉功能包相关的话题,方便开发和使用。

tl_description功能包使用

配置环境后我们可以通过以下命令直接启动节点,运行tl_description功能包。tl_description提供两种启动方式:

方式一:通用启动(推荐开发调试使用)

通过 tl_description.launch.py 传入 arm_type 参数,适用于快速切换不同臂型:

ros2 launch tl_description tl_description.launch.py arm_type:=<arm_type> use_sim:=<use_sim>

方式二:快捷启动(推荐日常使用)

每种臂型都有对应的专用 launch 文件,无需传参,直接启动:

臂型 启动命令
TCB605 ros2 launch tl_description tl_tcb605_description.launch.py
TCB605F ros2 launch tl_description tl_tcb605f_description.launch.py
TCB605L ros2 launch tl_description tl_tcb605l_description.launch.py
TCB605LV ros2 launch tl_description tl_tcb605lv_description.launch.py
TCB605V ros2 launch tl_description tl_tcb605v_description.launch.py
TCB610 ros2 launch tl_description tl_tcb610_description.launch.py
TCB610V ros2 launch tl_description tl_tcb610v_description.launch.py
TCB705 ros2 launch tl_description tl_tcb705_description.launch.py
TCB705F ros2 launch tl_description tl_tcb705f_description.launch.py
TCB705L ros2 launch tl_description tl_tcb705l_description.launch.py
TCB705LV ros2 launch tl_description tl_tcb705lv_description.launch.py
TCB705V ros2 launch tl_description tl_tcb705v_description.launch.py
TCB710 ros2 launch tl_description tl_tcb710_description.launch.py
TCB710V ros2 launch tl_description tl_tcb710v_description.launch.py

以下文档示例均以 TCB605 为例进行说明,其他臂型操作方式相同。

use_sim 参数(默认 false)控制是否启用仿真模式。当进行仿真控制时,use_sim 设置为 true,此时 joint_state_publisher_gui 节点会发布关节状态话题 /joint_states 并生成 GUI 滑动条,通过拖动滑动条可以手动控制每个关节的角度或位置,例如 tcb605 机械臂的仿真启动命令:

ros2 launch tl_description tl_tcb605_description.launch.py use_sim:=true

节点启动成功后,将弹出以下画面,通过拖动滑动条可以控制每个关节的角度:

仿真界面

当进行真实机械臂控制时,use_sim 设置为 false(默认值),此时节点需要订阅 /joint_states 话题计算机器人各连杆的 tf 变换,否则 RViz2 中无法正常显示机械臂模型运动,因此需要启动 tl_driver 功能包提供 /joint_states 话题输入,首先启动 tl_driver 功能包(以 TCB605 为例):

ros2 launch tl_driver tl_tcb605_driver.launch.py

然后再启动 tl_description:

ros2 launch tl_description tl_tcb605_description.launch.py

节点启动成功后,控制真实机械臂时,Rviz2 中的机械臂模型会进行对应角度的运动。

tl_description功能包架构说明

功能包文件总览

当前 tl_description 功能包的文件构成如下:

├── CMakeLists.txt                           # 编译规则文件
├── config                                   # 关节名称配置(每型号一个 YAML)
│   ├── joint_names_tl_tcb605.yaml
│   ├── joint_names_tl_tcb605f.yaml
│   ├── joint_names_tl_tcb605l.yaml
│   ├── joint_names_tl_tcb605lv.yaml
│   ├── joint_names_tl_tcb605v.yaml
│   ├── joint_names_tl_tcb610.yaml
│   ├── joint_names_tl_tcb610v.yaml
│   ├── joint_names_tl_tcb705.yaml
│   ├── joint_names_tl_tcb705f.yaml
│   ├── joint_names_tl_tcb705l.yaml
│   ├── joint_names_tl_tcb705lv.yaml
│   ├── joint_names_tl_tcb705v.yaml
│   ├── joint_names_tl_tcb710.yaml
│   └── joint_names_tl_tcb710v.yaml
├── doc                                      # 辅助文档、图片文件
│   └── tl_description.png
├── launch                                   # 启动文件
│   ├── tl_description.launch.py             # 通用启动(需传 arm_type 参数)
│   ├── tl_tcb605_description.launch.py
│   ├── tl_tcb605f_description.launch.py
│   ├── tl_tcb605l_description.launch.py
│   ├── tl_tcb605lv_description.launch.py
│   ├── tl_tcb605v_description.launch.py
│   ├── tl_tcb610_description.launch.py
│   ├── tl_tcb610v_description.launch.py
│   ├── tl_tcb705_description.launch.py
│   ├── tl_tcb705f_description.launch.py
│   ├── tl_tcb705l_description.launch.py
│   ├── tl_tcb705lv_description.launch.py
│   ├── tl_tcb705v_description.launch.py
│   ├── tl_tcb710_description.launch.py
│   └── tl_tcb710v_description.launch.py
├── meshes                                   # 模型文件
│   ├── tl_tcb605/                           # tcb605机械臂模型文件
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb605f/                          # tcb605f机械臂模型文件
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb605l/                          # tcb605l机械臂模型文件
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb605lv/                         # tcb605lv机械臂模型文件
│   │   ├── camera_link.STL
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb605v/                          # tcb605v机械臂模型文件
│   │   ├── camera_link.STL
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb610/                           # tcb610机械臂模型文件
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb610v/                          # tcb610v机械臂模型文件
│   │   ├── camera_link.STL
│   │   ├── link0.STL ~ link6.STL
│   ├── tl_tcb705/                           # tcb705机械臂模型文件
│   │   ├── link0.STL ~ link7.STL
│   ├── tl_tcb705f/                          # tcb705f机械臂模型文件
│   │   ├── link0.STL ~ link7.STL
│   ├── tl_tcb705l/                          # tcb705l机械臂模型文件
│   │   ├── link0.STL ~ link7.STL
│   ├── tl_tcb705lv/                         # tcb705lv机械臂模型文件
│   │   ├── camera_link.STL
│   │   ├── link0.STL ~ link7.STL
│   ├── tl_tcb705v/                          # tcb705v机械臂模型文件
│   │   ├── camera_link.STL
│   │   ├── link0.STL ~ link7.STL
│   ├── tl_tcb710/                           # tcb710机械臂模型文件
│   │   ├── link0.STL ~ link7.STL
│   └── tl_tcb710v/                          # tcb710v机械臂模型文件
│       ├── camera_link.STL
│       ├── link0.STL ~ link7.STL
├── package.xml                              # 依赖说明文件
├── README.md                                # 说明文档
├── rviz                                     # rviz2配置文件
│   ├── tl_tcb605.rviz
│   ├── tl_tcb605f.rviz
│   ├── tl_tcb605l.rviz
│   ├── tl_tcb605lv.rviz
│   ├── tl_tcb605v.rviz
│   ├── tl_tcb610.rviz
│   ├── tl_tcb610v.rviz
│   ├── tl_tcb705.rviz
│   ├── tl_tcb705f.rviz
│   ├── tl_tcb705l.rviz
│   ├── tl_tcb705lv.rviz
│   ├── tl_tcb705v.rviz
│   ├── tl_tcb710.rviz
│   └── tl_tcb710v.rviz
└── urdf                                     # urdf描述文件
    ├── tl_tcb605.urdf
    ├── tl_tcb605f.urdf
    ├── tl_tcb605l.urdf
    ├── tl_tcb605lv.urdf
    ├── tl_tcb605v.urdf
    ├── tl_tcb610.urdf
    ├── tl_tcb610v.urdf
    ├── tl_tcb705.urdf
    ├── tl_tcb705f.urdf
    ├── tl_tcb705l.urdf
    ├── tl_tcb705lv.urdf
    ├── tl_tcb705v.urdf
    ├── tl_tcb710.urdf
    └── tl_tcb710v.urdf

tl_description功能包话题说明

如下为该功能包的话题说明:

Subscribers:
  /joint_states: sensor_msgs/msg/JointState
  /parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
  /parameter_events: rcl_interfaces/msg/ParameterEvent
  /robot_description: std_msgs/msg/String
  /rosout: rcl_interfaces/msg/Log
  /tf: tf2_msgs/msg/TFMessage
  /tf_static: tf2_msgs/msg/TFMessage
Service Servers:
  /robot_state_publisher/describe_parameters: rcl_interfaces/srv/DescribeParameters
  /robot_state_publisher/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
  /robot_state_publisher/get_parameters: rcl_interfaces/srv/GetParameters
  /robot_state_publisher/list_parameters: rcl_interfaces/srv/ListParameters
  /robot_state_publisher/set_parameters: rcl_interfaces/srv/SetParameters
  /robot_state_publisher/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically

主要关注以下几个话题:

  • Subscribers:代表其订阅的话题,其中的 /joint_states 代表机械臂当前的状态。当进行仿真时 joint_state_publisher_gui 会发布该话题,通过 GUI 滑动条可以控制机械臂;当控制真实机械臂时,tl_driver 功能包运行时会发布该话题,这样 RViz2 中的模型就会根据实际的机械臂状态进行运动。
  • Publishers:代表其当前发布的话题,其最主要发布的话题为 /tf 和 /tf_static,这两个话题描述了机械臂关节与关节之间的坐标变换关系,也就是 TF 变换。
  • 剩余话题和服务使用场景较少,可自行了解。