在运行Ubuntu MATE 18.04.2(Bionic)的Raspberry Pi 3B +上安装ROS Melodic

在本教程中,您将学习如何配置Raspberry Pi 3B +板以运行Ubuntu MATE 18.04.2(代号Bionic)和第12 ROS发行版(代号Melodic)。但是我们在这个博客上研究了机器人技术。我们需要ROS从传感器和控制电机驱动器读取数据。因此,我添加了安装Arduino IDE和rosserial的步骤,以在Arduino板上运行ROS节点。

考虑到Melodic是新的ROS发行版,设置ROS环境是成功的一半。并非Kinetic中可用的所有ROS软件包都已迁移到Melodic。

我的猜测是,由于此发行版具有长期支持,因此Kinetic中所有可用的软件包都将迁移到Melodic。如果您想开始学习ROS,我很确定您要使用的所有软件包都已在Melodic中提供。否则,如果您现在不需要Melodic,则可以考虑安装ROS Kinetic。在本教程中,您可以找到所有要执行的步骤 在Raspberry Pi 3和Ubuntu MATE 16.04上安装ROS Kinetic.

将Kinetic程序包迁移到Melodic还需要一些其他步骤。该程序包必须从源代码构建(将程序包从GitHub克隆到catkin工作区),并检查已迁移程序包的package.xml文件中的依赖项。

Melodic进行了改进,包括Kinetic中的C ++ 14(相对于C ++ 11),OpenCV支持以及最低版本3.2,rviz和urdf更改。这四个只是Melodic所有改进的一部分。所有改进和迁移指南均可参考 这里.

因为我们 ’关于迁移的软件包,ROS为我们提供了有关Melodic中可用软件包列表的一些见解。清单是 这里.

Ubuntu MATE(Bionic)安装

Linux和隐含Ubuntu MATE版本的想法是根据您的需要对其进行自定义。使用不同版本的原因实际上是其随附的软件包。

对于此安装和其他项目,我在Pi上运行Ubuntu MATE而不是Raspbian。 Raspbian是一个非常好的Raspberry Pi操作系统,但是安装ROS和新软件包却很麻烦。使用MATE会比Raspbian消耗更多的资源,但是最后,一切正常,我可以使用GPIO和USB端口来控制机器人。

我使用MATE 16.04和MATE 18.04。如果你’重新尝试构建机器人,MATE只是一个平台,可以承载运行算法的不同框架,对我们的影响不大’与Pi有关。如果你’如果将其用于多媒体,那么肯定是最新的MATE版本令人印象深刻,并带有更多实用程序。

在本教程中,我使用新的Raspberry Pi 3B +,使其有用的第一步是安装Ubuntu MATE映像。

下载适用于Raspberry Pi 3B +的Ubuntu MATE 18.04.2

下载适用于Raspberry Pi 3B +的Ubuntu MATE 18.04.2

从下载图像存档 这里。该图像在Raspberry pi 2 B,3 B和3 B +上运行。
阅读更多→

  • 发表于: ROS

ROS服务– Practical Example

如果你 are a 开始ner in ROS 和 want to learn how to create a ROS 服务, this tutorial is 对于 you. I describe all the steps in details starting with creating the package 和 up to use the 服务 和 打印 the results.

本教程的目的是将其他信息添加到ROS服务的材料支持上, ROS Wiki页面.

关于ROS服务的几句话

  • ROS服务与远程过程调用的运行时间完全相同;
  • ROS服务具有输入和输出;输入和输出的定义类似于ROS消息;
  • ROS服务可以具有输入数字和输出字符;
  • 通常您应该在定义ROS服务时 ’偶尔需要做某事。例如我’将为我的机器人创建ROS服务,该机器人在遇到障碍物时会拍照。

软件和编程语言:

  • I’m使用ROS Kinetic版本1.12.14
  • 操作系统是Linux Ubuntu 16.04 LTS
  • 编程语言:Python

下面,我详细介绍了实现ROS服务的实际示例的所有步骤。在这个例子中,我’ll将使用具有随机数作为输入并且具有ON或OFF文本作为输出的ROS服务。

1.创建ROS包

我想从头开始运行此练习,第一步是创建一个包来存储服务文件。如果您已经有一个软件包,并且只想创建一个ROS服务,则不需要这样做。

导航到 src 工作区的目录,然后键入以下命令:

catkin_create_pkg ros_service 红润的

光盘..

catkin_make

源devel / 设定.bash

如果你 finish the above commands, you should have a new ROS package called ros_service. The first step is finished 和 next we will start working to create the ROS 服务. The first step is to create the srv 目录和服务定义文件。

2.建立‘srv’ directory 和 ‘srv file’

