Arduino2560/MegaPi与ROS机器人操作系统的连接-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9202|回复: 10

Arduino2560/MegaPi与ROS机器人操作系统的连接

[复制链接]
发表于 2018-11-21 14:45 | 显示全部楼层 |阅读模式
本帖最后由 190808149 于 2019-4-3 10:58 编辑

该帖子讲述了ROS和Arduino连接,控制2轴舵机机械臂的内容。现已经根据该原型系统,扩展到7轴机械臂:


用Arduino制作支持ROS机器人操作系统的7轴机械臂
https://www.arduino.cn/thread-85107-1-1.html
----

大家好,我因为需要更多时间维系琐碎平凡的工作和生活,一段时间没有上Arduino论坛。现在能重新抽出些时间逐渐回到开源硬件技术的学习和实验中,真的非常感谢亲人的支持。

在Ubuntu Linux ROS软件的支持下,我们可以应用Arduino和舵机组装的简易机器人实现图像识别、运动规划甚至强化学习等知识。我使用以Arduino 2560为核心的MakeBlock MegaPi来驱动舵机;并借用Lego Tech乐高孔条零件快速拼装机械臂;与Ubuntu Linux ROS互动操作。达到学习目的。


1542775590632.jpg

舵机和孔条的打印连接件的设计图纸在https://github.com/qq95538/ServoTurnAround/SolidWorkFiles/
连接件使用9g舵机配备的螺钉连接,然后用Lego插销固定孔条连接件。即可完成拼装。

这样做自由度高,模块性好,制作机器人,机械臂无需用3D打印机打印整个机器人。只需借助Lego孔条作为骨骼,快速搭建机器人原型。
1542783134170.jpg

另外,机器人原型在Solidworks中也可以用零件进行及时装配调整,然后直接输出到机器人操作系统ROS,验证机器人的合理性。在计算机上验证合理后再组装真实的机械臂。实现了计算机辅助设计应有之意。


以下是操作指引:

1.Windows上安装VMWare,下载Ubuntu16.04 LTS操作系统光盘镜像,在VMWare上创建一个Linux系统虚拟机。安装完毕后在Ubuntu Linux上安装ROS,选完全安装。运行roscore节点。


instruction07.png

2.在Arduino Sketch上安装rosserial库。确保上网通常,在第三项菜单Sketch中选Include Libraries,点击进入Manage Libraries直接搜索添加rosserial库。

3.下载github下载sketch程序ServoControledByROS烧录到Arduino 2560或MegaPi,Pin6连接舵机数字端口。点击通过VMWare右下角图标将Arduino 2560串口连接虚拟化到Linux虚拟机内。Linux识别出串口ttyUSB__之类的串口。在Linux命令行中继续执行rosrun rosserial_python serial_node.py /dev/ttyUSB__将一个ROS节点与Arduino连接。就能在Linux下让ROS操作Arduino舵机或机械臂了。

注意,在连接电脑和Arduino2560/MegaPi前,先确保Arduino供电,再用USB连接电脑。让MegaPi确认9V端口供电。如果先连接USB再接9V端口,则MegaPi选择以USB口供电,无力推动大功率舵机,电压下降,MegaPi掉电重启。

4.下载SolidWorks下的urdf制作插件,绘制自己设计的机械臂零件,制作装配图。

00

00


通过urdf插件指定机械臂链接和轴。

01

01


instruction01dian5.png

instruction01dian7.png

instruction02.png

选择Export输出urdf文件
instruction03.png

solidworks插件自动计算机器人轴向位置和关节坐标
instruction04.png

保存urdf文件
instruction05.png

计算出的轴位置在Solidworks中虚线示意




得到的urdf文件目录如下
instruction06.png

打开装有ROS的Ubuntu Linux虚拟机将urdf文件
拖动拷贝到Linux虚拟机catkin_ws/src/文件目录。
instruction08.png
在linux中找到urdf位置
instruction09.png

编辑package.xml信息,注明自己的版权信息和邮箱
instruction08dian5.png

借用现成的urdf_tutorial 定义,运行命令roslaunch urdf_tutorial display.launch model:=文件所在位置.urdf。在RViz中机械臂的CAD三维示意图就显示出来了。


10

10


操作joint_state_publisher控制关节舵机运动。rviz中的机械臂模型就动起来了。
instruction11.png

Arduino通过rosserial收到joint_state_publisher发出的topic信号,

12

12


和Rviz中虚拟的机械臂模型一起也做同步运动

http://player.youku.com/player.php/sid/XMzkyOTI4MDU0MA==/v.swf



在Rviz中配置好机械臂模型后,就可以通过ROS Moveit软件,在计算机GUI图形界面下配置和规划机械臂运动路径了。

所有代码在https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS

1、首先,根据之前产生的机械臂模型https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_all_assembly  
配置一个ros_control节点:https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/myrobot_control,控制机械臂的运动。

2、同时根据刚才所述的机械臂模型https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_all_assembly
配置一个ros moveit节点:https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS/tree/master/0320_config

