ros版本:noetic
官方教程地址MoveIt1
官方教程地址MoveIt2
安装MoveIt!
通过以下命令安装MoveI!
sudo apt install ros-noetic-moveit
follow_joint_trajectory
允许客户端向机器人控制器发送关节轨迹。
轨迹以关节位置、速度和加速度的列表形式指定,控制器将尝试尽可能精确地跟踪轨迹。
JointTrajectoryAction:
关节轨迹动作组,包括空间轨迹的接收,机械臂对规划轨迹的执行结果等信息。
Joint States Topic:
关节状态话题,描述机械臂中,各个关节执行的角度状态。
move_group 通过参数服务器(param server)获取以下信息:
URDF:robot_description 参数,获取机器人 URDF 模型信息
SRDF:robot_description_semantic参数,获取机器人模型的配置信息,SRDF 是通过 MoveIt Setup Assistant 生成的;
MoveIt configuration:机器人的其他配置信息,如关节限位、运动学插件、运动规划插件等,Config files for these components are automatically generated by the MoveIt setup assistant and stored in the config directory of the corresponding MoveIt config package for the robot.
以JAKA zu12 为例
SRDF文件(Systematic Robot Description Format)是一种机器人描述文件格式,用于描述机器人的运动学和动力学模型。SRDF文件由一系列XML元素组成,每个元素描述机器人的某个方面。 SRDF文件可以用于在机器人仿真器中创建机器人模型,也可以用于在机器人控制器中编写控制代码。
Limits for the cartesian position of the robot
机器人笛卡尔位置的限制
The joint_limits.yaml file contains the joint limits for the robot. The joint limits are the maximum and minimum values that the joints can move to. The joint limits are used to prevent the robot from moving into a position where it could damage itself.
文件 joint_limits.yaml 包含了机器人的关节限制。关节限制是关节可以移动到的最大和最小值。关节限制用于防止机器人移动到可能损坏自身的位置。
The fake_controllers.yaml file contains the parameters for the fake controllers. The fake controllers are used to simulate the behavior of the real controllers. The parameters in the fake_controllers.yaml file control the behavior of the fake controllers, such as the maximum velocity and acceleration of the robot.
文件 fake_controllers.yaml 包含了假控制器的参数。假控制器用于模拟真实控制器的行为。fake_controllers.yaml 文件中的参数控制了假控制器的行为,例如机器人的最大速度和加速度。
The simple_moveit_controllers.yaml file contains the parameters for the simple MoveIt controllers. The simple MoveIt controllers are used to control the robot in the MoveIt environment. The parameters in the simple_moveit_controllers.yaml file control the behavior of the simple MoveIt controllers, such as the maximum velocity and acceleration of the robot.
文件 simple_moveit_controllers.yaml 包含了简单的 MoveIt 控制器的参数。简单的 MoveIt 控制器用于在 MoveIt 环境中控制机器人。simple_moveit_controllers.yaml 文件中的参数控制了简单的 MoveIt 控制器的行为,例如机器人的最大速度和加速度。
The gazebo_controllers.yaml file contains the parameters for the gazebo controllers. The gazebo controllers are used to control the robot in the Gazebo simulator. The parameters in the gazebo_controllers.yaml file control the behavior of the gazebo controllers, such as the maximum velocity and acceleration of the robot.
文件 gazebo_controllers.yaml 包含了 gazebo 控制器的参数。gazebo 控制器用于在 Gazebo 仿真器中控制机器人。gazebo_controllers.yaml 文件中的参数控制了 gazebo 控制器的行为,例如机器人的最大速度和加速度。
The ros_controllers.yaml file contains the parameters for the ROS controllers. The ROS controllers are used to control the robot in the ROS environment. The parameters in the ros_controllers.yaml file control the behavior of the ROS controllers, such as the maximum velocity and acceleration of the robot.
文件 ros_controllers.yaml 包含了 ROS 控制器的参数。ROS 控制器用于在 ROS 环境中控制机器人。ros_controllers.yaml 文件中的参数控制了 ROS 控制器的行为,例如机器人的最大速度和加速度。
#Simulation settings for using moveit_sim_controllers
moveit_sim_hw_interface:
joint_model_group: jaka_zu12
joint_model_group_pose: zero
# Settings for ros_control_boilerplate control loop
generic_hw_control_loop:
loop_hz: 300
cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
- joint_6
sim_control_mode: 1 # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
controller_list:
- name: jaka_zu12_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
- joint_6
jaka_zu12_controller:
type: position_controllers/JointTrajectoryController
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
- joint_6
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0
joint_1: {trajectory: 0.1, goal: 0}
joint_2: {trajectory: 0.1, goal: 0}
joint_3: {trajectory: 0.1, goal: 0}
joint_4: {trajectory: 0.1, goal: 0}
joint_5: {trajectory: 0.1, goal: 0}
joint_6: {trajectory: 0.1, goal: 0}
gains:
joint_1: {p: 100, d: 1, i: 1, i_clamp: 1}
joint_2: {p: 100, d: 1, i: 1, i_clamp: 1}
joint_3: {p: 100, d: 1, i: 1, i_clamp: 1}
joint_4: {p: 100, d: 1, i: 1, i_clamp: 1}
joint_5: {p: 100, d: 1, i: 1, i_clamp: 1}
joint_6: {p: 100, d: 1, i: 1, i_clamp: 1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 1
The kinematics.yaml file contains the kinematic parameters for the robot. The kinematic parameters are used to calculate the position and orientation of the robot’s joints given the joint angles.
文件 kinematics.yaml 包含了机器人的运动学参数。运动学参数用于计算给定关节角度时机器人关节的位置和方向。
The sensors_3d.yaml file contains the parameters for the 3D sensors. The 3D sensors are used to detect objects in the environment. The parameters in the sensors_3d.yaml file control the behavior of the 3D sensors, such as the range and resolution of the sensors.
文件 sensors_3d.yaml 包含了 3D 传感器的参数。3D 传感器用于检测环境中的物体。sensors_3d.yaml 文件中的参数控制了 3D 传感器的行为,例如传感器的范围和分辨率。
The ompl_planning.yaml file contains the parameters for the OMPL planner. The OMPL planner is a sampling-based planner that uses a variety of heuristics to find a collision-free path between the start and goal states. The parameters in the ompl_planning.yaml file control the behavior of the OMPL planner, such as the number of iterations to run the planner for, the maximum time to run the planner for, and the maximum number of nodes to expand in the planner.
文件 ompl_planning.yaml 包含了 OMPL 规划器的参数。OMPL 规划器是一种基于采样的规划器,它使用各种启发式方法来找到起点和目标状态之间的无碰撞路径。ompl_planning.yaml 文件中的参数控制了 OMPL 规划器的行为,例如运行规划器的迭代次数、运行规划器的最大时间以及规划器中要扩展的最大节点数。
The chomp_planning.yaml file contains the parameters for the CHOMP planner. The CHOMP planner is a sampling-based planner that uses a heuristic to quickly find a collision-free path between the start and goal states. The parameters in the chomp_planning.yaml file control the behavior of the CHOMP planner, such as the number of iterations to run the planner for, the maximum time to run the planner for, and the maximum number of nodes to expand in the planner.
文件 chomp_planning.yaml 包含了 CHOMP 规划器的参数。CHOMP 规划器是一种基于采样的规划器,它使用启发式方法快速找到起点和目标状态之间的无碰撞路径。chomp_planning.yaml 文件中的参数控制了 CHOMP 规划器的行为,例如运行规划器的迭代次数、运行规划器的最大时间以及规划器中要扩展的最大节点数。
stomp_planning.yaml is a configuration file used for path planning. STOMP (Stochastic Trajectory Optimization for Motion Planning) is an optimization-based motion planning algorithm used to generate motion trajectories for robots or vehicles in complex environments. The stomp_planning.yaml file contains the parameter settings for the STOMP algorithm and the description of the planning environment. By adjusting these parameters, the results of path planning can be influenced.
stomp_planning.yaml是一个用于路径规划的配置文件。STOMP(Stochastic Trajectory Optimization for Motion Planning)是一种基于优化的运动规划算法,用于在复杂环境中生成机器人或车辆的运动轨迹。stomp_planning.yaml文件包含了STOMP算法的参数设置和规划环境的描述,通过调整这些参数可以影响路径规划的结果。
OMPL是一个开源的运动规划库,提供了多种规划算法的实现。它具有灵活性和可扩展性,可以适应不同的问题和需求。OMPL支持多种搜索策略和采样方法,可以在不同的场景中进行定制和调整。
CHOMP(Covariant Hamiltonian Optimization for Motion Planning)是一种优化运动规划算法,用于解决机器人运动路径规划问题。它的目标是找到在给定环境中,从初始状态到目标状态的最佳运动轨迹。用于解决机器人运动路径规划问题。它的目标是找到在给定环境中,从初始状态到目标状态的最佳运动轨迹。
CHOMP算法基于拉格朗日动力学优化,它将运动规划问题转化为一个优化问题,通过迭代优化来求解最佳轨迹。它使用了一种称为“协变哈密顿优化”的技术,该技术能够考虑到机器人的动力学约束和环境的碰撞避免。
CHOMP算法的基本思想是通过迭代优化来不断改进轨迹,直到找到一个满足约束条件且最优的轨迹。在每次迭代中,它通过计算当前轨迹的梯度来更新轨迹,并使用线性二次规划来处理碰撞避免约束。
CHOMP算法的优点是能够处理复杂的运动规划问题,同时考虑到了机器人的动力学约束和环境的碰撞避免。它在实际应用中被广泛用于机器人运动控制、自动驾驶汽车和无人机路径规划等领域。
STOMP(Stochastic Trajectory Optimization for Motion Planning)是一种基于概率的运动规划算法,用于解决机器人运动路径规划问题。它的目标是找到在给定环境中,从初始状态到目标状态的一条最优概率轨迹。
STOMP算法的基本思想是通过随机采样来生成候选轨迹,然后对这些候选轨迹进行评估,并选择最优的轨迹作为最终结果。在评估候选轨迹时,STOMP算法使用了一种称为“概率优化”的技术,该技术能够考虑到机器人的动力学约束和环境的碰撞避免。
STOMP算法的优点是能够处理复杂的运动规划问题,并且能够在较短的时间内找到较优的轨迹。它在实际应用中被广泛用于机器人运动控制、自动驾驶汽车和无人机路径规划等领域。
以节卡为例
控制器的管理者会将ros_controllers加载到参数服务器
<launch>
<arg name="execution_type" />
<!-- loads moveit_controller_manager on the parameter server which is taken as argument 在作为参数的 参数服务器 上加载moveit_controller_manager
if no argument is passed, moveit_simple_controller_manager will be set 如果没有传递参数,moveit_simple_controller_manager将被设置 -->
<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>
<!-- loads ros_controllers to the param server 将ros_controllers加载到参数服务器 -->
<rosparam file="$(find jaka_zu12_moveit_config)/config/ros_controllers.yaml"/>
</launch>
启动控制器管理者
<launch>
<!-- This file makes it easy to include the settings for trajectory execution -->
<arg name="execution_type" default="interpolate" />
<!-- Flag indicating whether MoveIt! is allowed to load/unload or switch controllers -->
<arg name="moveit_manage_controllers" default="true"/>
<param name="moveit_manage_controllers" value="$(arg moveit_manage_controllers)"/>
<!-- When determining the expected duration of a trajectory, this multiplicative factor is applied to get the allowed duration of execution 在确定轨迹的预期持续时间时,应用此乘法因子来获得允许的执行持续时间-->
<param name="trajectory_execution/allowed_execution_duration_scaling" value="1.2"/> <!-- default 1.2 -->
<!-- Allow more than the expected execution time before triggering a trajectory cancel (applied after scaling) 在触发轨迹取消之前允许超过预期的执行时间(在缩放后应用) -->
<param name="trajectory_execution/allowed_goal_duration_margin" value="0.5"/> <!-- default 0.5 -->
<!-- Allowed joint-value tolerance for validation that trajectory's first point matches current robot state 允许关节值公差验证轨迹的第一个点与当前机器人状态匹配 -->
<param name="trajectory_execution/allowed_start_tolerance" value="0.01"/> <!-- default 0.01 -->
<!-- Load the robot specific controller manager; this sets the moveit_controller_manager ROS parameter 加载机器人特定控制器管理器;这将设置moveit_controller_manager ROS参数 -->
<arg name="moveit_controller_manager" default="jaka_zu12" />
<include file="$(find jaka_zu12_moveit_config)/launch/$(arg moveit_controller_manager)_moveit_controller_manager.launch.xml">
<arg name="execution_type" value="$(arg execution_type)" />
</include>
</launch>
加载trajectory_execution.launch.xml文件
<launch>
<!-- GDB Debug Option GDB调试选项-->
<arg name="debug" default="false" />
<arg unless="$(arg debug)" name="launch_prefix" value="" />
<arg if="$(arg debug)" name="launch_prefix"
value="gdb -x $(find jaka_zu12_moveit_config)/launch/gdb_settings.gdb --ex run --args" />
<!-- Verbose Mode Option 详细模式选项 -->
<arg name="info" default="$(arg debug)" />
<arg unless="$(arg info)" name="command_args" value="" />
<arg if="$(arg info)" name="command_args" value="--debug" />
<!-- move_group settings -->
<arg name="pipeline" default="ompl" />
<arg name="allow_trajectory_execution" default="true"/>
<arg name="fake_execution" default="false"/> #修改为false,下面为真实的机器人运动,而不是假的#
<arg name="execution_type" default="interpolate"/> <!-- set to 'last point' to skip intermediate trajectory in fake execution -->
<arg name="max_safe_path_cost" default="1"/>
<arg name="jiggle_fraction" default="0.05" />
<arg name="publish_monitored_planning_scene" default="true"/>
<arg name="capabilities" default=""/>
<arg name="disable_capabilities" default=""/>
<!-- load these non-default MoveGroup capabilities (space seperated)加载这些非默认的MoveGroup功能(空格分隔) -->
<!--
<arg name="capabilities" value="
a_package/AwsomeMotionPlanningCapability
another_package/GraspPlanningPipeline
" />
-->
<!-- 禁止这些默认的移动组功能(空格分隔) -->
<!--
<arg name="disable_capabilities" value="
move_group/MoveGroupKinematicsService
move_group/ClearOctomapService
" />
-->
<arg name="load_robot_description" default="true" />
<!-- load URDF, SRDF and joint_limits configuration 加载URDF, SRDF和joint_limits配置-->
<include file="$(find jaka_zu12_moveit_config)/launch/planning_context.launch">
<arg name="load_robot_description" value="$(arg load_robot_description)" />
</include>
<!-- Planning Functionality 规划功能-->
<include ns="move_group" file="$(find jaka_zu12_moveit_config)/launch/planning_pipeline.launch.xml">
<arg name="pipeline" value="$(arg pipeline)" />
<param name="capabilities" value="$(arg capabilities)"/>
<param name="disable_capabilities" value="$(arg disable_capabilities)"/>
</include>
<!-- Trajectory Execution Functionality 轨迹执行功能-->
<include ns="move_group" file="$(find jaka_zu12_moveit_config)/launch/trajectory_execution.launch.xml" if="$(arg allow_trajectory_execution)">
<arg name="moveit_manage_controllers" value="true" />
<arg name="moveit_controller_manager" value="jaka_zu12" unless="$(arg fake_execution)"/>
<arg name="moveit_controller_manager" value="fake" if="$(arg fake_execution)"/>
<arg name="execution_type" value="$(arg execution_type)" />
</include>
<!-- Sensors Functionality 传感器功能-->
<include ns="move_group" file="$(find jaka_zu12_moveit_config)/launch/sensor_manager.launch.xml" if="$(arg allow_trajectory_execution)">
<arg name="moveit_sensor_manager" value="jaka_zu12" />
</include>
<!-- Start the actual move_group node/action server 启动实际的move_group节点/动作服务器 -->
<node name="move_group" launch-prefix="$(arg launch_prefix)" pkg="moveit_ros_move_group" type="move_group" respawn="false" output="screen" args="$(arg command_args)">
<!-- Set the display variable, in case OpenGL code is used internally -->
<env name="DISPLAY" value="$(optenv DISPLAY :0)" />
<param name="allow_trajectory_execution" value="$(arg allow_trajectory_execution)"/>
<param name="max_safe_path_cost" value="$(arg max_safe_path_cost)"/>
<param name="jiggle_fraction" value="$(arg jiggle_fraction)" />
<!-- Publish the planning scene of the physical robot so that rviz plugin can know actual robot -->
<!-- 发布物理机器人的规划场景,使rviz插件能够了解实际机器人 -->
<param name="planning_scene_monitor/publish_planning_scene" value="$(arg publish_monitored_planning_scene)" />
<param name="planning_scene_monitor/publish_geometry_updates" value="$(arg publish_monitored_planning_scene)" />
<param name="planning_scene_monitor/publish_state_updates" value="$(arg publish_monitored_planning_scene)" />
<param name="planning_scene_monitor/publish_transforms_updates" value="$(arg publish_monitored_planning_scene)" />
</node>
</launch>
move_group.launch
moveit_rviz.launch
moveit.rviz
default_warehouse_db.launch
<launch>
<!-- specify the planning pipeline 指定规划管道 -->
<arg name="pipeline" default="ompl" />
<!-- By default, we do not start a database (it can be large) 默认情况下,我们不启动数据库(它可能很大)。 -->
<arg name="db" default="false" />
<!-- Allow user to specify database location -->
<arg name="db_path" default="$(find jaka_zu12_moveit_config)/default_warehouse_mongo_db" />
<!-- By default, we are not in debug mode 默认情况下,我们不处于调试模式 -->
<arg name="debug" default="false" />
<!-- By default, we will load or override the robot_description 默认情况下,我们将加载或覆盖 robot_description -->
<arg name="load_robot_description" default="true"/>
<!-- Set execution mode for fake execution controllers 设置假执行控制器的执行模式 -->
<arg name="execution_type" default="interpolate" />
<!--
By default, hide joint_state_publisher's GUI
MoveIt!'s "demo" mode replaces the real robot driver with the joint_state_publisher.
The latter one maintains and publishes the current joint configuration of the simulated robot.
It also provides a GUI to move the simulated robot around "manually".
This corresponds to moving around the real robot without the use of MoveIt.
默认情况下,隐藏joint_state_publisher的GUI
MoveIt !的“demo”模式用joint_state_publisher替换了真正的机器人驱动程序。
后者维护和发布仿真机器人的当前关节构型。
它还提供了一个GUI来“手动”移动模拟机器人。
` 这相当于在不使用MoveIt的情况下移动真实的机器人。
-->
<arg name="use_gui" default="false" />
<arg name="use_rviz" default="true" />
<!-- If needed, broadcast static tf for robot root如果需要,为机器人根广播静态tf -->
<!-- 6. We do not have a robot connected, so publish fake joint states 6. 我们没有机器人连接,所以发布假的联合状态 (6)joint_state_publisheri订阅话题名配置 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" unless="$(arg use_gui)">
<!-- <rosparam param="source_list" [move_group/fake_controller_joint_states]</rosparam> -->
<rosparam param="source_list">[/joint_states]</rosparam>
</node>
<!-- <node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" if="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]</rosparam>
</node> -->
<!-- Given the published joint states, publish tf for the robot links 给定已发布的关节状态,发布机器人链接的tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />
<!-- Run the main MoveIt! executable without trajectory execution (we do not have controllers configured by default) 运行主MoveIt!可执行的,没有轨迹执行(我们没有默认配置的控制器) -->
<include file="$(find jaka_zu12_moveit_config)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="fake_execution" value="false"/> <------------------ 5. false
<arg name="execution_type" value="$(arg execution_type)"/>
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="pipeline" value="$(arg pipeline)"/>
<arg name="load_robot_description" value="$(arg load_robot_description)"/>
</include>
<!-- Run Rviz and load the default config to see the state of the move_group node -->
<include file="$(find jaka_zu12_moveit_config)/launch/moveit_rviz.launch" if="$(arg use_rviz)">
<arg name="rviz_config" value="$(find jaka_zu12_moveit_config)/launch/moveit.rviz"/>
<arg name="debug" value="$(arg debug)"/>
</include>
<!-- If database loading was enabled, start mongodb as well -->
<include file="$(find jaka_zu12_moveit_config)/launch/default_warehouse_db.launch" if="$(arg db)">
<arg name="moveit_warehouse_database_path" value="$(arg db_path)"/>
</include>
</launch>
jaka_zu12.urdf
gazebo.launch
move_group.launch
moveit_rviz.launch
moveit.rviz
default_warehouse_db.launch
<launch>
<!-- By default, we do not start a database (it can be large) 默认情况下,我们不启动数据库(它可能很大)。-->
<arg name="db" default="false" />
<!-- Allow user to specify database location -->
<arg name="db_path" default="$(find jaka_zu12_moveit_config)/default_warehouse_mongo_db" />
<!-- By default, we are not in debug mode 默认情况下,我们不处于调试模式 -->
<arg name="debug" default="false" />
<!-- By default, we won't load or override the robot_description 默认情况下,我们不会加载或覆盖robot_description -->
<arg name="load_robot_description" default="false"/>
<!--
By default, hide joint_state_publisher's GUI
MoveIt!'s "demo" mode replaces the real robot driver with the joint_state_publisher.
The latter one maintains and publishes the current joint configuration of the simulated robot.
It also provides a GUI to move the simulated robot around "manually".
This corresponds to moving around the real robot without the use of MoveIt.
-->
<arg name="use_gui" default="false" />
<!-- Gazebo specific options Gazebo 特定选项 -->
<arg name="gazebo_gui" default="true"/>
<arg name="paused" default="false"/>
<!-- By default, use the urdf location provided from the package -->
<arg name="urdf_path" default="$(find jaka_description)/urdf/jaka_zu12.urdf"/>
<!-- launch the gazebo simulator and spawn the robot gazebo模拟器并生成机器人 -->
<include file="$(find jaka_zu12_moveit_config)/launch/gazebo.launch" >
<arg name="paused" value="$(arg paused)"/>
<arg name="gazebo_gui" value="$(arg gazebo_gui)"/>
<arg name="urdf_path" value="$(arg urdf_path)"/>
</include>
<!-- If needed, broadcast static tf for robot root 如果需要,为机器人根广播静态tf -->
<!-- We do not have a robot connected, so publish fake joint states -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" unless="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]</rosparam>
<rosparam param="source_list">[/joint_states]</rosparam>
</node>
<node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" if="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]</rosparam>
<rosparam param="source_list">[/joint_states]</rosparam>
</node>
<!-- Given the published joint states, publish tf for the robot links 给定已发布的关节状态,发布机器人链接的tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />
<!-- Run the main MoveIt! executable without trajectory execution (we do not have controllers configured by default) 运行主MoveIt!可执行的,没有轨迹执行(我们没有默认配置的控制器) -->
<include file="$(find jaka_zu12_moveit_config)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="fake_execution" value="false"/>
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="load_robot_description" value="$(arg load_robot_description)"/>
</include>
<!-- Run Rviz and load the default config to see the state of the move_group node 运行Rviz并加载默认配置以查看move_group节点的状态 -->
<include file="$(find jaka_zu12_moveit_config)/launch/moveit_rviz.launch">
<arg name="rviz_config" value="$(find jaka_zu12_moveit_config)/launch/moveit.rviz"/>
<arg name="debug" value="$(arg debug)"/>
</include>
<!-- If database loading was enabled, start mongodb as well 如果启用了数据库加载,也要启动mongodb -->
<include file="$(find jaka_zu12_moveit_config)/launch/default_warehouse_db.launch" if="$(arg db)">
<arg name="moveit_warehouse_database_path" value="$(arg db_path)"/>
</include>
</launch>