从这一步开始,当我们使用输入和输出创建服务定义文件时,将创建目录。
当您要创建ROS服务时,导航至包目录:

roscd ros_service

mkdir srv

在srv目录中,创建一个名为ServiceExample.srv的文件,并编写以下三行:

int32 一个零

弦转

三个破折号标记输入的结尾和输出的开始。

最后三行‘srv file’,我们结束了服务定义文件。接下来,是时候更新创建代码和类定义以与我们定义的服务一起使用所需的两个文件了。

3.更新package.xml和CMakeLists.txt

Open the package.xml file 和 write the below lines. 如果你 put the 红润的 dependency when you create the ROS package, you should already have into the file the 红润的 build depend 和 run depend. Otherwise, put all the below lines into the package.xml:

<build_depend> 红润的</build_depend>
<exec_depend> 红润的</exec_depend>
<build_depend> 烂摊子age_generation</build_depend>
<exec_depend> 烂摊子age_runtime</exec_depend>

We’对package.xml文件进行处理,我们将转到CMakeFiles.txt。在此文件中,我们必须添加依赖项和服务文件:
(信息:您应该已经将大多数这些列表作为注释)

find_package(catkin所需组件
罗斯科普
红润的
烂摊子age_generation
)

add_service_files(
档案
服务实例.srv
)

generate_messages(
依赖
std_msgs
)

现在,我们必须运行catkin_make命令来生成用于与服务交互的类。

catkin_make

源devel / 设定.bash

4.编写callService.py

在srv目录中,创建一个名为callService.py的新文件。使用以下命令将此文件可执行“chmod + x callService.py”.
该文件显示了一个简单的服务器,该服务器接受输入一或零,并作为输出返回ON或OFF。

蟒蛇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/ usr / bin / env python
 
进口 红润的
#import catkin生成的代码。
#我们需要ServiceExample作为第一种消息类型,
#和来自第二个消息类型的ServiceExampleResponse  ServiceExample.srv文件
ros_service.srv 进口 服务实例, 服务实例Response
 
定义 turn_on_off(烂摊子):
如果 烂摊子.一个零==1:
    返回  服务实例Response('上')
其他:
    返回  服务实例Response(“关闭”)
 
 
红润的.init_node('service_respond')
 
服务=红润的.服务('service_example',服务实例,turn_on_off)
 
红润的.旋转()

5.检查服务和有用的命令

该服务已编写,因此我们必须尝试一下。第一步是打开一个终端并打开roscore。然后打开一个新终端并运行:

rosrun ros_service callService.py

您的服务应已启动并正在运行。要检查该服务是否有效,我们必须提供一些输入:

rosservice呼叫service_example‘0’

您的结果应如下图所示:

rosservice结果

rosservice结果

6.使用服务

To use the 服务 we have to create a new file. 让’s在srv目录中创建名为‘useService.py’. Don’不要忘记使其可执行。

蟒蛇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/ usr / bin / env python
 
进口 红润的
 
ros_service.srv 进口 服务实例
 
进口 系统
 
红润的.init_node(“ use_service”)
 
#等待要发布的服务,否则服务使用将失败
红润的.wait_for_service('service_example')
 
#设置服务的本地代理
srv=红润的.服务代理('service_example',服务实例)
 
#使用服务并为其发送值。在这种情况下,我可以发送1或0
服务_example=srv(0)
 
#打印服务结果
打印 服务_example

  • 发表于: ROS

制作机器人服务员RoboBioca

到目前为止,我已经写了三篇有关RoboBioca机器人的设计,电子学,编程和组装的文章。这是该系列的第四篇文章,我将描述整个项目。

RoboBioca机器人服务员

RoboBioca机器人服务员

RoboBioca项目文章列表:

  1. 制作机器人爪
  2. 如何使用Arduino和A4988驱动程序控制NEMA 17步进电机
  3. 如何使用Arduino控制伺服电机(无噪音,无振动)

我创建了这个机器人服务员来帮助我们推广沙棘有机果汁。该机器人由一个旋转基座和一个机械臂组成,该旋转基座用于管理果汁饮料,而机械手臂一次可以拍摄一滴并提供给客户。

施工过程持续了5个星期,在此期间,我用一台新打印机更换了旧打印机,打印了数十个组件,并且每晚都睡不超过4个小时,所以我住了几个晚上。我这次马拉松的结果’我创造了RoboBioca对我来说是轰动的。此外,与机器人接触的BIOFACH 2019纽伦堡博览会的参观者的反应远远超出了我的预期。

我对机器人手臂中使用的伺服电机感慨万千。我担心伺服器无法打出20-30次以上的果汁。令人惊讶的是,机械臂抵抗并提供了300多次果汁注射,并且仍在工作。

