frankaemikapanda连接真实机械臂(代码片段)

合工大机器人实验室 合工大机器人实验室     2023-03-04     205

关键词:

Franka Emika Panda连接真实机械臂(二)

虚拟环境下已经可以进行机械臂的拖动了,下一步就是PC连接机械臂,并通过plan控制机械臂运动。
前文【Franka Emika Panda连接真实机械臂(一)】已经提到如何配置机械臂环境、如何在rviz仿真环境下拖动机械臂。下面记录的是最近一周学习panda机器人的一些心得,记录下来以便于以后“温故而知新”。

PC与机械臂相连的准备

1.机械臂底座有灯,灯的颜色表示不同模式。
蓝色:准备好了并准备移动
白色:停止(此时可以拖动示教)
黄色:错误(刚刚给机器人上电是底座灯显示黄色)
2.PC与机械臂通过网线相连,此时应该注意的是,网线一端连PC,一端连接机械臂控制柜(而不是机械臂底座)。
3.PC端已经设置好静态ip,打开浏览器输入网址172.16.0.2,可以看到以下界面。
打开Joints下面的关节锁,franka底座灯变蓝。手持外部激活设备,开始franka panda的探索啦!

demo.launch控制franka机械臂的探索

首先,现在panda_moveit_config 的launch文件夹里创建一个demo_real.launch的文件,先把demo.launch文件的全部内容复制到demo_real.launch。我们就通过修改这个文件来尝试控制机械臂。
打开demo_real.launch文件,我们可以看到:

<include file="$(find panda_moveit_config)/launch/move_group.launch">
    <arg name="planner" value="$(arg planner)" />
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="true"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

此时fake_executionvalue="true",我们了解到此时进行的虚拟执行,也就是仿真,所以先把true改成false。
尝试运行了:

roslaunch panda_moveit_config demo_real.launch robot_ip:=172.16.0.2

结果显示:
Action client not connected。 这个问题困扰了我很久,也阅读了很多博客。比如:
使用moveit!控制真实机械臂(3)——修改moveit配置文件来控制真实机械臂(9月27日更新)】
这里面提到了怎么修改moveit生成的功能包来控制真实机器人。所以我开始查看是否需要修改yaml文件等。上文所git 的功能包里包括了panda_controller.yaml等文件。
打开move_group.launch,

<include ns="move_group" file="$(find panda_moveit_config)/launch/trajectory_execution.launch.xml" if="$(arg allow_trajectory_execution)">
    <arg name="moveit_manage_controllers" value="true" />
    <arg name="moveit_controller_manager" value="panda" if="$(eval not arg('fake_execution') and not arg('load_gripper'))"/>
    <arg name="moveit_controller_manager" value="panda_gripper" if="$(eval not arg('fake_execution') and arg('load_gripper'))"/>
    <arg name="moveit_controller_manager" value="fake" if="$(arg fake_execution)"/>
  </include>

从这一段可以看出,fake_execution值为false时,moveit_controller_manager的值为panda,即真实机器人,没有错误。
那为什么控制还是不行呢?
通过ROS控制真实机械臂(5)—Moveit!真实机械臂(move_group和demo.launch修改)
原来是moveit作为client端,并没有接收到server端的两个节点的消息导致的。
打开panda_controllers.yaml,

 controller_list:
  - name: position_joint_trajectory_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    default: true
    joints:
      - panda_joint1
      - panda_joint2
      - panda_joint3
      - panda_joint4
      - panda_joint5
      - panda_joint6
      - panda_joint7

name:这里你可以写一个与你机器人相关的名称,方便你使用

action_ns:follow_joint_trajectory ,follow_joint_trajectory 是后续action的名称的一部分,你需要填一个action的名称,这个名称就在这个配置文件里确定了,就是name/action_ns所代表的对应字符串的组合。

type: FollowJointTrajectory ,这个类型是ros下的自带action类型,是一种控制机械臂运动轨迹的数据结构,请原样填写,将来你可能还想控制手抓之类的结构,所填写的类型都是不一样的。

