Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )

简介: Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )

1. 安装并配置好ROS、MoveIt和Gazebo。


2. 导入ABB YuMi双臂机器人模型到Gazebo。


3. 使用MoveIt配置双臂机器人的URDF文件。


4. 编写一个Python脚本来实现双臂协同运动。



以下是一个简单的Python脚本示例,用于实现ABB YuMi双臂机器人的协同运动:



```python


#!/usr/bin/env python


# -*- coding: utf-8 -*-



import sys


import rospy


import moveit_commander


from moveit_msgs.msg import PlanningScene, PlanningSceneWorldReference


from gazebo_msgs.srv import SpawnModel, DeleteModel


from geometry_msgs.msg import PoseStamped



def main():


   # 初始化节点


   rospy.init_node('yumi_dual_arm_moveit', anonymous=True)



   # 初始化MoveIt指挥官


   moveit_commander.roscpp_initialize(sys.argv)



   # 创建双臂机器人的MoveGroupCommander对象


   left_arm = moveit_commander.MoveGroupCommander("left_manipulator")


   right_arm = moveit_commander.MoveGroupCommander("right_manipulator")



   # 添加双臂机器人到规划场景


   planning_scene = PlanningScene()


   scene_world_reference = PlanningSceneWorldReference()


   scene_world_reference.header.frame_id = "base_link"


   planning_scene.world_reference = scene_world_reference


   planning_scene.robot_states = [left_arm.get_current_state(), right_arm.get_current_state()]


   moveit_commander.planning_scene.publish(planning_scene)



   # 设置目标姿态


   target_pose = PoseStamped()


   target_pose.header.frame_id = "base_link"


   target_pose.pose.position.x = 0.5


   target_pose.pose.position.y = 0.0


   target_pose.pose.position.z = 0.5


   target_pose.pose.orientation.w = 1.0



   # 设置目标约束


   left_constraint = moveit_commander.Constraints()


   left_constraint.orientation_mask = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


   left_constraint.orientation_path_mask = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


   left_constraint.preferred_orientation = target_pose.pose.orientation


   right_constraint = moveit_commander.Constraints()


   right_constraint.orientation_mask = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


   right_constraint.orientation_path_mask = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


   right_constraint.preferred_orientation = target_pose.pose.orientation



   # 根据约束求解路径规划问题


   left_goal = left_arm.set_joint_value_target(left_constraint)


   right_goal = right_arm.set_joint_value_target(right_constraint)


   left_arm.set_max_velocity_scaling_factor(1.5)


   right_arm.set_max_velocity_scaling_factor(1.5)


   left_arm.set_start_state_to_current_state()


   right_arm.set_start_state_to_current_state()


   left_group = left_arm.go(wait=True)


   right_group = right_arm.go(wait=True)



   # 打印结果


   print("Left arm joint values: " + str(left_group.get_current_joint_values()))


   print("Right arm joint values: " + str(right_group.get_current_joint_values()))



   # 确保所有线程都已关闭


   moveit_commander.roscpp_shutdown()


   moveit_commander.os._exit(0)



if __name__ == '__main__':


   main()


```



这个脚本首先导入了所需的库,然后初始化了节点和MoveIt指挥官。接下来,它创建了两个MoveGroupCommander对象,分别用于控制ABB YuMi双臂机器人的左右臂。然后,它将双臂机器人添加到规划场景中,并设置了目标姿态和约束。最后,它使用这些约束来求解路径规划问题,并打印出最终的关节值。  


相关文章
|
4天前
|
机器人
剑指 Offer 13:机器人的运动范围
剑指 Offer 13:机器人的运动范围
27 0
|
4天前
|
NoSQL 机器人 Windows
ROS机器人编程技术控制两只小海龟的编队运动
ROS机器人编程技术控制两只小海龟的编队运动
8 1
|
4天前
|
机器学习/深度学习 算法 机器人
论文介绍:使用仿真和领域适应提高深度机器人抓取效率
【5月更文挑战第11天】研究人员提出结合仿真数据和领域适应技术提升深度机器人抓取效率。通过在仿真环境中生成多样化抓取数据并使用GraspGAN和DANN进行像素级和特征级适应,使模型能在现实世界中更好地泛化。实验表明,这种方法能减少现实数据需求,同时保持高抓取性能。尽管面临物理差异和成功率挑战,该研究为机器人抓取技术的进步提供了新途径。论文链接:https://arxiv.org/abs/1709.07857
13 5
|
4天前
|
机器学习/深度学习 机器人
LabVIEW对并行机器人结构进行建模仿真
LabVIEW对并行机器人结构进行建模仿真
|
4天前
|
机器学习/深度学习 人工智能 机器人
[译][AI 机器人] Atlas的电动新时代,不再局限于人类运动范围的动作方式
波士顿动力宣布液压Atlas机器人退役,推出全新电动Atlas,旨在实现更广泛的实际应用。这款全电动机器人将拓展人类运动范围,解决复杂工业挑战。现代汽车公司将参与其商业化进程,作为测试应用场景。波士顿动力计划与创新客户合作,逐步迭代Atlas的应用,打造高效、实用的移动机器人解决方案。Atlas将结合强化学习和计算机视觉等先进技术,通过Orbit软件平台进行管理,未来将在真实世界中发挥超越人类能力的作用。
|
4天前
|
机器人 Ruby
ABB IRB 1200 新一代6轴工业机器人之一
ABB IRB 1200 新一代6轴工业机器人之一
ABB IRB 1200  新一代6轴工业机器人之一
|
7月前
|
算法 机器人 C++
剑指offer(C++)-JZ13:机器人的运动范围(算法-回溯)
剑指offer(C++)-JZ13:机器人的运动范围(算法-回溯)
|
8月前
|
机器人
剑指offer-12.机器人的运动范围
剑指offer-12.机器人的运动范围
38 0
|
9月前
|
传感器 Ubuntu 机器人
【5. ROS机器人的运动控制】
【5. ROS机器人的运动控制】
337 0
【5. ROS机器人的运动控制】
|
9月前
|
算法 机器人
三自由度PUMA机器人非线性控制研究(Matlab代码、Simulink仿真实现)
三自由度PUMA机器人非线性控制研究(Matlab代码、Simulink仿真实现)
114 0

热门文章

最新文章