硬件和软件技术
IoT应用程序Blynk和Arduino草图覆盖了软件领域。我使用Blynk向机器人发送命令。我将其安装在Android平板电脑上,但在智能手机上也可以轻松使用。平板电脑和机器人之间的通信通过蓝牙进行。

硬件部分较为复杂,包括机械臂和用于塑料杯的旋转平台。机器人手臂是 6轴SainSmart套件 模仿工业设计。该套件的初始版本在末端执行器和性能上有所变化。

建立RoboBioca的步骤
我已经对旋转底座和机器人爪进行了CAD设计。机械臂不是在CAD中设计的。我不认为CAD设计可以帮助我完成该项目,因为它实际上已经存在并且可以正常工作。下一步是将项目分为几个小部分,可以独立于其他模块进行构建和测试。我完成了每个零件的组装,然后组装了完整的机器人。

该项目的模块:

  1. 机器人爪
  2. 机械臂
  3. 带杯架底座
  4. 机器人控制的应用

机器人爪

我有 本文所述 我如何设计,打印和编程机器人爪。

末端执行器是用于执行以下操作的机器人爪:

  • 抓住一个装有果汁的小塑料杯;
  • 检测塑料杯是否被抓住。我使用限位开关传感器检测塑料杯;
  • 检测何时接管塑料杯;

两个机器人爪由单个伺服电机驱动。实际上,两个爪中只有一个附接到伺服电机轴上。通过齿轮系统,连接到伺服系统的爪的旋转驱动第二爪的运动。

One of the claws of the end-effector hosted a limit 开关 sensor. The sensor is used to detect the plastic cup. In other words, 如果 there is a plastic cup -> the sensor is closed; 如果 the plastic cup is missing -> the sensor is open. In this way, I know whether or not there is a plastic cup between the robot claw. In addition, I use the same sensor to know 如果 the plastic cup is taken by the customer. After the customer raises the juice shot, I know that the plastic cup is taken 和 the arm can enter into the standby 位置ition or take another shot with juice. 阅读更多→

制作机器人爪

2019年初,我正在努力建立一个推广沙棘有机果汁的平台。平台的第一个完成部分是3D打印的机械爪。该爪连接到6轴机械臂 赛灵通。这是再现工业设计的经典机械手。

机械爪用于:

  1. 抓住一个装有果汁的小塑料杯;
  2. 检测塑料杯是否被抓住。我使用限位开关传感器检测塑料杯;
  3. 检测何时接管塑料杯;

该设计
该应用程序不是很复杂。我需要一个机械爪来小心地搬运一个塑料果汁杯,而又不会摔坏或丢掉它。我分析了步骤,动作和最坏情况,并决定保留机器人爪的经典设计。我需要抓住并移动塑料杯的是两个由伺服马达驱动的爪子。具有多个爪和多个自由度的更复杂的设计将太多。

我对完成上述步骤有一些限制。首先,塑料杯的高度为5.2厘米。爪子不必覆盖较大的表面,因此应该有足够的空间拿起杯子。而且我可以’•用胶粘在内表面上的研磨材料防止杯子在爪之间滑动。当塑料杯被人接管时,塑料杯不应抵抗。

机械爪:CAD设计和3D打印

解决方案

  • 爪的厚度为1厘米,约为塑料杯高度的20%。我本可以使它们的厚度减小一些,但我需要空间来添加用于检测塑料杯的限位开关传感器。
  • 排除了将橡胶件粘合到爪的内表面的可能性。橡胶本来可以防止塑料杯打滑,但很难从爪子上取下来。我会冒着机器人手臂和杯子一起被拉起的危险。解决方案是使用能够保持爪子位置的高扭矩伺服电动机。 赛灵通将SG-90伺服电机用于6轴机械臂夹具。这些伺服电机不能在爪之间固定任何东西。

阅读更多→

如何使用Arduino和A4988驱动程序控制NEMA 17步进电机

如果你’我来到这篇文章,你’大概是在我使步进电机运动而没有噪音,振动或跳动之前的同一时间。那’为什么在本文中,我将提供足够的深度知识来了解如何控制步进电机(例如– a NEMA 17 或其他步进电机尺寸)并解决可能出现的问题。

在3D打印机中使用步进电机时,很可能是由电子和编程专家组成的团队进行计算,并将所有内容完美地结合在一起。相反,当我尝试在业余爱好项目中使用相同的步进电机时(每天正常工作8小时后),’完全不同。而且,如果您的预算很低,只是想像我一样使用步进电机制造机器人或旋转杯架,事情就会变得复杂。所有这些情况可能会让您头疼。

让’从头开始,我’从整个故事的开始,我会用几句话告诉您。可以在本文中写一个很长的故事,但是我对步进电机有很多解释。

