ros_control是ROS为开发者提供的机器人控制插件。

控制器(Controllers):
joint_stase_controller --- 监控机器人的状态
joint_effort_controller --- 力控制
joint_position_controller --- 位置控制
joint_velocity_controller --- 速度控制
Moveit!和gazebo联动:

在Moveit_config文件中找到config文件夹打开ros_controller.yaml,其中arm_controller 和 gripper将Moveit 生成的轨迹封装成 follow_joint_trajectory 类型的数据(这是一个数据结构,里边包含各个关节的轨迹点),在gazebo端,控制器arm_controller和gripper一定要Moveit严格一致,否则无法实现两者的联合仿真。
# Simulation settings for using moveit_sim_controllers
moveit_sim_hw_interface:
joint_model_group: arm
joint_model_group_pose: home
# 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:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
- gripper_finger1_joint
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: arm_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
- name: gripper
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- gripper_finger1_joint
然后修改launch文件中的ros_controlers.launch,并且将joint_state_controller arm_controller gripper添加进来就可以了。
<?xml version="1.0"?>
<launch>
<!-- Load joint controller configurations from YAML file to parameter server -->
<rosparam file="$(find ur5_dh_gripper_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="joint_state_controller arm_controller gripper"/>
</launch>
最后启动demo_gazebo.launch。
Moveit!编程接口
MoveIt!主要给用户提供了两种编程接口,一种Python的接口,另一种是C++的接口,这两种接口的使用非常类似,API基本上保持一致。
机械臂是通过关节空间来描述它的位姿状态。
机械臂的姿态是由它自身的电机的位置决定的,只要知道各个电机的位置就可以将整个机械臂的位姿求出来。
大致步骤:
1、连接控制需要的规划组;
2、设置目标位姿(笛卡尔空间);
3、设置运动约束;
4、使用Moveit!规划出一条到达目标的轨迹
5、修改轨迹
6、执行规划出的轨迹
Moveit!编程API网址:http://moveit.ros.org/code-api/
后面补充有关Moveit编程的相关知识