3、配置节点后依次运行命令:
中心节点
roscore
机械臂控制节点
roslaunch myrobot_control myrobot_joint_trajectory_controllers.launch
运动规划节点
roslaunch 0320_config demo.launch
触发Moveit和RViz图形用户界面,即可通过Moveit规划机器人运动路径。

-------------
PS:
现在MakeBlock 产品的使用编程全面图形化和智能化,更能使用Swift在苹果电脑上编写。降低了学习难度,还提高开发效率。而我仍然使用传统的Arduino Sketch烧录MegaPi。并不值得推荐。

我仅把MakeBlock作为带有舵机扩展卡的Arduino2560使用。使用过程不需要安装调用Makeblock-Libraries。另外,Arduino在互动性上,通过USB有线连接电脑和Arduino,操作机械臂的方法也老旧和不便。不值得推荐。
我们论坛的Blink项目已经能与手机、电脑甚至云系统链接互动。
github上也给出了ROS通过WiFi网络直连8266模块Arduino的示例程序,这才是电脑操作Arduino机械臂的最好方法。







发表于 2019-3-1 20:04 | 显示全部楼层
能够用arduino操作类似UR一类的机械臂吗
发表于 2019-3-5 09:14 | 显示全部楼层
大神级的,虽然有好多东西看不懂,
发表于 2019-3-18 16:16 | 显示全部楼层
本帖最后由 Sit二呆 于 2019-3-19 11:20 编辑

感谢楼猪分享!
 楼主| 发表于 2019-3-20 01:06 | 显示全部楼层

谢谢了,太客气,不用打赏。下次你发帖,我也给你打赏捧场。

技术上有什么问题请直接回帖。我会尽力解答的。不要加我QQ,麻烦了。
 楼主| 发表于 2019-3-20 01:46 | 显示全部楼层

不像Arduino的简单可靠,ROS和Linux作为开源系统,在驱动和兼容性上,特别复杂。不好调试。我这帖子开了半年了,现在还没太多进展。有问题大家互相直接回帖交流。
发表于 2019-3-22 14:23 | 显示全部楼层
本帖最后由 Sit二呆 于 2019-3-22 14:33 编辑

感谢回答!向您再请教几个问题:1.在运行display.launch,机械臂可以像视频一样运作。但在运行中心节点、运动控制节点以及demo.launch节点时,点击plan,求解成功率不高、速度慢,之后点击excute时,机械臂不动(这是什么原因...)
发表于 2019-3-22 14:37 | 显示全部楼层
本帖最后由 Sit二呆 于 2019-3-22 14:44 编辑
190808149 发表于 2019-3-20 01:46
不像Arduino的简单可靠,ROS和Linux作为开源系统,在驱动和兼容性上,特别复杂。不好调试。我这帖子开了 ...

2.如果想借助MoveIt去控制基于windows开发的机械臂,需要做哪些工作,可行性如何,以及rosserial_windows对这个方案可有帮助?3ks
 楼主| 发表于 2019-3-25 11:28 | 显示全部楼层
微软在开发基于Windows的ROS版本,已经可以使用了。但是MOVEIT不兼容Windows版本的ROS。
MOVEI推荐使用ubuntu16.04和ROS Kinetic。
ubuntu18和Melodic安装后无法直接运行RViz,应该有些组件需要自己编译。Windows版本的ROS上运行MOVEIT应该也要自己编译组件。我也刚入门,不敢乱动。
控制节点是根据ros_control编程框架自己定制的,根据自己手上机器人的实际情况自己编写驱动电机代码。
MoveIt运动规划在RViz图形化界面上实现,ros_control接收来自Moveit的运动规划指令,驱动机器人全身电机转动。然后返回关节运动状态到Moveit,MoveIt按下Execute按键不动,是因为Moveit没有收到ros_control传回的关节状态通知。
可以先将demo.launch文件中含有fake字样的一行配置文件由 =“false”改为 = “true”就能看到RViz中的机械臂的模拟执行动作了。
之后再调试ros_control的电机控制代码,实现真实的电机控制,并通过publish the topic of /joint_states回传传关节状态到ros系统。改回fake一行为="false"。这时执行demo.launch就可以看到RViz显示ros_control中返回的真实的机器人状态了。
帖子中只示意了两个关节的控制,具有实际操作意义的多关节机器人运动规划我也还在弄,流程也还没跑通。我的RViz运动规划求解过程也确实挺慢的。根据机器人关节距离和运动范围的不动,如果plan的位置不合理,Moveit和RViz程序甚至直接crush。
另外,我的帖子是完全根据Moveit Tutorial建议来做的。跑通花了太多精力。
其实百度搜索查看普及ROS的博主古月居的文档,他跳过ros_control框架,直接写一个Action Server,连接MoveIt提供的Trajectory Action Client执行路径规划命令,编程实现起来还方便些。
发表于 2019-3-29 17:13 | 显示全部楼层
190808149 发表于 2019-3-25 11:28
微软在开发基于Windows的ROS版本,已经可以使用了。但是MOVEIT不兼容Windows版本的ROS。
MOVEI推荐使用ubun ...

感谢楼主慷慨分享经验,坑趟过,方知深浅。望楼主常回来看看,并更新帖子 哈哈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 11:34 , Processed in 0.117550 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表