如何使用Arduino和A4988驱动程序控制NEMA 17步进电机

如何使用Arduino和A4988驱动程序控制NEMA 17步进电机

我如何开始使用NEMA 17步进电机

首先,我将基于NEMA电机发表评论。像许多其他人一样,我’我听说过NEMA步进电机,我想‘NEMA’是电机的品牌。完全错误! NEMA是描述步进电机的标准。例如,NEMA 17是具有1.7 x 1.7英寸面板的步进电机。换句话说,NEMA 17是一个尺寸,而不是一系列步进电机。
阅读更多→

如何使用Arduino控制伺服电机(无噪音,无振动)

在本教程中,我提供了足够的深度,以通知您如何使用Arduino控制伺服电机。我使用PWM软件和硬件资源,因为这是控制一个或多个伺服电机的正确方法。阅读本文之后,您应该能够控制自己的业余伺服器而不会产生噪音或振动。另外,我在文章末尾写了一个部分,描述了如何修复多个MG996R伺服器和结论。

在详细介绍之前,我想告诉您一些事情。我知道制作出色的作品然后将其发布到全世界有多么艰辛。但是,无论在论坛和博客上写了多少关于如何控制诸如MG996R之类的业余伺服电机的内容,几乎所有这些教程都提供了在不施加扭矩的情况下自由工作时进行控制的信息。伺服器在施加扭矩的情况下改变其行为。如果控制不正确,则伺服器会振动,发出噪音并随机旋转。这就是我写本教程的方式。我想向您详细介绍尝试控制伺服器的解决方案,以及在施加扭矩的同时平稳控制许多爱好伺服器(如MG996R)的解决方案–在我的情况下,伺服机构会驱动机械臂。

故事:

RoboBioca机器人手臂

RoboBioca机器人手臂

MG996R伺服是用于移动伺服电机的主伺服电机。 赛灵通 6轴机械手。 MG996R从手臂的所有6个轴上驱动其中四个。仅两个轴使用SG90伺服器移动末端执行器。

我用这条机械臂搭建了一个机器人服务员,可以抓住并搬运一个小塑料杯。因为我的项目需要其他内容,所以无法使用手臂的默认配置。我仅用一台带有金属齿轮箱和爪的伺服电动机替换了SG90伺服电动机。这样,我将手臂的自由度数从6减少到5。

在这个项目中,我使用了 布林克 应用程序向机器人发送命令。运行Blynk的Android平板电脑与机器人之间的通信是通过蓝牙连接无线完成的。

而且因为我没有足够的问题要解决,所以蓝牙连接会干扰伺服电机。这些在运行蓝牙连接时发出声音并随机运行。因此,还有一个额外的问题需要解决。

电源供应
必须为伺服电机提供稳定的6V电源。我用可调 LTC3780 DC降压/升压转换器模块。另外,我有一个 电源适配器(12V– 3A) 喂转换器。我使用数字万用表为转换器设置了接近6V的输出电压。

第一次尝试
最初的尝试是使用 Arduino传感器防护板V5。 Arduino UNO的最大问题是,我只有两个PWM引脚(引脚9和10)可以在运行 Servo2 图书馆。 PWM引脚用于伺服电机的控制信号。与直流电动机不同,伺服器需要PWM控制来确定位置而不是伺服轴的速度。

这是随Arduino 0016和更早版本分发的Servo库。它可以使用标准板上的引脚9和10或Mega上的11和12来驱动最多两个伺服器。其他引脚将无法正常工作。

当我用PWM控制它们时,我有两个伺服电机工作良好,’全部。我离开他们,再试一次。

第二次尝试
我可以使用五个伺服器和只有两个带PWM的引脚,尝试了另一种方式来控制伺服电动机。我放弃了Servo2库,使用电容器和Servo库。这项尝试比前一次尝试更成功。根据Internet上的解决方案,我为每个伺服器使用了470uF 50V电解电容器。它有效,但是不如我所愿。震动和振动’t出现在大多数伺服位置,但随机旋转仍然继续。

第三次尝试
第三次尝试成功。我用了 Adafruit 16通道PWM /伺服驱动器 控制所有五个伺服器该驱动器使用i2c控制的PWM驱动器,该驱动器具有内置时钟和每个伺服器12位分辨率,这意味着在60Hz更新速率下约为4us分辨率。

我用了 Adafruit_PWMServoDriver库 而编写代码的灵感来自该库提供的示例。

这是一个演示,其中机器人手臂使用Adafruit通过PWM控制’s driver.

C ++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#包括<Wire.h>
#包括<Adafruit_PWMServoDriver.h>
 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
 
 
