用Arduino制作支持ROS机器人操作系统的7轴机械臂-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 80848|回复: 76

[项目] 用Arduino制作支持ROS机器人操作系统的7轴机械臂

  [复制链接]
发表于 2019-3-26 23:26 | 显示全部楼层 |阅读模式
参赛项目

用Arduino制作支持ROS机器人操作系统的7轴机械臂

参赛组员
190808149
人数:1名


项目演示:

我使用Arduino和PCA9685来驱动舵机;并借用Lego Tech乐高孔条零件快速拼装机械臂;在Linux系统和ROS MoveIt机器人运动规划软件下,通过鼠标操作,自由拖动解算机械臂关节姿态。


两年前Arduino论坛发放给我MakeBlock MegaPi,所以一直比较关心MakeBlock 的发展。MakeBlock 现在已经在苹果商店上线Swift关联产品了。这样的商业成就真是值得兴奋和鼓舞。非常感慨正规的商业化运作让创客产品在公司机制的保障下演化和推进,比创客个人凭借兴趣进行尝试更有可行性和连续性。同样,两年前在论坛开展竞赛的uArm出品商UFACTORY最近上市的xArm技惊四座,已经开始在KickStarter上销售。这样的产品迭代能力真的很了不起。xArm的各项能力我们目前用Arduino和航模舵机等常用硬件是无法达到了。不过xArm能够结合ROS机器人操作系统使用,在Linux系统下使用图形用户界面模拟、实时控制机器人的操作,倒是我们用Arduino可以办到的。

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

01.jpg


舵机和孔条的打印连接件的设计图纸在
游客,如果您要查看本帖隐藏内容请回复

连接件使用9g舵机配备的螺钉连接,然后用Lego插销固定孔条连接件。即可完成拼装。

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


02.jpg


机器人原型在Solidworks中也可以用零件进行及时装配调整,然后直接输出到机器人操作系统ROS,验证机器人的合理性。在计算机上验证合理后再组装真实的机械臂。实现了计算机辅助设计应有之意。通过原型设计,不端扩展,最终我们得到以下7轴机械臂:


IMG_20190326_101637.jpg

机械臂舵机连接Arduino和PCA9685驱动板后,即可结合ROS机器人操作系统展开调试。



以下是操作指引:

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


03.png


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

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

注意,在连接电脑,PCA9685和Arduino2560前,先确保Arduino程序逻辑调试通过,再给PCA9685独立供电,推动舵机。我在制作过程中,程序逻辑还未完善就加电调试舵机,机械臂乱动,损坏了拼接好的机械臂。只有重拼。

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

04.png



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

05.png



06.png



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


u8.png


选择Export输出urdf文件
u9.png


solidworks插件自动计算机器人轴向位置和关节坐标
保存urdf文件

u10.png

得到的urdf文件目录如下

u11.png



u12.png



打开装有ROS的Ubuntu Linux虚拟机将urdf文件
拖动拷贝到Linux虚拟机catkin_ws/src/文件目录。
u13.png


在linux中找到urdf位置
r1.png




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


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


r03.png



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


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


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


r01.png


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


首先,我们根据前面的2轴(关节)机械臂,扩展舵机数量得到7轴(关节)机械臂。
IMG_20190326_101627.jpg


Arduino自带的servo.h库只能驱动2个舵机。要同时驱动7个关节舵机,需要使用Adafruit PCA9685驱动板。该配件价格不贵,淘宝价10元。



IMG_20190326_101651.jpg

将舵机分别连接到PCA9685舵机口0-6,连接供电。连接PCA9685的5V,GND到Arduino相应位置,SDA到Arduino A4,SLC到Arduino A5。再烧录代码
游客,如果您要查看本帖隐藏内容请回复


IMG_20190326_101703.jpg

游客,如果您要查看本帖隐藏内容请回复



本项目使用的其他代码也在https://github.com/qq95538/ArduinoRobotHardWareInterfaceForROS

先我们配置机械臂和ROS运动规划功能相关节点

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

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


运行命令roslaunch moveit_setup_assistant setup_assistant.launch
打开moveit配置界面,为机械臂配置运动规划功能
m1.png


把关节相邻部分碰撞检测关闭
m2.png


配置机械臂关节组,设置IK动力学插件,以便在软件中对关节姿态进行实时反向解算
m3.png

m4.png


设置几个常用的机器人关节姿态
m5.png


设置ros_control接口
m6.png


最后生成MoveIt运动规划节点
m7.png


就可以在计算机上通过GUI图形用户界面实时设定和规划7轴机械臂的运动了。
m8.png

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

演示视频:

直接通过鼠标拖动机械臂指定机械臂目标位置,ROS MoveIt通过IK反向动力学插件及时求解所需的关节变动参数,传递给Arduino,指挥舵机作相应旋转,机械臂即可运动到达相应位置。










发表于 2019-3-27 09:19 | 显示全部楼层
windowns下没有类似的软件能直接控制吗?
一定要在linux下做?
 楼主| 发表于 2019-3-29 11:47 来自手机 | 显示全部楼层
本帖最后由 190808149 于 2019-3-29 23:48 编辑

暂时不行,机器人技术的相关软件多是围绕Linux开源生态构建的。
发表于 2019-3-30 19:24 | 显示全部楼层
您好,我想添加您学习一下,这个真的很厉害啊,尤其是机器人动作规划软件,很帅啊,是什么软件呢
 楼主| 发表于 2019-4-2 23:24 来自手机 | 显示全部楼层
本帖最后由 190808149 于 2019-4-2 23:26 编辑

用的ROS MoveIt. 在这里下载安装:moveit.ros.org
发表于 2019-4-7 23:17 | 显示全部楼层
比赛积分已发,感谢对社区比赛的支持~
发表于 2019-4-15 11:04 | 显示全部楼层
楼主,视频中你在moveit规划完运动轨迹后,手拨了个 什么 开关吗?
发表于 2019-4-15 11:08 | 显示全部楼层
本帖最后由 Sit二呆 于 2019-4-22 10:12 编辑

楼主,这是我在调试时的rqt_graph,看起来一切运行正常,如图1./joint_state_publisher发布/joint_states,并由/serial_node订阅并下发运动数据position,七轴的模型舵机不动,二轴的模型舵机可以动...
2.使用moveit做了运动规划后,舵机不动,提示:Executed completed: ABORTED
...这可能是什么原因引起的?您遇到过类似的情况吗
0321_rqt_graph.png
my_robot_rqtgraph.png
发表于 2019-4-15 11:21 | 显示全部楼层
初学者,谢谢大侠
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-20 20:46 , Processed in 0.084261 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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