1.ros中的控制器插件
ros_control是用于将ROS中开发的一系列功能包应用到实际机器人上的插件。
controller manager用于管理各个不同的controller,如移动控制和运动控制分别的控制器,其中controller主要是用PID控制。
1.1常用控制器(controllers)
joint_state_controller:监控状态,没有控制功能,通过话题发出机器人状态。
joint_effort_controller:力控制
joint_position_controller:位置控制,最为常用。
joint_velocity_controller:速度控制
1.2 gazebo仿真所需模型完善
1.gazebo中仿真模型需要,,三个属性缺一不可 (惯性参数,可视化参数和碰撞参数)。
2.gezebo中要将模型参数改为较小的质量和较大的惯性矩,能使gazebo仿真更加稳定。
3.transmissions:给每个JOINT添加传动装置和电机(gazebo中已定义的宏)。
4.为电机添加gazebo控制器插件。
1.3构建MOVEIT+GAZEBO仿真
1.MOVEIT这个框架其输入有两大种情况,一为Rviz的GUI输入,二为C++或Python的API输入;
2. 输出的Trajectory Data即为机器人的位置和相应的速度与加速度信息(并非话题,无法通过topic查看到);
3.Moveit接口Follow Joint Trajectory负责封装好轨迹信息后发给Gazebo/robot接口;
4. moveit规划的较粗的轨迹点,后续Trajectory Controller完成更细节的插补。
1.3.1 关节轨迹控制器(Joint Trajectoy Controller)
接受轨迹action信息并完成插补运算再传递给关节。
线性样条,三次样条,五次样条。
1.3.2 关节状态控制器(Joint State Controller)
反馈发布关节参数信息。
1.3.3 配置
三个控制器都需要(1)参数配置,配置yaml文件;(2)控制器启动,launch文件。
2.moveit的API接口
2.1编程流程
1.连接控制需要的规划组,即assistant中的group;
2设置目标位姿(关节空间或笛卡尔空间);
3.设置运动约束(可选);
4.使用Moveit规划一条到达目标的轨迹;
5.修改轨迹(可选);
6.执行。
2.2 案例
1.运动学正解运动,由home到自定关节空间位置;
2.运动学逆解,由home到笛卡尔空间为止(四元数+POSITION表达),没运行起来。。。
3.直线运动,调用笛卡尔路径函数,即使其按某一路径运动;
(plan, fraction) = arm.compute_cartesian_path (
waypoints, # waypoint poses,路点列表
0.01, # eef_step,终端步进值
0.0, # jump_threshold,跳跃阈值
True) # avoid_collisions,避障规划
plan是规划得出的运动轨迹;
fraction为描述规划成功的轨迹在给定路点列表中的覆盖率[0~1]。若fraction小于1,说明给定的路点列表没办法完整规划。
(需要特别强调一下,跳跃阈值表示如果某点计算不出或无法达到是否要跳跃,若设为0,即不跳跃)
4.attached,即抓取物体后,物体也会被考虑避障问题,此例程的核心在于场景监视器,用于监视外界场景变化,相对end坐标系的位置,attach_box附着,add_box是添加到环境中而非附着,是障碍物。
scene = PlanningSceneInterface()
scene.attach_box(end_effector_link, 'tool', p, tool_size)
2.5.第六讲小结
1关节空间运动:
set_joint_value_target
set_pose_target
2.笛卡尔空间运动
compute_cartesian
3.自主避障规划
rviz添加障碍物
add_box
attach_box