#定义MIN_PULSE_WIDTH 135
#定义MAX_PULSE_WIDTH 470
#定义DEFAULT_PULSE_WIDTH 150
#定义频率50
 
 
const uint8_t 伺服A = 0;
const uint8_t 伺服B = 1;
const uint8_t 伺服C = 2;
const uint8_t 伺服D = 3;
const uint8_t 伺服E = 4;
 
const uint8_t 延迟Servo = 25;
 
 
虚空 controlServo0(uint8_t oldPos, uint8_t newPos)
{
  如果 (oldPos <= newPos) 开关Servo = 向上 ; 其他 开关Servo = ;
 
  开关 (开关Servo) {
    案件 向上 : {
        对于 (uint8_t 位置 = oldPos; 位置 <= newPos; 位置 + = 1) {
          延迟(延迟Servo);
          pwm.setPWM(0, 0, angleToPulse(位置));
        }
        打破;
      }
    案件 : {
        对于 (uint8_t 位置 = oldPos; 位置 >= newPos; 位置 -= 1) {
          延迟(延迟Servo);
          pwm.setPWM(0, 0, angleToPulse(位置));
        }
        打破;
      }
  }
}
 
 
虚空 controlServo1(uint8_t oldPos, uint8_t newPos)
{
  如果 (oldPos <= newPos) 开关Servo = 向上 ; 其他 开关Servo = ;
 
  开关 (开关Servo) {
    案件 向上 : {
        对于 (uint8_t 位置 = oldPos; 位置 <= newPos; 位置 + = 1) {
          延迟(延迟Servo);
          pwm.setPWM(1, 0, angleToPulse(位置));
        }
        打破;
      }
    案件 : {
        对于 (uint8_t 位置 = oldPos; 位置 >= newPos; 位置 -= 1) {
          延迟(延迟Servo);
          pwm.setPWM(1, 0, angleToPulse(位置));
        }
        打破;
      }
  }
}
 
 
虚空 controlServo2(uint8_t oldPos, uint8_t newPos)
{
  如果 (oldPos <= newPos) 开关Servo = 向上 ; 其他 开关Servo = ;
 
  开关 (开关Servo) {
    案件 向上 : {
        对于 (uint8_t 位置 = oldPos; 位置 <= newPos; 位置 + = 1) {
          延迟(延迟Servo);
          pwm.setPWM(2, 0, angleToPulse(位置));
        }
        打破;
      }
    案件 : {
        对于 (uint8_t 位置 = oldPos; 位置 >= newPos; 位置 -= 1) {
          延迟(延迟Servo);
          pwm.setPWM(2, 0, angleToPulse(位置));
        }
        打破;
      }
  }
}
 
虚空 controlServo3(uint8_t oldPos, uint8_t newPos)
{
  如果 (oldPos <= newPos) 开关Servo = 向上 ; 其他 开关Servo = ;
 
  开关 (开关Servo) {
    案件 向上 : {
        对于 (uint8_t 位置 = oldPos; 位置 <= newPos; 位置 + = 1) {
          延迟(延迟Servo);
          pwm.setPWM(3, 0, angleToPulse(位置));
        }
        打破;
      }
    案件 : {
        对于 (uint8_t 位置 = oldPos; 位置 >= newPos; 位置 -= 1) {
          延迟(延迟Servo);
          pwm.setPWM(3, 0, angleToPulse(位置));
        }
        打破;
      }
  }
}
 
虚空 controlServo4(uint8_t oldPos, uint8_t newPos)
{
  如果 (oldPos <= newPos) 开关Servo = 向上 ; 其他 开关Servo = ;
 
  开关 (开关Servo) {
    案件 向上 : {
        对于 (uint8_t 位置 = oldPos; 位置 <= newPos; 位置 + = 1) {
          延迟(延迟Servo);
          pwm.setPWM(4, 0, angleToPulse(位置));
        }
        打破;
      }
    案件 : {
        对于 (uint8_t 位置 = oldPos; 位置 >= newPos; 位置 -= 1) {
          延迟(延迟Servo);
          pwm.setPWM(4, 0, angleToPulse(位置));
        }
        打破;
      }
  }
}
 
虚空 robotServoExample() {
  controlServo0(140, 140);
  controlServo1(145, 145);
  controlServo3(85, 85);
  controlServo4(155, 155);
}
 
虚空 设定() {
  pwm.开始();
  pwm.setPWMFreq(频率);
}
 
虚空 循环() {
robotServoExample();
}

MG996R伺服器的故事

第一个故障的伺服电机是转动机器人手臂的那个。它很容易失败–我注意到操作过程中冒出了一些烟。第二个失败的伺服器位于基座。这一人不再承认这一立场。无论特定位置的命令如何,它都会随机更改其位置。原因未使用蓝牙模块。我试图在不连接通讯模块的情况下定位伺服电机。

