UR5双臂Gazebo仿真(Python)
近来在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/goal和rostopic echo /right_arm_controller/follow_joint_trajectory/goal两个命令来查看等会要发送的消息。
然后运行以上py文件,可以查看到消息如下:
从两个时间戳可以看到,双臂接受到消息的时间差差了1毫秒,也能接受。后续看看还有没有更好的处理方法。
具体配置和源码参考https://blog.csdn.net/qq_42823342/article/details/118085521
UR5双臂Gazebo仿真(Python)相关推荐
- 双臂UR5的Gazebo配置
分别创建两个功能包,分别为dual_ur_description和dual_ur_gazebo,前者存放ur5的双臂模型文件,后者存放Gazebo的相关文件. 1 dual_ur_descriptio ...
- PROBOT_G603双臂GAZEBO+MoveIt!仿真中配置手眼相机和夹爪
PROBOT_G603双臂GAZEBO+MoveIt!仿真中配置手眼相机和夹爪 问题描述 安装双臂模型 修改urdf文件 Gripper文件修改 Gripper添加到机械臂上 配置MoveIt! 配置 ...
- 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 ...
- ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )
前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...
- UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)
简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...
- python 机械臂控制_从零开始的ROS四轴机械臂控制-gazebo仿真控制
这是一个四轴器械臂练手项目,定为arm0.1版本,使用MG90s舵机来搭建一个四轴机械臂.arm0.1版本的目标是对带颜色的方块进行识别并在Gazebo中模拟出来. 以下是这个ROS四轴机械臂控制的目 ...
- 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解
一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...
- 【从零开始的ROS四轴机械臂控制】(二) - ROS与Gazebo连接,Gazebo仿真及urdf文件修改
[从零开始的ROS四轴机械臂控制(二)] 四.urdf文件及gazebo仿真 1.simple_arm示例 (1)config文件夹 (2)launch文件夹 (3)meshes文件夹 (4)urdf ...
- ROS+Gazebo仿真差速小车并实现控制
本工程的功能包有两个,分别用于gazebo仿真与键盘控制运动 功能包原文件如下: diff_wheeled_robot_control : https://huffie.lanzouw.com/iXi ...
最新文章
- hibernate annotations和hbm.xml配置文件在spring中的并存配置
- 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
- 在c语言中除法运算符,c – 不需要的除法运算符行为,我该怎么办?
- 汇编语言EQU伪指令
- 在非容器(集群)环境下运行dapr
- java飞鸽传书_feige 飞鸽传书源代码java 实现不错的联系网络编程的资料飞鸽传书的GUI(java实现) - 下载 - 搜珍网...
- leetcode876 链表中间的结点
- 图的表示方法和C++实现
- 每个tabpage中都有一个dategridview_每个女人,都有一个礼服梦
- ANT出现“警告: 编码 GBK 的不可映射字符”解决方法
- Android零基础入门第86节:探究Fragment生命周期
- 个别省通知!研究生推迟开学不停学!毕业答辩可采用远程视频方式
- 安防巨头们集体造车 跳出安防已成常态
- 基于MATLAB串级控制系统仿真设计,毕业论文基于MATLAB的锅炉水温与流量串级控制系统的设计9喜欢就下吧(样例3)...
- 【概率论基础01】:通俗解释,啥叫随机变量?
- 舆情传染病时空分析文献阅读笔记
- 面试中面试官问的一些问题总结
- 只言片语 —— eFPGA
- CentOS7.4离线安装Openssh7.9p1
- vue使用prop通信出错:Avoid mutating a prop directly since the value will be overwritten whenever the parent
热门文章
- 问题复盘:一个Redisson驱动源码BUG
- 没有网络电脑计算机还能用吗,电脑连不上公用网络怎么办
- 数据分析岗位面试准备请看这篇!
- 马云的至暗时刻:支付宝事件、十月围城 | 阿里巴巴20年
- 十字光标太小怎么调节、CAD梦想画图算量技巧
- EChat(简易聊天项目)二、好友列表实现
- 用python画皮卡丘的代码-利用Python绘制萌萌哒的皮卡丘
- html学习笔记-用代码画皮卡丘
- 基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql)
- linux 查看内存地址 rw,如何查看Linux内存中的程序所有堆的地址