MoveIT Noetic控制真实机械臂


接前几篇:
ROS MoveIT1(Noetic)安装总结
Solidworks导出为URDF用于MoveIT总结(带prismatic)
MoveIT1 Assistant 总结
MoveIT Rviz和Gazebo联合仿真

环境

  • Ubuntu20.04;
  • ROS1 Noetic;
  • VMware

概述

在这里插入图片描述
目的:将原来/move_group发送给Gazebo的/control/follow_joint_trajectory(Action)发送给真实机械臂,Gazebo发送给/move_group和/robot_state_publisher的/joint_states(Topic)用真实机械臂发送。

指令:可以看到机械臂关节空间随时间变化的轨迹点,包含时间、速度、加速度。
我们的目的就是拿到这个数据给真实机械臂。

rostopic echo /move_group/display_planned_path

在这里插入图片描述

  • MoveIT的Time Parameterization提供了三种规划器

Time-optimal Trajectory Parameterization(TOTG)—— AddTimeOptimalParameterization(>=Melodic)
Iterative Spline Parameterization(ISP)—— AddIterativeSplineParameterization
Iterative Parabolic Time Parameterization(IPTP)—— AddTimeParameterization

https://blog.csdn.net/Kalenee/article/details/95889898

  • ROS三种关节轨迹控制器插补运算:

线性样条:位置连续,速度、加速度不连续
三次样条:位置和速度连续,加速度不连续
五次样条:位置、速度、加速度都连续(ROS默认使用的)

  • MoveIT Assistant 生成的文件的调用关系图:
    在这里插入图片描述
    红色为默认调用的选项。

  • 路径规划算法:

OMPL: OMPL(Open Motion Planning Library)是一个广泛使用的开源库,用于运动规划。它实现了多种算法,包括基于采样的路径规划,基于梯度的优化算法等。OMPL旨在为不同类型的机器人和环境提供通用的解决方案。

CHOMP: CHOMP(Covariant Hamiltonian Optimization for Motion Planning)是一种基于优化的方法,可以对机器人进行全身运动规划。CHOMP通过在时间和空间上对代价函数进行优化来规划路径。代价函数包括机器人的碰撞,平滑度和速度等因素。

OMPL-CHOMP:结合了OMPL和CHOMP的优点。它使用OMPL来解决采样问题,并使用CHOMP进行路径优化。OMPL-CHOMP提供了一种灵活的方法,可以在不同类型的机器人和环境中实现高质量的运动规划。

STOMP: STOMP(Stochastic Trajectory Optimization for Motion Planning)是一种基于优化的随机方法,用于高维空间中的路径规划。与CHOMP不同,STOMP使用随机梯度下降来解决优化问题。STOMP通过在代价函数中添加噪声,从而避免了陷入局部最优解的风险。

https://ros-planning.github.io/moveit_tutorials/doc/planning_adapters/planning_adapters_tutorial.html
https://blog.csdn.net/qq_34935373/article/details/105042352

配置修改

demo.launch中需要修改的地方:

......
<arg name="moveit_controller_manager" default="simple" />
......
<group if="$(eval arg('moveit_controller_manager') == 'simple')">
......
<rosparam param="source_list">[move_group/ros_controller_joint_states]</rosparam>
......

move_group.launch修改:

......
<arg name="moveit_controller_manager" default="simple" />
......

编写Action Server

之前在 Gazebo 中虚拟仿真的时候,是 Gazebo 的 ros_control 插件充当了 action server 的角色,让 MoveIt 端的 client 和 Gazebo 端的 server 建立了 action 通信连接。

因此,moveit扮演的是客户端,服务端需要编写。(move_group此时是follow_joint_trajectory的client端,动作消息是client端的move_group发布的。)

https://blog.csdn.net/qq_34935373/article/details/95916111
https://blog.csdn.net/huangjunsheng123/article/details/125958436

在assis_1下新建scripts文件夹,添加action_server.py,并设置属性和权限为可执行。编译:

catkin build -DCATKIN_WHITELIST_PACKAGES="assis_1"

action_server.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
import roslib
import actionlib
import sensor_msgs.msg
import control_msgs.msg

class FollowJointTrajectoryActionServer:
    def __init__(self):
        self.FollowJointTrajectory  = control_msgs.msg.FollowJointTrajectoryAction()
        self.RecSucceeded = False
        self.server = actionlib.SimpleActionServer('/robot_control/follow_joint_trajectory',control_msgs.msg.FollowJointTrajectoryAction,self.execute,False)
        self.server.start()
        
        print("FollowJointTrajectoryActionServer start succeeded\n")

    def execute(self,Trajectory ):
        # 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值