xarm_ros2说明
1. 简介
此代码库包含xArm模型文件以及相关的控制、规划等示例开发包。开发及测试使用的环境如下
Ubuntu 20.04 + ROS Foxy
Ubuntu 20.04 ROS Galactic
Ubuntu 22.04 + ROS Humble
请根据不同ros2版本切换到对应的代码分支(没有对应的代码分支表示未在该版本测试过)
2. 更新记录
新增xarm_gazebo以支持gazebo,并和moveit关联
支持加载其它模型到机械臂末端
新增xarm_moveit_servo支持xbox手柄/SpaceMouse/键盘控制
(2022-09-07) 变更service(set_tgpio_modbus_timeout/getset_tgpio_modbus_data)的参数类型,增加参数支持透传
(2022-09-07) 变更Topic名字(xarm_states改为robot_states)
(2022-09-07) 更新子模块xarm-sdk到1.11.0版本
(2022-09-09) [Beta]支持Ros Humble版本
(2022-10-10) xarm_api新增一些服务
3. 准备工作
- 3.2 安装 Moveit2
- 3.3 安装 Gazebo
- 3.4 安装 gazebo_ros_pkgs
4. 使用说明
5. 模块说明
注意1: 如果当前局域网有多人使用ros2,为避免相互间发生干扰,请设置一下 ROS_DOMAIN_ID
注意2: 运行xarm_ros2中的程序或启动脚本之前请先source当前工作区环境
注意3: 以下启动说明以6轴为例,5轴和7轴的用法只需找到对应的启动文件或指定对应的参数
- 5.2 xarm_msgs
此模块包含整个xarm_ros2所使用到的服务和主题通信格式,使用时请查阅每个文件里的说明. REAEME
- 5.3 xarm_sdk
此模块是作为子模块存在的,子模块仓库为xArm-CPLUS-SDK, 作为控制机械臂的SDK,如需使用请参阅xArm-CPLUS-SDK的文档说明
- 5.4 xarm_api
此模块是针对xarm_sdk封装,提供对应的ros service和ros topic,整个xarm_ros2是通过使用此模块的service和topic来和机械臂的通信的 所有service和topic默认都处于xarm/空间下(除非指定了hw_ns参数),即joint_states的完整名字为xarm/joint_states
services: 所有提供的service的名字和SDK中的API名字是对应的,但是否创建对应的服务是根据
xarm_api/config/xarm_params.yaml
和xarm_api/config/xarm_user_params.yaml
的services来决定的,只有当services下对应的service的值为true
时才会创建对应的service,如果需要自定义参数,请创建xarm_api/config/xarm_user_params.yaml
文件来修改,格式参照xarm_api/config/xarm_params.yaml
。topics:
joint_states: 格式为 sensor_msgs::msg::JointState
robot_states: 格式为 xarm_msgs::msg::RobotMsg
xarm_cgpio_states: 格式为 xarm_msgs::msg::CIOState
uf_ftsensor_raw_states: 格式为 geometry_msgs::msg::WrenchStamped
uf_ftsensor_ext_states: 格式为 geometry_msgs::msg::WrenchStamped
注:: 有些话题需要在launch启动时指定特定的__report_type__才可用,参考这里.
启动与测试(xArm):
使用命令行(xArm):
使用命令行(lite6):
注: 请在使用真机测试之前仔细研究Mode, State和可用运动指令的含义。注意Lite 6与xArm系列提供的服务所在的命名空间不同。
- 5.8 xarm_gazebo
此模块用于在gazobo上对xarm进行仿真。 注意: (1) 可能需要源码安装gazebo_ros2_control,并source所安装的gazebo_ros2_control环境。 (2) minic_joint_plugin是基于ROS1开发,我们基于此修改并集成了ROS2兼容的插件版本,供xArm Gripper仿真使用。
单独测试xarm在gazebo上的显示:
联合moveit+gazebo进行控制:
- 5.9 xarm_moveit_servo
此模块用于通过外部输入来控制机械臂, 基于moveit_servo。
通过 XBOX360 手柄控制
左摇杆控制TCP的X和Y
右摇杆控制TCP的ROLL和PITCH
[前面]左右两个触发器控制TCP的Z
[前面]左右两个缓冲器控制TCP的YAW
十字键控制关节1和关节2的转动
按键X和按键B控制最后一个关节的转动
按键Y和按键A控制倒数第二个关节的转动
通过六维鼠标 3Dconnexion SpaceMouse Wireless 来控制
六维鼠标的六个维度对应控制TCP的X/Y/Z/ROLL/PITCH/YAW
左边按键按下时单独控制TCP的XYZ
右边按键按下时单独控制TCP的ROLL/PITCH/YAW
通过 键盘输入 控制
6. 主要启动参数说明
robot_ip 机械臂IP地址,控制真机时需要。
report_type, 默认normal。 上报类型,支持normal/rich/dev, 不同上报类型的上报数据和上报频率不一样。
dof, 默认为7。 机械臂轴数,如非必须参数一般不需要指定。 对于双臂启动脚本(dual_开头的),可以通过以下参数分别指定:
dof_1
dof_2
velocity_control, 默认为false。 是否使用速度控制。
add_gripper, 默认为false。 是否添加UF机械爪xarm_gripper,优先级高于参数
add_vacuum_gripper
。 对于双臂启动脚本(dual_开头的),可以通过以下参数分别指定:add_gripper_1
add_gripper_2
add_vacuum_gripper, 默认为false。 是否添加UF吸泵xarm_vacuum_gripper,设置为true的前提必须要设置参数
add_gripper
为false
对于双臂启动脚本(dual_开头的),可以通过以下参数分别指定:add_vacuum_gripper_1
add_vacuum_gripper_2
add_other_geometry, 默认为false。 是否添加其它几何模型到末端,设置为true的前提:参数
add_gripper
和add_vacuum_gripper
必须为false
geometry_type, 默认为box, 仅仅在
add_other_geometry=true
时有效。 要添加的几何模型的类型,支持box/cylinder/sphere/mesh。geometry_mass, 单位(kg),默认0.1。 几何模型质量。
geometry_height, 单位(米),默认0.1。 几何模型高度,geometry_type为box/cylinder/sphere有效。
geometry_radius, 单位(米),默认0.1。 几何模型半径,geometry_type为cylinder/sphere有效。
geometry_length, 单位(米),默认0.1。 几何模型长度,geometry_type为box有效。
geometry_width, 单位(米),默认0.1。 几何模型宽度,geometry_type为box有效。
geometry_mesh_filename, 几何模型的文件名,geometry_type为mesh有效, 该文件需要存放于
xarm_description/meshes/other/
目录下面,这样就不需要在文件名里指定文件目录了。geometry_mesh_origin_xyz, 默认"0 0 0"
geometry_mesh_origin_rpy, 默认"0 0 0" 几何模型的基准参考系相对于xArm末端法兰的参考系,geometry_type为
mesh
有效。使用时注意引号: geometry_mesh_origin_xyz:='"0.05 0.0 0.0"'.geometry_mesh_tcp_xyz, 默认"0 0 0"
geometry_mesh_tcp_rpy, 默认"0 0 0" 几何模型末端(TCP)相对于几何模型基准参考系的偏移,geometry_type为
mesh
有效。使用时注意引号: geometry_mesh_tcp_rpy:='"0.0 0.0 1.5708"'.添加自定义末端工具(圆柱体)示例
对于双臂启动脚本(dual_开头的),可以通过以下参数分别指定:
add_other_geometry_1
add_other_geometry_2
geometry_type_1
geometry_type_2
geometry_mass_1
geometry_mass_2
geometry_height_1
geometry_height_2
geometry_radius_1,
geometry_radius_2,
geometry_length_1
geometry_length_2
geometry_width_1
geometry_width_2
geometry_mesh_filename_1
geometry_mesh_filename_2
geometry_mesh_origin_xyz_1
geometry_mesh_origin_xyz_2
geometry_mesh_origin_rpy_1
geometry_mesh_origin_rpy_2
geometry_mesh_tcp_xyz_1
geometry_mesh_tcp_xyz_2
geometry_mesh_tcp_rpy_1
geometry_mesh_tcp_rpy_2
Last updated