joints:这里是你机器人(机械臂)的关节名称,这些名称源自你的机器人模型文件,我们的controllers.yaml文件复制于fake_controllers.yaml文件,这部分应该是自动生成的。
原文链接:https://blog.csdn.net/nmssg1/article/details/100665543
这里大家可以看这篇博客,对于action讲解的比较清楚:
机器人学习必看系列:如何使用moveit控制真实机械臂?
简单来说,通信就像接插头,moveit就像插头,已经准备好了,但是插板(action server)一直不在,这样当然不能通电了。

问题是想明白了,但是接下来该怎么解决呢?这又让人犯难了。
一些博主提出,可以自己编写一个节点文件,在运行launch文件之前,先运行这个节点,使position_joint_trajectory_controller处于畅通状态。但是本人也是刚刚接触机器人,franka又是七自由度机器人,花了几天时间也没有写出有用的节点文件。
这里先把之前找到的有用文件统计下来,以备后续学习。
ROS中Moveit生成轨迹如何作用于实际的机械臂(一)
ROS中Moveit生成的轨迹如何作用与实际的机械臂(二)
ROS中Moveit生成的轨迹如何作用于实际的机器人(三)
使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序
Moveit实际的机械臂控制(5)moveit,编写action server节点和Arudion端的节点
ROS学习笔记16 —— 控制真实机械臂的action(实例大集合)
通过ROS控制真实机械臂(5)—Moveit!真实机械臂(move_group和demo.launch修改)
使用moveit!控制真实机械臂(4)——了解moveit!所使用的action
这条路暂时是被封死了,找遍网络也没有几个使用ROS控制franka panda机械臂的教程,挠头皮(发际线后移buff)。

控制机械臂

1.测试机械臂联通情况

ifconfig

查看ip是否已经修改。

uname -r

查看linux内核是否为实时内核。

ping 172.16.0.2

查看PC是否能与机械臂通信。

cd ~/catkin_franka/libfranka/build/examples
./echo_robot_state 172.16.0.2
./communication_test 172.16.0.2

如果此通信测试未通过,则表示通信网络不足以控制机器人。
2.机械臂实时控制

roslaunch franka_example_controllers cartesian_impedance_example_controller.launch robot_ip:=172.16.0.2 load_gripper:=true

此时拖动rviz中的机械臂,真实机械臂会实时运动,所以一定要确保周边并无障碍物。

cd ~/catkin_franka/libfranka/build/examples
./communication_test 172.16.0.2

使用此命令,使机械臂恢复初始位置。
3.机械臂的plan与execution

roslaunch franka_control franka_control.launch robot_ip:=172.16.0.2
roslaunch panda_moveit_config panda_moveit.launch
roslaunch panda_moveit_config demo_real.launch

想了很久才想到这个方法,虽然感觉属于旁门左道了,但是经实测,确实可以实现机械臂的plan与execution。

Kinect 机械臂检测

...检测和跟踪机械臂及其所有关节听起来过于复杂。你不能连接第一个机械臂(通过串行连接或它支持的接口)来简单地读取每个电机的值,然后将这 查看详情

为啥装备体的机械爪点连接点可以移动而点那个杆它不能移动

...0.10.100.254进行设置WiFI接入热点2.控制板与机械臂其它部件连接关系下图显示了控制板与其它的机械臂的部件连接的关系。▲控制电路板与机械臂其它部件连接关系 03初步测试1.肘关节运动范围min=3000max=14000steprange=35000▲肘关节... 查看详情

ros-使用ur机械臂最新的ur_robot_driver

...设置静态IP​​​​3.重启​​​​4.现在看看右上角网络连接有没有显示对应于控制柜的网络显示已经连接。​​​​四、运行程序测试​​​​1.获取标定信息​​​​2.运行externalcontrol​​​​3.运行启动文件​​u 查看详情

stm32控制机械臂抓取的代码

实现stm32控制机械臂抓取的代码,首先需要实现机械臂的控制程序,包括初始化、变量定义、初始位置、转矩计算等。其次,实现传感器的数据采集,例如光电传感器、避障传感器、力感传感器等。再者,根据传感器采集的数据... 查看详情

毕设——机械臂dh建模

...用于学习使用,祝各位毕业生顺利完成毕设!毕设(1)——机械臂DH建模毕设中使用到的机械臂是越疆出品的DObot魔术师机械臂,它的机械结构类似于IRB660的码垛机械臂,用两个步进电机控制作者:Dragonet-Z出处:https://www.cnblogs.com/d... 查看详情