运行约30分钟后,第一个伺服器发生故障。第二次更友善,又经过大约2个小时的操作后失败了。在这段时间里’我们使用机械臂测试了不同的位置。

I’当我开始工作以解决实际上使我的血压升高的两个问题时,出现了两个MG996R伺服电动机出现故障的情况:随机摇动(振动)和噪音。

最初,我以为我做错了’这就是为什么伺服电机这么快损坏的原因。在Google上搜索后,看起来像我’我不是唯一与MG996R一起工作并在测试阶段将其损坏的人。最后,我点了一些 新伺服 然后我开始研究我在哪里错了,以及如何解决这个问题。

我订购了三台MG996R伺服电机。他们很快来了,我开始测试它们。它’我不是第一次买到非常便宜的东西(MG996R的价格大约为6欧元/ 7美元),并且没有工作。这次对我来说很特别。从三个伺服电机来看,它们全都不起作用。

对于三台无法使用的新型伺服电机,我认为最好寻找替代方案。一世’我们一直在寻找具有与SainSmart机械臂相同大小的替代产品。我找到了Power HD Servo 1501MG。它们的尺寸与MG996R相同,但扭矩更高。

机器人手臂升级版中使用的五台MG996R伺服电机(原始版本的手臂使用4台MG996R),剩下三台。 1501MG取代了两个MG996R伺服器。一个MG996R伺服器驱动肩膀偏航,另一个驱动手腕偏航,另一个驱动机器人爪。

我如何修复MG996R

以下任何方法都需要接受电子学方面的培训,并需要一定的螺钉,变速箱和润滑脂经验。在伺服器内部进行操作时,请格外小心,您将自行承担责任。

  1. 伺服电机中的两个’仅需拧下螺丝即可将其固定。我控制它们在不放置变速箱盖的情况下从位置30来回移动到160,然后固定变速箱盖 …而且有效。听起来有些愚蠢,但这就是我的工作方式。我怀疑问题出在变速箱内的​​齿轮位置上。最有可能的是,直流电动机在旋转时没有全部啮合。可能会有组装错误或运输冲击。
  2. 一种新的伺服器存在一些更大的问题。一档不’牙齿只有一两个。除此之外,我在变速箱内发现了一块塑料。幸运的是,我从那里拿走了备用零件的伺服器烧毁了,我把所有零件装回去,并且工作正常。

    MG996R缺少主题

业余伺服器的结论

  • 尽量减少手动更改伺服器的位置。这会很快损坏变速箱,而伺服可能会失效;
  • the servo motors used in hobby projects works well between 位置itions 10 和 170. 如果你 place a 位置ition less than 10 or greater than 170 it makes a noise 和 gets into vibrations;
  • 伺服电源必须尽可能接近6V的值。较高的电压会燃烧它,而较低的电压会使它随机运行。另外,请不要尝试直接从Arduino开发板或项目中使用的任何其他控制器馈送伺服器。您将会有很多惊喜;
  • 如果同时使用多个伺服电机(例如,一个机械手),则需要对它们进行逐一编程。如果其中一个伺服器命令不正确并移动到较不理想的位置,则对其他伺服器影响很大。机械手可能会触摸工作台或周围的其他物体,从而损坏伺服器的变速箱;
  • 如果没有稳定的6V电源,则在伺服电机的电源线之间必须使用电解电容器。

运行ROS的Raspberry Pi 3(B / B +)的替代品

树莓派3(B / B +)的更多强大替代品

树莓派3(B / B +)的更多强大替代品

I’我非常参与开发用于外部工作的自主机器人平台。该机器人将在夏季的白天工作几个小时,这会导致其所有组件的高温。我主要关心的是电子零件。我已经计划为这些设备安装冷却系统,但是我不确定是否可以将温度值保持在可接受的阈值。

此外,我想使用在压力下不工作的零件来降低电子设备的温度。低应力会导致组件产生低温。因此,我’ve come to look 对于 树莓派3 运行ROS并与机器人通信的替代方法。

我使用Raspberry Pi 3运行ROS Kinetic,监视和控制机器人。 Raspberry Pi是一个非常稳定的平台,可以连续工作数周而不会出现问题。它的替代方案必须在操作,社区支持和资源方面提供尽可能多的稳定性。

此项更改的预算不超过150欧元。我的研究导致了下一个列表(一旦出现新的替代方法,该列表将被更新)。

