近来在Gazebo上搭了一个ur5双臂仿真平台。

差不多就是以下这样。

使用rostopic list查看一下话题,如下

显然,采用/left_arm_controller/follow_joint_trajectory/goal/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。

现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。

思路一:设置/left_arm_controller/follow_joint_trajectory里面的时间戳,试了一下,好像不好使,后续再试试。

思路二:采用Python的多线程方法。会有一定时差,但应该可以忽略。

程序如下:

from trajectory_msgs.msg import *
from control_msgs.msg import *
import rospy
import actionlib
import sys
import threadingLEFT_JOINT_NAMES = ['left_shoulder_pan_joint', 'left_shoulder_lift_joint', 'left_elbow_joint','left_wrist_1_joint', 'left_wrist_2_joint', 'left_wrist_3_joint']RIGHT_JOINT_NAMES = ['right_shoulder_pan_joint', 'right_shoulder_lift_joint', 'right_elbow_joint','right_wrist_1_joint', 'right_wrist_2_joint', 'right_wrist_3_joint']def right_plan() -> FollowJointTrajectoryGoal:right_goal = FollowJointTrajectoryGoal()right_goal.trajectory = JointTrajectory()right_goal.trajectory.joint_names = RIGHT_JOINT_NAMESright_goal.trajectory.points.append(JointTrajectoryPoint(positions=[0]*6, velocities=[0]*6,time_from_start=rospy.Duration(0.0)))right_goal.trajectory.points.append(JointTrajectoryPoint(positions=[0.5,0,-0.5,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(10.0)))right_goal.trajectory.points.append(JointTrajectoryPoint(positions=[1,0,-1,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(20.0)))right_goal.trajectory.points.append(JointTrajectoryPoint(positions=[1.57,0,-1.57,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(30.0)))return right_goaldef left_plan() -> FollowJointTrajectoryGoal:left_goal = FollowJointTrajectoryGoal()left_goal.trajectory = JointTrajectory()left_goal.trajectory.joint_names = LEFT_JOINT_NAMESleft_goal.trajectory.points.append(JointTrajectoryPoint(positions=[0]*6, velocities=[0]*6,time_from_start=rospy.Duration(0.0)))left_goal.trajectory.points.append(JointTrajectoryPoint(positions=[0.5,0,-0.5,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(10.0)))left_goal.trajectory.points.append(JointTrajectoryPoint(positions=[1,0,-1,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(20.0)))left_goal.trajectory.points.append(JointTrajectoryPoint(positions=[1.57,0,-1.57,0,0,0], velocities=[0]*6,time_from_start=rospy.Duration(30.0)))return left_goaldef right_pub(right_goal:FollowJointTrajectoryGoal) -> None :right_client.send_goal(right_goal)right_client.wait_for_result()def left_pub(left_goal:FollowJointTrajectoryGoal) -> None :left_client.send_goal(left_goal)left_client.wait_for_result()def main():global left_client, right_clientrospy.init_node("pub_dual_arm_move")left_client = actionlib.SimpleActionClient('left_arm_controller/follow_joint_trajectory', FollowJointTrajectoryAction)right_client = actionlib.SimpleActionClient('right_arm_controller/follow_joint_trajectory', FollowJointTrajectoryAction)print("----------Preparing to connect----------")print("Waiting for server...")if left_client.wait_for_server():print("Connect to left server")else:sys.exit()if right_client.wait_for_server():print("Connect to left server")else:sys.exit()print(" ")print("------------Preparing to plan------------")print("Waitting for planning...")left_goal = left_plan()right_goal = right_plan()print("Planning success")print(" ")print("------------Preparing to pub------------")left_thread = threading.Thread(target=left_pub,args=(left_goal,))right_thread = threading.Thread(target=right_pub,args=(right_goal,))left_thread.start()right_thread.start()print("Pub success")if __name__ == "__main__":main()

在运行之前先另开两个终端分别使用rostopic echo /left_arm_controller/follow_joint_trajectory/goalrostopic echo /right_arm_controller/follow_joint_trajectory/goal两个命令来查看等会要发送的消息。

然后运行以上py文件,可以查看到消息如下:

从两个时间戳可以看到,双臂接受到消息的时间差差了1毫秒,也能接受。后续看看还有没有更好的处理方法。

具体配置和源码参考https://blog.csdn.net/qq_42823342/article/details/118085521

UR5双臂Gazebo仿真(Python)相关推荐

  1. 双臂UR5的Gazebo配置

    分别创建两个功能包,分别为dual_ur_description和dual_ur_gazebo,前者存放ur5的双臂模型文件,后者存放Gazebo的相关文件. 1 dual_ur_descriptio ...

  2. PROBOT_G603双臂GAZEBO+MoveIt!仿真中配置手眼相机和夹爪

    PROBOT_G603双臂GAZEBO+MoveIt!仿真中配置手眼相机和夹爪 问题描述 安装双臂模型 修改urdf文件 Gripper文件修改 Gripper添加到机械臂上 配置MoveIt! 配置 ...

  3. UR5 Gazebo仿真配置(不使用MoveIt)

    文章目录 1. Introduction 1.1 动机 1.2 概述 1.3 前置技能 2. 机器人模型描述 2.1 URDF 2.2 xacro 2.3 UR 模型 2.4 创建精简的ur5_des ...

  4. ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )

    前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...

  5. UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)

    简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...

  6. python 机械臂控制_从零开始的ROS四轴机械臂控制-gazebo仿真控制

    这是一个四轴器械臂练手项目,定为arm0.1版本,使用MG90s舵机来搭建一个四轴机械臂.arm0.1版本的目标是对带颜色的方块进行识别并在Gazebo中模拟出来. 以下是这个ROS四轴机械臂控制的目 ...

  7. 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解

    一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...

  8. 【从零开始的ROS四轴机械臂控制】(二) - ROS与Gazebo连接,Gazebo仿真及urdf文件修改

    [从零开始的ROS四轴机械臂控制(二)] 四.urdf文件及gazebo仿真 1.simple_arm示例 (1)config文件夹 (2)launch文件夹 (3)meshes文件夹 (4)urdf ...

  9. ROS+Gazebo仿真差速小车并实现控制

    本工程的功能包有两个,分别用于gazebo仿真与键盘控制运动 功能包原文件如下: diff_wheeled_robot_control : https://huffie.lanzouw.com/iXi ...

最新文章

  1. hibernate annotations和hbm.xml配置文件在spring中的并存配置
  2. 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
  3. 在c语言中除法运算符,c – 不需要的除法运算符行为,我该怎么办?
  4. 汇编语言EQU伪指令
  5. 在非容器(集群)环境下运行dapr
  6. java飞鸽传书_feige 飞鸽传书源代码java 实现不错的联系网络编程的资料飞鸽传书的GUI(java实现) - 下载 - 搜珍网...
  7. leetcode876 链表中间的结点
  8. 图的表示方法和C++实现
  9. 每个tabpage中都有一个dategridview_每个女人,都有一个礼服梦
  10. ANT出现“警告: 编码 GBK 的不可映射字符”解决方法
  11. Android零基础入门第86节:探究Fragment生命周期
  12. 个别省通知!研究生推迟开学不停学!毕业答辩可采用远程视频方式
  13. 安防巨头们集体造车 跳出安防已成常态
  14. 基于MATLAB串级控制系统仿真设计,毕业论文基于MATLAB的锅炉水温与流量串级控制系统的设计9喜欢就下吧(样例3)...
  15. 【概率论基础01】:通俗解释,啥叫随机变量?
  16. 舆情传染病时空分析文献阅读笔记
  17. 面试中面试官问的一些问题总结
  18. 只言片语 —— eFPGA
  19. CentOS7.4离线安装Openssh7.9p1
  20. vue使用prop通信出错:Avoid mutating a prop directly since the value will be overwritten whenever the parent

热门文章

  1. 问题复盘:一个Redisson驱动源码BUG
  2. 没有网络电脑计算机还能用吗,电脑连不上公用网络怎么办
  3. 数据分析岗位面试准备请看这篇!
  4. 马云的至暗时刻:支付宝事件、十月围城 | 阿里巴巴20年
  5. 十字光标太小怎么调节、CAD梦想画图算量技巧
  6. EChat(简易聊天项目)二、好友列表实现
  7. 用python画皮卡丘的代码-利用Python绘制萌萌哒的皮卡丘
  8. html学习笔记-用代码画皮卡丘
  9. 基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql)
  10. linux 查看内存地址 rw,如何查看Linux内存中的程序所有堆的地址