1、修改XXX.moveit_config/config/ros_controllers.yaml
# MoveIt-specific simulation settings
moveit_sim_hw_interface:joint_model_group: controllers_initial_group_joint_model_group_pose: controllers_initial_pose_
# Settings for ros_control control loop
generic_hw_control_loop:loop_hz: 300cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:joints:- magician_joint1- magician_joint2- magician_joint3sim_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/JointStateControllerpublish_rate: 50
controller_list:- name: magician_arm_controlleraction_ns: follow_joint_trajectorydefault: Truetype: FollowJointTrajectoryjoints:- magician_joint1- magician_joint2- magician_joint3
2、修改XXX.moveit_config/launch/ros_controllers.yaml
<?xml version="1.0"?>
<launch><!-- Load joint controller configurations from YAML file to parameter server --><rosparam file="$(find magician_moveit_config)/config/ros_controllers.yaml" command="load"/><!-- Load the controllers --><node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"output="screen" args=""/></launch>
3、修改XXX.moveit_config/launch/moveit_rviz.launch
<launch><arg name="debug" default="false" /><arg unless="$(arg debug)" name="launch_prefix" value="" /><arg if="$(arg debug)" name="launch_prefix" value="gdb --ex run --args" /><arg name="config" default="false" /><arg unless="$(arg config)" name="command_args" value="" /><arg if="$(arg config)" name="command_args" value="-d $(find magician_moveit_config)/launch/moveit.rviz" /><node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false"args="$(arg command_args)" output="screen"><rosparam command="load" file="$(find magician_moveit_config)/config/kinematics.yaml"/></node></launch>
4、在XXX.moveit_config/launch/move_group.launch修改一点小细节
<launch><include file="$(find magician_moveit_config)/launch/planning_context.launch" /><!-- GDB Debug Option --><arg name="debug" default="false" /><arg unless="$(arg debug)" name="launch_prefix" value="" /><arg if="$(arg debug)" name="launch_prefix"value="gdb -x $(find magician_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="allow_trajectory_execution" default="true"/><arg name="fake_execution" default="false"/><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) --><!--<arg name="capabilities" value="a_package/AwsomeMotionPlanningCapabilityanother_package/GraspPlanningPipeline" />--><!-- inhibit these default MoveGroup capabilities (space seperated) --><!--<arg name="disable_capabilities" value="move_group/MoveGroupKinematicsServicemove_group/ClearOctomapService" />--><!-- Planning Functionality --><include ns="move_group" file="$(find magician_moveit_config)/launch/planning_pipeline.launch.xml"><arg name="pipeline" value="ompl" /></include><!-- Trajectory Execution Functionality --><include ns="move_group" file="$(find magician_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="magician" unless="$(arg fake_execution)"/><arg name="moveit_controller_manager" value="fake" if="$(arg fake_execution)"/></include><!-- Sensors Functionality --><include ns="move_group" file="$(find magician_moveit_config)/launch/sensor_manager.launch.xml" if="$(arg allow_trajectory_execution)"><arg name="moveit_sensor_manager" value="magician" /></include><!-- Start the actual move_group node/action server --><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)" /><param name="capabilities" value="$(arg capabilities)"/><param name="disable_capabilities" value="$(arg disable_capabilities)"/><!-- Publish the planning scene of the physical robot so that rviz plugin can know actual robot --><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>
5、修改trajectory_execution.launch.xml
<launch><!-- This file makes it easy to include the settings for trajectory execution --><!-- 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="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 --><arg name="moveit_controller_manager" default="magician" /><include file="$(find magician_moveit_config)/launch/$(arg moveit_controller_manager)_moveit_controller_manager.launch.xml" /></launch>
6、创建magician_moveit_controller_manager.launch.xml文件,并且启动ros_controllers.yaml
<launch><!-- loads moveit_controller_manager on the parameter server which is taken as argument if no argument is passed, moveit_simple_controller_manager will be set --><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 --><rosparam file="$(find magician_moveit_config)/config/ros_controllers.yaml"/>
</launch>
7、新建一个功能包,里面放置启动文件
<?xml version="1.0"?>
<launch><arg name="paused" default="true"/><arg name="gazebo_gui" default="true"/><arg name="urdf_path" default="$(find magician_description)/urdf/magician.urdf.xacro"/><!-- startup simulated world --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" default="worlds/empty.world"/><arg name="paused" value="$(arg paused)"/><arg name="gui" value="$(arg gazebo_gui)"/></include><!-- send robot urdf to param server --><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find magician_description)/urdf/magician.urdf.xacro'" /><!-- push robot_description to factory and spawn robot in gazebo at the origin, change x,y,z arguments to spawn in a different position --><node name="spawn_model" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model magician -param robot_description -x 0-y 0-z 0.14-J magician_joint1 0-J magician_joint2 0.785-J magician_joint3 0.785-unpause"/><rosparam file="$(find magician_description)/config/joint_state_controller.yaml" command="load"/><node name="joint_state_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn joint_state_controller" respawn="false" output="screen"/><rosparam file="$(find magician_description)/config/magician_arm_controller.yaml" command="load"/><node name="elfin_arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn magician_arm_controller" respawn="false" output="screen"/><!-- # The planning and execution components of MoveIt! configured to # publish the current configuration of the robot (simulated or real)# and the current state of the world as seen by the planner--><include file="$(find magician_moveit_config)/launch/move_group.launch"><arg name="publish_monitored_planning_scene" value="true" /></include><!-- # The visualization component of MoveIt! --><arg name="display" default="true"/><include file="$(find magician_moveit_config)/launch/moveit_rviz.launch" if="$(arg display)"><arg name="config" value="true"/></include></launch>
最后编译一下,启动launch文件。
到这里moveit和gazebo的联动到此结束。
我们通过以上部分举一反三,其他的机械臂在moveit和gazebo联动时也是这样配置的。