ROS-Industrial 之 industrial_robot_client 分析理解(1)

本文深入分析ROS-Industrial的industrial_robot_client库中的实用函数,包括isWithinRange()、mapInsert()、toMap()等,探讨它们在检查变量差异和构建映射中的作用。同时,介绍RobotStatusRelayHandler和JointRelayHandler类,讲解如何将simple message转换为ROS消息并发布到相应话题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从之前industrial_robot_client的概述中,可以理解一些industrial_robot_client要实现的功能,从这里开始,就要正式开始分析并理解industrial_robot_client要实现的功能以及如何进行实现的,为之后的上层应用夯实基础。

UTILS

在utils对应的文件中,定义了5个实用的函数,用来检查变量之间是否在同一范围之内,并且经过前面那么多代码的理解,现在对于这样的文件相信看起来也不会太吃力。那么下面我们看一下不加注释的整个头文件的代码,从头文件中理解这些代码要实现什么样的功能。

#ifndef INDUSTRIAL_ROBOT_CLIENT_UTILS_H_
#define INDUSTRIAL_ROBOT_CLIENT_UTILS_H_
#include <vector>
#include <string>
#include <map>

namespace industrial_robot_client
{
namespace utils
{
    bool isWithinRange(const std::vector<double> & lhs, const std::vector<double> & rhs,double full_range);

    bool mapInsert(const std::string & key, double value, std::map<std::string, double> & mappings);

    bool toMap(const std::vector<std::string> & keys, const std::vector<double> & values,std::map<std::string, double> & mappings);

    bool isWithinRange(const std::vector<std::string> & keys, const std::map<std::string, double> & lhs,const std::map<std::string, double> & rhs, double full_range);