目前无法使用Jetson TK1 / TX1 / TX2或Intel NUC。三种Jetson变体中的任何一种或Intel计算机的价格都在几百欧元。如果运行ROS和计算机视觉应用程序,则值得在这种板上投资。否则,我看不出有任何理由花费数百欧元来运行用于传感器和导航算法的ROS节点。

  • 自由者叛徒
    添加于19December.2018
    叛徒 具有与Raspberry Pi 3兼容的外形尺寸,并且可以通过其1.4GHz ARM Cortex-A53处理器和4GB DDR4轻松运行ROS。它的价格为80.00美元(带有4GB DDR4的版本),但考虑到它没有WiFi,最终价格将上涨几美元。如果您想使用此功能,则需要一个USB软件狗。
  • ODROID-XU4
    XU4 Cortex-A15处理器的价格约为63欧元,具有竞争优势,可以提供2Ghz和2GB LPDDR3。该板的唯一缺点是缺少内置的WiFi模块。我需要额外支付5欧元才能购买WiFi模块以建立互联网连接。
  • 华硕Tinker
    华硕修补匠 在具有2GB RAM的QuadCore ARM SOC 1.8GHz处理器上运行ROS节点。它具有内置的 WiFi模块,价格约49欧元。我对操作系统有些怀疑。在亚马逊的评论中,其他用户发现了Android和Debian图像的稳定性问题。这让我三思而后行。对我而言,连续使用数月之久的单板计算机非常重要。不稳定的操作系统可能导致大量重启和停机。
  • Rock64
    Rock64 有几种变体,最强大的一种有4GB RAM和ARM Cortex A53 64位处理器。该板可以运行完整版的Linux Ubuntu或Debian。考虑到性能价格也不错–大约38欧元。我唯一关心的是社区的支持。一个活跃的社区可以为我节省很多时间来解决问题。

如何设置ROS Kinetic在Raspberry Pi 3和远程Linux PC之间进行通信

如何设置ROS Kinetic在Raspberry Pi 3和远程Linux PC之间进行通信

我有一个运行ROS Kinetic的Raspberry Pi 3,并用它来控制自主机器人。该计划是通过添加计算机视觉功能来改进我的机器人。 Raspberry Pi具有构建智能机器人的资源,社区可以帮助我更多地解决许多问题。这就是目前不使用其他具有高级硬件资源的单板计算机对其进行更改的原因。不好的是,Pi 3的图形应用程序功能有限,例如 尔维兹 或运行计算机视觉应用程序。

我的想法(我希望是一个好的并且可以工作)是在PC上运行rviz和Gazebo模拟器时,在同一网络中使用Pi 3和Linux计算机在彼此之间交换数据。

实现我的想法的第一步是设置ROS Kinetic以在Pi 3和远程Linux计算机之间进行通信。以下是使两台计算机相互通信的步骤。

  • 第1步: 我检查了Linux PC上的ROS Kinetic是否一切正常。我前一段时间使用描述的步骤安装了它 这里.
  • 第2步: 我在Raspberry Pi 3板上重新安装了Linux映像和ROS Kinetic。自从我选择 在Raspbian Stretch Lite上安装ROS。我的机器人需要这个操作系统:它不需要’没有桌面应用程序或任何类型的GUI。
  • 第三步: 在此步骤中,我会特别注意ROS主节点(Pi)的IP地址和其他ROS节点(Linux PC)的IP地址。
  • 在Raspberry Pi 3上的3.1上,键入以下命令:
    C ++
    1
    须藤 纳米 .巴什尔

    导航到文件末尾并添加以下两行:
    C ++
    1
    2
    #主节点的IP地址= Raspberry Pi的IP地址
    出口 ROS_MASTER_URI=http://192.168.0.1:11311

    C ++
    1
    2
    #主节点的IP地址= Raspberry Pi的IP地址
    出口 ROS_HOSTNAME=192.168.0.1
  • 在Linux PC上的3.2,键入以下命令:
    C ++
    1
    须藤 纳米 .巴什尔

    导航到文件末尾并添加以下行:
    C ++
    1
    2
    #主节点的IP地址= Raspberry Pi的IP地址
    出口 ROS_MASTER_URI=http://192.168.0.1:11311

    C ++
    1
    2
    #您的Linux PC的IP地址
    出口 ROS_HOSTNAME=192.168.1.101

这些都是使两台Linux计算机通信并共享节点,主题和服务的所有步骤。

  • 发表于: ROS

如何在运行Raspbian Stretch Lite的Raspberry Pi 3上安装ROS Kinetic

我想用Raspberry Pi 3开发板和ROS Kinetic控制自主机器人。 Pi 3将连接到另一台用于监视和控制设置的Linux PC。电脑的设置在这里 文章.

由于缺乏处理器和内存方面的Pi资源,我’m被迫更有效地利用资源。第一步是在Pi上安装Raspbian Stretch Lite之类的操作系统。通过类型命令与该系统进行交互。它没有’桌面版随附GUI和其他软件。从理论上讲,如果您不想给Pi板增加太多不必要的任务,这是一个完美的操作系统。