如何用arduino制作ps2机械臂

参考技术A可能是里面的一根连接杆断掉了~~如果你的是仿制手柄,那杆子肯定是塑料的,断的机会那是相当的大,干脆把右边的摇杆整个用焊点下来,换到左边去,焊要点牢,但不要太大~~打完这些才觉得实在麻烦,干脆去买个... 查看详情

ur机械臂运动学正逆解方法

最近几个月因为工作接触到了机械臂的项目,突然对机械臂运动方法产生了兴趣,也就是如何控制机械臂的位置和姿态。借用一张网上的图片,应该是ur5的尺寸。我用到的是ur3机械臂,除了尺寸不一样,各关节结构和初始位置和... 查看详情

ur机械臂cb3网络课程

...人如何工作3.1选择臂端工具3.2输入有关臂端工具的信息3.3连接外部装置3.4机器人编程4.设置工具4.1末端执行器配置4.2工具中心点4.3设置有效载荷4.4设置重心位置4.5示教工具中心点4.5测试5.创建程序5.1移动类型5.2训练中移动选型5.3... 查看详情

ros机械臂开发:创建机器人urdf模型

...是为了加速碰撞检测做的一种简化<joint>标签每个joint连接两个link,其中的origin是相对于上一个joint的origin描述的,而上面的<link>标签中的origin是相对于joint坐标系表达的,也就是说在机器人运动过程中,每个连杆的joint... 查看详情

用javascript写了一个机械臂数据仿真效果(代码片段)

...太难,于是就有了这个。  先上效果图:     机械臂的运动空间:      如图所示,是一个平面的机械臂实现,以机械臂的原点建立笛卡尔直角坐标系,那么机械臂的末端执行机构的坐标就可以用下列两个... 查看详情

matlabsimulink基于模糊pid控制的机械臂位置仿真

1、内容简介略612-可以交流、咨询、答疑2、内容说明机械臂是指高精度,多输入多输出、高度非线性、强耦合的复杂系统。因其独特的操作灵活性,已在工业装配、安全防爆等领域得到广泛应用。机械臂是一个复杂系统&#... 查看详情

机械臂的运动规划

...人觉得运动规划已经很成熟了,无需再研究,但实际上,机械臂运动规划非常难……如果你想要让机器人能帮你拿瓶子、做饭、收拾屋子等,就必须赋予机器人快速生成无碰撞、最优运动轨迹的能力,这就需要靠运动规划了。有... 查看详情

[cqoi2014]排序机械臂

洛谷P3165[CQOI2014]排序机械臂https://www.luogu.org/problem/show?pid=3165题目描述为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂。它遵循一个简单的排序规则,第一次操作找到摄低的物品的位置P1,并把左起... 查看详情

游戏机之ar机械臂

...175篇原创文章1大家好,我是土盐。今天看了稚晖君的机械臂视频,感觉4个月时间跨度靠业余时间搞出这么好的机械臂,太震惊了。这样的猛人,来一打多好。费了我九九八十一次的功力,才截图下来技术路线... 查看详情

游戏机之ar机械臂

...175篇原创文章1大家好,我是土盐。今天看了稚晖君的机械臂视频,感觉4个月时间跨度靠业余时间搞出这么好的机械臂,太震惊了。这样的猛人,来一打多好。费了我九九八十一次的功力,才截图下来技术路线... 查看详情

关于智能视觉组上的机械臂(代码片段)

...f1a;这里回复了今年智能车竞赛智能视觉组,关于车载机械臂以及供电电池的问题。从中也可以看到参赛同学们针对复杂工程问题的挑战,展现出分析问题和解决问题的能力。希望他们比赛车模作品能够取得好的成绩。关... 查看详情

c_cpp机械臂通信(代码片段)

查看详情

如何绘制一个可以在 OpenGL 中拾取物体的机械臂?

】如何绘制一个可以在OpenGL中拾取物体的机械臂?【英文标题】:HowtodrawaroboticarmwhichcanpickobjectsinOpenGL?【发布时间】:2013-10-2301:03:42【问题描述】:我在实现一个可以拾取物体的机械臂时遇到了麻烦,因为我在实现中调用了glTran... 查看详情