    bool isWithinRange(const std::vector<std::string> & lhs_keys, const std::vector<double> & lhs_
yuan@yuan-virtual-machine:~/catkin_ws$ roslaunch ur_robot_driver ur5_bringup.launch robot_ip:=192.168.1.120 ... logging to /home/yuan/.ros/log/a5368822-6eb4-11f0-afbe-05d467d6740f/roslaunch-yuan-virtual-machine-9380.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://yuan-virtual-machine:37881/ SUMMARY ======== PARAMETERS * /controller_stopper/consistent_controllers: ['joint_state_con... * /force_torque_sensor_controller/publish_rate: 125 * /force_torque_sensor_controller/type: force_torque_sens... * /forward_cartesian_traj_controller/joints: ['shoulder_pan_jo... * /forward_cartesian_traj_controller/type: pass_through_cont... * /forward_joint_traj_controller/joints: ['shoulder_pan_jo... * /forward_joint_traj_controller/type: pass_through_cont... * /hardware_control_loop/loop_hz: 125 * /joint_based_cartesian_traj_controller/base: base * /joint_based_cartesian_traj_controller/joints: ['shoulder_pan_jo... * /joint_based_cartesian_traj_controller/tip: tool0 * /joint_based_cartesian_traj_controller/type: position_controll... * /joint_group_vel_controller/joints: ['shoulder_pan_jo... * /joint_group_vel_controller/type: velocity_controll... * /joint_state_controller/publish_rate: 125 * /joint_state_controller/type: joint_state_contr... * /pos_joint_traj_controller/action_monitor_rate: 20 * /pos_joint_traj_controller/constraints/elbow_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/elbow_joint/trajectory: 0.2 * /pos_joint_traj_controller/constraints/goal_time: 0.6 * /pos_joint_traj_controller/constraints/shoulder_lift_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/shoulder_lift_joint/trajectory: 0.2 * /pos_joint_traj_controller/constraints/shoulder_pan_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/shoulder_pan_joint/trajectory: 0.2 * /pos_joint_traj_controller/constraints/stopped_velocity_tolerance: 0.05 * /pos_joint_traj_controller/constraints/wrist_1_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/wrist_1_joint/trajectory: 0.2 * /pos_joint_traj_controller/constraints/wrist_2_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/wrist_2_joint/trajectory: 0.2 * /pos_joint_traj_controller/constraints/wrist_3_joint/goal: 0.1 * /pos_joint_traj_controller/constraints/wrist_3_joint/trajectory: 0.2 * /pos_joint_traj_controller/joints: ['shoulder_pan_jo... * /pos_joint_traj_controller/state_publish_rate: 125 * /pos_joint_traj_controller/stop_trajectory_duration: 0.5 * /pos_joint_traj_controller/type: position_controll... * /pose_based_cartesian_traj_controller/base: base * /pose_based_cartesian_traj_controller/joints: ['shoulder_pan_jo... * /pose_based_cartesian_traj_controller/tip: tool0_controller * /pose_based_cartesian_traj_controller/type: pose_controllers/... * /robot_description: <?xml version="1.... * /robot_status_controller/handle_name: industrial_robot_... * /robot_status_controller/publish_rate: 10 * /robot_status_controller/type: industrial_robot_... * /rosdistro: noetic * /rosversion: 1.17.4 * /scaled_pos_joint_traj_controller/action_monitor_rate: 20 * /scaled_pos_joint_traj_controller/constraints/elbow_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/elbow_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/constraints/goal_time: 0.6 * /scaled_pos_joint_traj_controller/constraints/shoulder_lift_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/shoulder_lift_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/constraints/shoulder_pan_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/shoulder_pan_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/constraints/stopped_velocity_tolerance: 0.05 * /scaled_pos_joint_traj_controller/constraints/wrist_1_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/wrist_1_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/constraints/wrist_2_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/wrist_2_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/constraints/wrist_3_joint/goal: 0.1 * /scaled_pos_joint_traj_controller/constraints/wrist_3_joint/trajectory: 0.2 * /scaled_pos_joint_traj_controller/joints: ['shoulder_pan_jo... * /scaled_pos_joint_traj_controller/state_publish_rate: 125 * /scaled_pos_joint_traj_controller/stop_trajectory_duration: 0.5 * /scaled_pos_joint_traj_controller/type: position_controll... * /scaled_vel_joint_traj_controller/action_monitor_rate: 20 * /scaled_vel_joint_traj_controller/constraints/elbow_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/elbow_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/constraints/goal_time: 0.6 * /scaled_vel_joint_traj_controller/constraints/shoulder_lift_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/shoulder_lift_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/constraints/shoulder_pan_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/shoulder_pan_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/constraints/stopped_velocity_tolerance: 0.05 * /scaled_vel_joint_traj_controller/constraints/wrist_1_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/wrist_1_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/constraints/wrist_2_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/wrist_2_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/constraints/wrist_3_joint/goal: 0.1 * /scaled_vel_joint_traj_controller/constraints/wrist_3_joint/trajectory: 0.1 * /scaled_vel_joint_traj_controller/gains/elbow_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/elbow_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/elbow_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/elbow_joint/p: 5.0 * /scaled_vel_joint_traj_controller/gains/shoulder_lift_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/shoulder_lift_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/shoulder_lift_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/shoulder_lift_joint/p: 5.0 * /scaled_vel_joint_traj_controller/gains/shoulder_pan_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/shoulder_pan_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/shoulder_pan_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/shoulder_pan_joint/p: 5.0 * /scaled_vel_joint_traj_controller/gains/wrist_1_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/wrist_1_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/wrist_1_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/wrist_1_joint/p: 5.0 * /scaled_vel_joint_traj_controller/gains/wrist_2_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/wrist_2_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/wrist_2_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/wrist_2_joint/p: 5.0 * /scaled_vel_joint_traj_controller/gains/wrist_3_joint/d: 0.1 * /scaled_vel_joint_traj_controller/gains/wrist_3_joint/i: 0.05 * /scaled_vel_joint_traj_controller/gains/wrist_3_joint/i_clamp: 1 * /scaled_vel_joint_traj_controller/gains/wrist_3_joint/p: 5.0 * /scaled_vel_joint_traj_controller/joints: ['shoulder_pan_jo... * /scaled_vel_joint_traj_controller/state_publish_rate: 125 * /scaled_vel_joint_traj_controller/stop_trajectory_duration: 0.5 * /scaled_vel_joint_traj_controller/type: velocity_controll... * /scaled_vel_joint_traj_controller/velocity_ff/elbow_joint: 1.0 * /scaled_vel_joint_traj_controller/velocity_ff/shoulder_lift_joint: 1.0 * /scaled_vel_joint_traj_controller/velocity_ff/shoulder_pan_joint: 1.0 * /scaled_vel_joint_traj_controller/velocity_ff/wrist_1_joint: 1.0 * /scaled_vel_joint_traj_controller/velocity_ff/wrist_2_joint: 1.0 * /scaled_vel_joint_traj_controller/velocity_ff/wrist_3_joint: 1.0 * /speed_scaling_state_controller/publish_rate: 125 * /speed_scaling_state_controller/type: scaled_controller... * /twist_controller/frame_id: tool0_controller * /twist_controller/joints: ['shoulder_pan_jo... * /twist_controller/publish_rate: 125 * /twist_controller/type: ros_controllers_c... * /ur_hardware_interface/headless_mode: False * /ur_hardware_interface/input_recipe_file: /opt/ros/noetic/s... * /ur_hardware_interface/joints: ['shoulder_pan_jo... * /ur_hardware_interface/kinematics/forearm/pitch: 0 * /ur_hardware_interface/kinematics/forearm/roll: 0 * /ur_hardware_interface/kinematics/forearm/x: -0.425 * /ur_hardware_interface/kinematics/forearm/y: 0 * /ur_hardware_interface/kinematics/forearm/yaw: 0 * /ur_hardware_interface/kinematics/forearm/z: 0 * /ur_hardware_interface/kinematics/hash: calib_20954911754... * /ur_hardware_interface/kinematics/shoulder/pitch: 0 * /ur_hardware_interface/kinematics/shoulder/roll: 0 * /ur_hardware_interface/kinematics/shoulder/x: 0 * /ur_hardware_interface/kinematics/shoulder/y: 0 * /ur_hardware_interface/kinematics/shoulder/yaw: 0 * /ur_hardware_interface/kinematics/shoulder/z: 0.089159 * /ur_hardware_interface/kinematics/upper_arm/pitch: 0 * /ur_hardware_interface/kinematics/upper_arm/roll: 1.570796327 * /ur_hardware_interface/kinematics/upper_arm/x: 0 * /ur_hardware_interface/kinematics/upper_arm/y: 0 * /ur_hardware_interface/kinematics/upper_arm/yaw: 0 * /ur_hardware_interface/kinematics/upper_arm/z: 0 * /ur_hardware_interface/kinematics/wrist_1/pitch: 0 * /ur_hardware_interface/kinematics/wrist_1/roll: 0 * /ur_hardware_interface/kinematics/wrist_1/x: -0.39225 * /ur_hardware_interface/kinematics/wrist_1/y: 0 * /ur_hardware_interface/kinematics/wrist_1/yaw: 0 * /ur_hardware_interface/kinematics/wrist_1/z: 0.10915 * /ur_hardware_interface/kinematics/wrist_2/pitch: 0 * /ur_hardware_interface/kinematics/wrist_2/roll: 1.570796327 * /ur_hardware_interface/kinematics/wrist_2/x: 0 * /ur_hardware_interface/kinematics/wrist_2/y: -0.09465 * /ur_hardware_interface/kinematics/wrist_2/yaw: 0 * /ur_hardware_interface/kinematics/wrist_2/z: -1.94130395089760... * /ur_hardware_interface/kinematics/wrist_3/pitch: 3.141592653589793 * /ur_hardware_interface/kinematics/wrist_3/roll: 1.570796326589793 * /ur_hardware_interface/kinematics/wrist_3/x: 0 * /ur_hardware_interface/kinematics/wrist_3/y: 0.0823 * /ur_hardware_interface/kinematics/wrist_3/yaw: 3.141592653589793 * /ur_hardware_interface/kinematics/wrist_3/z: -1.68800121668117... * /ur_hardware_interface/output_recipe_file: /opt/ros/noetic/s... * /ur_hardware_interface/reverse_ip: * /ur_hardware_interface/reverse_port: 50001 * /ur_hardware_interface/robot_ip: 192.168.1.120 * /ur_hardware_interface/robot_receive_timeout: 0.02 * /ur_hardware_interface/script_command_port: 50004 * /ur_hardware_interface/script_file: /opt/ros/noetic/s... * /ur_hardware_interface/script_sender_port: 50002 * /ur_hardware_interface/servoj_gain: 2000 * /ur_hardware_interface/servoj_lookahead_time: 0.03 * /ur_hardware_interface/tf_prefix: * /ur_hardware_interface/tool_baud_rate: 115200 * /ur_hardware_interface/tool_parity: 0 * /ur_hardware_interface/tool_rx_idle_chars: 1.5 * /ur_hardware_interface/tool_stop_bits: 1 * /ur_hardware_interface/tool_tx_idle_chars: 3.5 * /ur_hardware_interface/tool_voltage: 0 * /ur_hardware_interface/trajectory_port: 50003 * /ur_hardware_interface/use_spline_interpolation: True * /ur_hardware_interface/use_tool_communication: False * /vel_joint_traj_controller/action_monitor_rate: 20 * /vel_joint_traj_controller/constraints/elbow_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/elbow_joint/trajectory: 0.1 * /vel_joint_traj_controller/constraints/goal_time: 0.6 * /vel_joint_traj_controller/constraints/shoulder_lift_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/shoulder_lift_joint/trajectory: 0.1 * /vel_joint_traj_controller/constraints/shoulder_pan_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/shoulder_pan_joint/trajectory: 0.1 * /vel_joint_traj_controller/constraints/stopped_velocity_tolerance: 0.05 * /vel_joint_traj_controller/constraints/wrist_1_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/wrist_1_joint/trajectory: 0.1 * /vel_joint_traj_controller/constraints/wrist_2_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/wrist_2_joint/trajectory: 0.1 * /vel_joint_traj_controller/constraints/wrist_3_joint/goal: 0.1 * /vel_joint_traj_controller/constraints/wrist_3_joint/trajectory: 0.1 * /vel_joint_traj_controller/gains/elbow_joint/d: 0.1 * /vel_joint_traj_controller/gains/elbow_joint/i: 0.05 * /vel_joint_traj_controller/gains/elbow_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/elbow_joint/p: 5.0 * /vel_joint_traj_controller/gains/shoulder_lift_joint/d: 0.1 * /vel_joint_traj_controller/gains/shoulder_lift_joint/i: 0.05 * /vel_joint_traj_controller/gains/shoulder_lift_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/shoulder_lift_joint/p: 5.0 * /vel_joint_traj_controller/gains/shoulder_pan_joint/d: 0.1 * /vel_joint_traj_controller/gains/shoulder_pan_joint/i: 0.05 * /vel_joint_traj_controller/gains/shoulder_pan_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/shoulder_pan_joint/p: 5.0 * /vel_joint_traj_controller/gains/wrist_1_joint/d: 0.1 * /vel_joint_traj_controller/gains/wrist_1_joint/i: 0.05 * /vel_joint_traj_controller/gains/wrist_1_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/wrist_1_joint/p: 5.0 * /vel_joint_traj_controller/gains/wrist_2_joint/d: 0.1 * /vel_joint_traj_controller/gains/wrist_2_joint/i: 0.05 * /vel_joint_traj_controller/gains/wrist_2_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/wrist_2_joint/p: 5.0 * /vel_joint_traj_controller/gains/wrist_3_joint/d: 0.1 * /vel_joint_traj_controller/gains/wrist_3_joint/i: 0.05 * /vel_joint_traj_controller/gains/wrist_3_joint/i_clamp: 1 * /vel_joint_traj_controller/gains/wrist_3_joint/p: 5.0 * /vel_joint_traj_controller/joints: ['shoulder_pan_jo... * /vel_joint_traj_controller/state_publish_rate: 125 * /vel_joint_traj_controller/stop_trajectory_duration: 0.5 * /vel_joint_traj_controller/type: velocity_controll... * /vel_joint_traj_controller/velocity_ff/elbow_joint: 1.0 * /vel_joint_traj_controller/velocity_ff/shoulder_lift_joint: 1.0 * /vel_joint_traj_controller/velocity_ff/shoulder_pan_joint: 1.0 * /vel_joint_traj_controller/velocity_ff/wrist_1_joint: 1.0 * /vel_joint_traj_controller/velocity_ff/wrist_2_joint: 1.0 * /vel_joint_traj_controller/velocity_ff/wrist_3_joint: 1.0 NODES / controller_stopper (ur_robot_driver/controller_stopper_node) robot_state_publisher (robot_state_publisher/robot_state_publisher) ros_control_controller_spawner (controller_manager/spawner) ros_control_stopped_spawner (controller_manager/spawner) ur_hardware_interface (ur_robot_driver/ur_robot_driver_node) /ur_hardware_interface/ ur_robot_state_helper (ur_robot_driver/robot_state_helper) auto-starting new master process[master]: started with pid [9390] ROS_MASTER_URI=http://localhost:11311 setting /run_id to a5368822-6eb4-11f0-afbe-05d467d6740f process[rosout-1]: started with pid [9400] started core service [/rosout] process[robot_state_publisher-2]: started with pid [9407] process[ur_hardware_interface-3]: started with pid [9408] process[ros_control_controller_spawner-4]: started with pid [9409] process[ros_control_stopped_spawner-5]: started with pid [9411] process[controller_stopper-6]: started with pid [9416] [INFO] [1754038260.481594732]: Initializing dashboard client [INFO] [1754038260.487405631]: Connected: Universal Robots Dashboard Server process[ur_hardware_interface/ur_robot_state_helper-7]: started with pid [9425] [INFO] [1754038260.506479611]: Waiting for controller manager service to come up on /controller_manager/switch_controller [INFO] [1754038260.508678646]: waitForService: Service [/controller_manager/switch_controller] has not been advertised, waiting... [INFO] [1754038260.510850350]: Initializing urdriver [WARN] [1754038260.515403691]: Your system/user seems not to be setup for FIFO scheduling. We recommend using a lowlatency kernel with FIFO scheduling. See https://docs.universal-robots.com/Universal_Robots_ROS_Documentation/doc/ur_client_library/doc/real_time.html for details. [INFO] [1754038260.758709]: Controller Spawner: Waiting for service controller_manager/load_controller [INFO] [1754038260.858406]: Controller Spawner: Waiting for service controller_manager/load_controller [INFO] [1754038260.872882426]: Negotiated RTDE protocol version to 2. [INFO] [1754038260.874552649]: Setting up RTDE communication with frequency 125.000000 [INFO] [1754038261.909298599]: Starting primary client pipeline [INFO] [1754038261.911420659]: Checking if calibration data matches connected robot. [ERROR] [1754038262.911943409]: The calibration parameters of the connected robot don't match the ones from the given kinematics config file. Please be aware that this can lead to critical inaccuracies of tcp positions. Use the ur_calibration tool to extract the correct calibration from the robot and pass that into the description. See [https://github.com/UniversalRobots/Universal_Robots_ROS_Driver#extract-calibration-information] for details. [WARN] [1754038262.924839016]: Your system/user seems not to be setup for FIFO scheduling. We recommend using a lowlatency kernel with FIFO scheduling. See https://docs.universal-robots.com/Universal_Robots_ROS_Documentation/doc/ur_client_library/doc/real_time.html for details. [INFO] [1754038262.926228217]: Loaded ur_robot_driver hardware_interface [INFO] [1754038262.968037918]: waitForService: Service [/controller_manager/switch_controller] is now available. [INFO] [1754038262.968304438]: Service available. [INFO] [1754038262.968342370]: Waiting for controller list service to come up on /controller_manager/list_controllers [INFO] [1754038262.969123410]: Service available. [INFO] [1754038262.977452]: Controller Spawner: Waiting for service controller_manager/switch_controller [INFO] [1754038262.980766]: Controller Spawner: Waiting for service controller_manager/unload_controller [INFO] [1754038262.983952]: Loading controller: pos_joint_traj_controller [INFO] [1754038263.034800]: Loading controller: joint_group_vel_controller [INFO] [1754038263.049548]: Controller Spawner: Loaded controllers: pos_joint_traj_controller, joint_group_vel_controller [INFO] [1754038263.181526427]: Robot mode is now POWER_OFF [INFO] [1754038263.183844862]: Robot's safety mode is now NORMAL [INFO] [1754038263.184011]: Controller Spawner: Waiting for service controller_manager/switch_controller [INFO] [1754038263.187691]: Controller Spawner: Waiting for service controller_manager/unload_controller [INFO] [1754038263.191352]: Loading controller: joint_state_controller [INFO] [1754038263.209029]: Loading controller: scaled_pos_joint_traj_controller [INFO] [1754038263.257595]: Loading controller: speed_scaling_state_controller [INFO] [1754038263.273802]: Loading controller: force_torque_sensor_controller [INFO] [1754038263.289856]: Controller Spawner: Loaded controllers: joint_state_controller, scaled_pos_joint_traj_controller, speed_scaling_state_controller, force_torque_sensor_controller [INFO] [1754038263.297306]: Started controllers: joint_state_controller, scaled_pos_joint_traj_controller, speed_scaling_state_controller, force_torque_sensor_controller
最新发布
08-02
<think>我们正在处理用户关于启动UR5机器人驱动时出现的两个警告问题:`calibration parameters mismatch` 和 `FIFO scheduling setup`。根据用户提供的引用[1][2],我们知道UR机器人的启动需要正确的标定文件(kinematics_config)和正确的网络配置。 ### 问题分析 1. **calibration parameters mismatch** 这个警告通常表示机器人的实际标定参数与提供的标定文件(YAML)中的参数不匹配。这可能是由于: - 使用的标定文件不是当前机器人的(例如,使用了默认文件或过时的文件)。 - 机器人固件更新后标定参数发生变化。 2. **FIFO scheduling setup** 这个警告与实时性能有关。`ur_robot_driver` 推荐使用 FIFO 调度策略以提高实时性。这需要设置线程的调度策略为 `SCHED_FIFO`,通常需要提升进程的权限(如使用 `sudo` 或设置 `cap_sys_nice` 能力)。 ### 解决方案 #### 1. 解决标定参数不匹配问题 **步骤:重新生成标定文件** 1. 确保机器人已上电且网络连接正常。 2. 使用 `calibration_correction` 节点从机器人读取当前标定参数并保存到新的YAML文件: ```bash roslaunch ur_calibration calibration_correction.launch \ robot_ip:=192.168.56.10 \ target_filename:="${HOME}/ur_ws/src/fmauch_universal_robot/ur_description/config/ur5_calibration.yaml" ``` 注意:将 `robot_ip` 替换为实际机器人的IP地址,`target_filename` 替换为你想要保存的路径。 3. 在启动 `ur_robot_driver` 时使用新生成的标定文件: ```bash roslaunch ur_robot_driver ur5_bringup.launch \ robot_ip:=192.168.56.10 \ kinematics_config:="${HOME}/ur_ws/src/fmauch_universal_robot/ur_description/config/ur5_calibration.yaml" ``` #### 2. 解决 FIFO 调度警告 **方法1:使用 `sudo` 启动节点(不推荐,因为会改变环境)** ```bash sudo -E roslaunch ur_robot_driver ur5_bringup.launch robot_ip:=192.168.56.10 ... ``` 注意:`-E` 保留当前用户环境变量,但使用 `sudo` 可能带来安全风险。 **方法2:设置能力(推荐)** 1. 为启动程序(如 `roslaunch` 或 `ur_robot_driver_node`)设置 `cap_sys_nice` 能力: ```bash sudo setcap cap_sys_nice+eip $(readlink -f `which python3`) # 如果使用Python节点 ``` 注意:如果 `ur_robot_driver` 是C++节点,则需要找到该可执行文件的路径并设置能力。 2. 如果上述方法无效,可以修改启动文件以忽略FIFO调度警告(不推荐,因为可能影响性能): 在启动文件中添加参数 `use_fifo_scheduler:=false`,但这样会禁用FIFO调度。 ### 验证解决方案 - 重新启动机器人驱动: ```bash roslaunch ur_robot_driver ur5_bringup.launch robot_ip:=192.168.56.10 kinematics_config:=/path/to/your/calibration.yaml ``` 检查警告是否消失。 ### 注意事项 - 确保标定文件路径正确,且文件内容有效。 - 如果使用 `setcap`,注意每次更新Python或节点后可能需要重新设置。 ### 引用说明 用户提供的引用[1][2]描述了标定文件的生成和使用方法,我们据此给出了重新生成标定文件的步骤。 §§相关问题§§ 1. 如何验证UR机器人的标定参数是否正确? 2. 除了FIFO调度,还有哪些方法可以优化ROS节点的实时性能? 3. 使用`sudo`启动ROS节点有哪些潜在风险? 4. 如何永久设置Linux进程的能力(capabilities)? 5. 在UR机器人驱动中,`kinematics_config`参数的作用是什么?</think>### 🔧 UR5机器人驱动启动问题排查指南 针对您启动`ur_robot_driver`时遇到的`calibration parameters mismatch`和`FIFO scheduling setup`警告,以下是详细排查步骤: #### 1. **标定参数不匹配警告解决 (`calibration parameters mismatch`)** ```bash # 步骤1: 重新生成标定文件 roslaunch ur_calibration calibration_correction.launch \ robot_ip:=192.168.56.10 \ target_filename:="${HOME}/ur_ws/calibration/ur5_actual_calibration.yaml" # 步骤2: 使用新标定文件启动驱动 roslaunch ur_robot_driver ur5_bringup.launch \ robot_ip:=192.168.56.10 \ kinematics_config:="${HOME}/ur_ws/calibration/ur5_actual_calibration.yaml" ``` - **关键点**: - 确保`target_filename`和`kinematics_config`使用**完全相同**的文件路径 - 标定文件应包含机器人当前的精确参数[^2] - 每次硬件调整后需重新生成标定文件 #### 2. **FIFO调度警告解决 (`FIFO scheduling setup`)** ```bash # 方法1: 授予实时调度权限(推荐) sudo setcap 'cap_sys_nice=eip' $(readlink -f $(which python3)) # 为Python解释器添加能力 # 方法2: 启动时提升权限 sudo -E roslaunch ur_robot_driver ur5_bringup.launch ... # -E保留用户环境变量 # 方法3: 内核级优化(高级) echo 'kernel.sched_rt_runtime_us = -1' | sudo tee /etc/sysctl.d/99-rt.conf sudo sysctl -p ``` - **警告原因**: - 实时数据交换需要FIFO调度策略 - 默认用户权限不足,需特殊配置[^1] #### 3. **完整启动流程验证** ```mermaid graph TD A[机器人上电] --> B[网络连接测试] B --> C[生成标定文件] C --> D[启动bringup] D --> E{是否报错?} E -->|是| F[检查标定文件] E -->|是| G[检查权限配置] E -->|否| H[正常操作] ``` #### 4. **常见错误排查表** | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | 标定参数不匹配 | 1. 使用默认标定文件<br>2. 硬件更换后未更新 | 重新生成标定文件[^2] | | FIFO调度失败 | 1. 权限不足<br>2. 内核配置限制 | 使用`setcap`或`sudo`启动 | | 网络连接超时 | 1. IP地址错误<br>2. 防火墙阻挡 | `ping 192.168.56.10`测试 | | 关节状态异常 | 1. 标定参数错误<br>2. 驱动版本不匹配 | 检查UR固件与驱动版本兼容性 | > **重要提示**:标定文件中的参数精度直接影响运动控制精度,建议每次机械结构调整后重新校准[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值