当PC为从机时,系统将使用Raspberry Pi板作为主机。此配置意味着在机器人上而不是在远程PC上运行Roscore。 PC用于查看来自Pi的消息或将一些手动更正发送回机器人。

我在Raspbian Stretch Lite上没有安装GUI工具的情况下安装了ROS Kinetic版本,并在下面做了所有步骤。

  • 步骤1:下载并安装Raspbian Stretch Lite
    描述了Raspberry Lite的安装步骤 这里.
  • 步骤2:通过SSH连接到Pi,然后运行以下命令:

    须藤 sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

    wget http://packages.ros.org/ros.key -O – | 须藤 apt-key add –

    须藤 apt-get更新

    须藤apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

    须藤apt install dirmngr

    须藤 rosdep初始化

    rosdep更新

    rosinstall_generator ros_comm–rosdistro kinetic –deps –wet-only –tar >dynamic-ros_comm-wet.rosinstall

    wstool init srcdynamic-ros_comm-wet.rosinstall

    rosdep安装-y–from-paths src –ignore-src –rosdistro动力学–os=debian:stretch

    须藤./src/catkin/bin/catkin_make_isolated–安装-DCMAKE_BUILD_TYPE =发布–安装空间/ opt / ros / kinetic -j1

    (感谢CaJU和Bruce W)

    来源/opt/ros/kinetic/setup.bash

    回声‘来源/opt/ros/kinetic/setup.bash’ >> ~/.bashrc

    mkdir -p〜/ catkin_workspace / src

    cd catkin_workspace / src

    catkin_init_workspace

    cd〜/ catkin_workspace /

    catkin_make

    源〜/ catkin_workspace / devel / 设定.bash

    回声‘源〜/ catkin_workspace / devel / 设定.bash’ >> ~/.bashrc

    出口| grep ROS

  • 步骤3(可选): 安装过程需要几个小时,我真诚地’不想过早重复安装。我决定在完成初始安装后立即克隆存储卡。 这里 是克隆存储卡所需的步骤。

您可以找到其他信息 这里这里.

  • 发表于: ROS

4轴和6轴Arduino机器人手臂套件

机械臂的构建和控制似乎很复杂。它涉及到教学如何对微控制器进行编程以控制某些伺服电机以完成重复性任务。但是您可以学习使用机械臂套件快速完成此操作。

I’去年,我在网上看到了很多机械臂套件,但以下是当今的最爱。本文的机械臂具有4或6个自由度,可以适合任何项目。

  • 带遥控PS2的4DOF机械臂
    带遥控PS2的4DOF机械臂

    带遥控PS2的4DOF机械臂

    来自的机械臂套件 邦古德 由两个ps2游戏杆控制。它’这是控制手臂的简单方法,并且无需在Arduino板上运行高级编程代码。

    与可编程工具包相比,这种工具包的应用范围很小,但对于39.99美元的价格,这对学校学生来说是一个不错的开始。它有一个 手册 以及安装Arduino开发板代码的指南。

  • LewanSoul LeArm 6DOF
    LewanSoul LeArm 6DOF

    LewanSoul LeArm 6DOF

    该机械臂完全由金属和铝制成,可举起约250克的重量。

    蓝牙模块已添加到机器人的主板,以使用智能手机或平板电脑控制手臂。另外,您还有一个应用程序,可以模拟机械臂的所有关节,以便您可以在触摸屏上推动它进行移动。如果您不想使用电线来控制手臂,就是这种情况。否则,您可以使用电线和遥控器在所有6个轴上移动机械臂。

    它既不是最便宜的6轴机械臂,也不是最昂贵的。它的价格为129.99美元 亚马孙。价格不包括运输费用。

  • 6轴台式机械臂
    6轴台式机械臂

    6轴台式机械臂

    以174.99美元的价格, Sainsmart 为我们提供了由简单组件制成的机械臂,任何人都可以使用,例如PVC管。对于可以轻松更改手臂结构的DIY用户来说,这种方法非常有用。该臂可用于诸如取放,码垛等应用。

    机械手需要外部电源,而不是Arduino Uno的5V DC。

    该套件的另一个很好的部分是文档。除了 维基,您会发现很多项目将机械臂用于不同的应用程序,例如拾取和放置对象或对象检测。

  • uArm Swift专业版
    uArm Swift专业版

    uArm Swift专业版

    与其他套件相比,uArm Swift Pro的应用范围很大。手臂具有0.2mm的重复精度和500g的最大有效载荷,非常适合拾取&将应用程序放置到3D打印中。

    这不是一个便宜的工具包。它的价格为$ 1,129.95 星火娱乐。该手臂是开源的,并由Arduino Mega 2560开发板控制。有关文档,您可以访问此 链接.