机械控制
1 机械控制
对于串联式多关节机器人,关节控制是针对机械臂各个关节的变量进行的控制,目标是让机械臂各个关节按照一定速度达到目标位置。
1.1 单关节控制
1.1.1 发送单关节角度
SendOneAngle(int jointNo, int angle, int speed)
返回值:无
参数说明:参数 1:关节号(1 - 6), 参数 2:角度(范围:-170°- 170°)),参数 3:速度(0-100)
示例:
mc.SendOneAngle(1, 100,70);
1.2 多关节控制
1.2.1 获取所有关节角度
GetAngles()
返回值:返回 int 类型数组,int[], length: 6
参数说明:无
示例:
var recv = mc.GetAngles();
1.2.2 发送所有关节角度
SendAngles(int[] angles, int speed)
返回值:无
参数说明:参数 1:所有关节角度(范围:-170°- 170°), 参数 2:速度(0-100)
示例:
int[] angles = new[] {100, 100, 100, 100, 100, 100};
mc.SendAngles(angles ,30);
1.3 完整使用案例
项目中的 program.cs 是完整的使用案例程序,可以在此基础上根据需要修改。
using System;
namespace Mycobot.csharp
{
class Test
{
static void Main(string[] args)
{
MyCobot mc = new MyCobot("/dev/ttyUSB0");
mc.Open();
// int[] angles = new[] {100, 100, 100, 100, 100, 100};
// mc.SendAngles(angles, 50);
// Thread.Sleep(5000);
// var recv = mc.GetAngles();
// foreach (var v in recv)
// {
// Console.WriteLine(v);
// }
// int[] coords = new[] {160, 160, 160, 0, 0, 0};
// mc.SendCoords(coords, 90, 1);
// Thread.Sleep(5000);
// var recv = mc.GetCoords();
// foreach (var v in recv)
// {
// Console.WriteLine(v);
// }
mc.SendOneAngle(1, 100,70);
// byte[] setColor = {0xfe, 0xfe, 0x05, 0x6a, 0xff, 0x00, 0x00, 0xfa};
mc.Close();
}
}
}
2 坐标控制
坐标控制是将机械臂以指定姿势移动到指定点,分为 x、y、z、rx、ry 和 rz。X、Y 和 Z 表示机械臂头部在空间中的位置(属于直角坐标系),而 rx、ry 和 rz 则表示机械臂头部在该点的姿势(属于欧拉坐标系)。
2.1 单一参数坐标
2.1.1 发送单一参数坐标
SendOneCoord(int coord, int value, int speed)
返回值:无
参数说明: 参数 1:坐标编号(1-6(X、Y、Z、RX、RY、RZ)),参数 2:坐标(X、Y、Z 值范围 -300-300.00 单位 mm RX、RY、RZ,值范围 -180-180 ),参数 3:速度(0-100)
示例:
mc.SendOneCoord(1, 160,30);
2.2 多参数坐标
2.2.1 获取所有坐标
GetCoords()
返回值:返回 int 类型数组,int[], length: 6
参数说明:无
示例:
>
var recv = mc.GetCoords();
2.2.2 发送多参数坐标
SendCoords (int [] coords, int speed, int mode)
返回值:无
参数说明:参数 1:所有坐标(X、Y、Z 取值范围 -300-300.00 单位 mm RX、RY、RZ,取值范围-180-180), 参数 2:速度(0-100), 参数 3:模式(0 - angular,1 - linear)
示例:
int[] coords = new[] {160, 160, 160, 0, 0, 0};
mc.SendCoords(coords ,30);
2.3 完整使用案例
项目中的 program.cs 是完整的使用案例程序,可以在此基础上根据需要修改。
using System;
namespace Mycobot.csharp
{
class Test
{
static void Main(string[] args)
{
MyCobot mc = new MyCobot("/dev/ttyUSB0");
mc.Open();
// int[] angles = new[] {100, 100, 100, 100, 100, 100};
// mc.SendAngles(angles, 50);
// Thread.Sleep(5000);
// var recv = mc.GetAngles();
// foreach (var v in recv)
// {
// Console.WriteLine(v);
// }
// int[] coords = new[] {160, 160, 160, 0, 0, 0};
// mc.SendCoords(coords, 90, 1);
// Thread.Sleep(5000);
// var recv = mc.GetCoords();
// foreach (var v in recv)
// {
// Console.WriteLine(v);
// }
mc.SendOneAngle(1, 100,70);
// byte[] setColor = {0xfe, 0xfe, 0x05, 0x6a, 0xff, 0x00, 0x00, 0xfa};
mc.Close();
}
}
}
3 io 控制
机械臂底部 Basic 和末端 Atom 上都有引脚,可以通过 io 控制设置引脚的高低电平,控制系泵等工具(引脚号可以查看 Basic 和 Atom 引脚处贴的引脚标签,输入输出共用)。
3.1 M5Stack-basic io 控制(m5)
3.1.1 设置输出 io 高低电平
SetBasicOut(byte pin_number, byte pin_signal)
返回值:无
参数说明:参数 1:引脚号(basic 输出引脚号),参数 2:状态(0--低电平,1--高电平)
案例:
mc.SetBasicOut(2, 1);
Thread.Sleep(100);
mc.SetBasicOut(5, 1);
Thread.Sleep(100);
3.1.2 获取输入 io 状态
GetBasicIn (byte pinnumber)
返回值:引脚状态(0--低电平,1--高电平)
参数说明:引脚号(basic 输入引脚号)
案例:设置输出引脚 2 为高电平
Console.WriteLine(mc.GetBasicIn(35));
Thread.Sleep(100);
Console.WriteLine(mc.GetBasicIn(36));
Thread.Sleep(100);
3.2 Atom io 控制
注意:320m5 无 atom io,所以不需要用到此模块 API
3.2.1 设置输出 io 高低电平
SetDigitalOut (byte pinnumber, byte pin_signal)
返回值:无
参数说明:参数 1:引脚号(atom 输出引脚号),参数 2:状态(0--低电平,1--高电平)
案例:
mc.SetDigitalOut(23, 0);
Thread.Sleep(100);
mc.SetDigitalOut(33, 0);
Thread.Sleep(100);
3.2.2 获取输入 io 状态
GetDigitalIn (byte pinnumber)
返回值:引脚状态(0--低电平,1--高电平)
参数说明:引脚号(atom 输入引脚号)
案例:
Console.WriteLine(mc.GetDigitalIn(19));
Thread.Sleep(100);
Console.WriteLine(mc.GetDigitalIn(22));
Thread.Sleep(100);
3.3 完整使用案例
using System;
using System.Threading;
namespace Mycobot.csharp
{
class Test
{
static void Main(string[] args)
{
MyCobot mc = new MyCobot("COM57");//树莓派机械臂串口名称:/dev/ttyAMA0
mc.Open();
Thread.Sleep(5000);//windows打开串口后,需要等待5s,Windows打开串口底部basic会重启
//set basic output io
/*mc.SetBasicOut(2, 1);
Thread.Sleep(100);
mc.SetBasicOut(5, 1);
Thread.Sleep(100);
mc.SetBasicOut(26, 1);
Thread.Sleep(100);*/
//get basic input io
Console.WriteLine(mc.GetBasicIn(35));
Thread.Sleep(100);
Console.WriteLine(mc.GetBasicIn(36));
Thread.Sleep(100);
//set atom output io
/*mc.SetDigitalOut(23, 0);
Thread.Sleep(100);
mc.SetDigitalOut(33, 0);
Thread.Sleep(100);*/
//get m5 input io
/*Console.WriteLine(mc.GetDigitalIn(19));
Thread.Sleep(100);
Console.WriteLine(mc.GetDigitalIn(22));
Thread.Sleep(100);*/
mc.Close();
}
}
}
4 gripper control
夹爪安装:
自适应夹爪将夹爪插在 atom 上面的引脚上,具体看下图:
电动夹爪插在顶端上的 485 接口处,具体看下图:
注意:myCobot280 和 myPalletizer 260 没有电动夹爪,只有 myCobot320 有电动夹爪。
4.1 自适应夹爪控制
支持设备:myCobot280、320&&myPalletizer 260
4.1.1 setGripperValue (byte angle, byte speed)
返回值:无
使用前调用接口
案例:
mc.SetGripperMode(0);
参数说明:参数 1:夹爪开合角度(0-100,0--闭合,100-张开最大角度),参数 2:夹爪开合速度(0-100)
案例:
mc.setGripperValue(0, 10);
Thread.Sleep(3000);
mc.setGripperValue(50, 100);
Thread.Sleep(3000);
4.1.2 getGripperValue ()
返回值:int 类型,返回夹爪角度(0--闭合,100-张开最大角度)
参数说明:无
案例:
`Console.WriteLine(mc.getGripperValue());`
4.2 电动夹爪控制
支持设备:myCobot320
4.2.1 setEletricGripper (int state)
返回值:无
参数说明:夹爪开关状态(0--关,1--开)
案例:
`mc.setEletricGripper(0);`
4.3 完整使用案例
using System;
using System.Threading;
namespace Mycobot.csharp
{
class Test
{
static void Main(string[] args)
{
MyCobot mc = new MyCobot("COM57");//树莓派机械臂串口名称:/dev/ttyAMA0
mc.Open();
Thread.Sleep(5000);//windows打开串口后,需要等待5s,Windows打开串口底部basic会重启
//set gripper open or close 0--close 100-open max 0-100
mc.setGripperValue(0, 10);
Thread.Sleep(3000);
mc.setGripperValue(50, 100);
Thread.Sleep(3000);
//set electric gripper
mc.setEletricGripper(0);
Thread.Sleep(100);
mc.setEletricGripper(1);
Thread.Sleep(100);
//get gripper state 0--close 1--open
Console.WriteLine(mc.getGripperValue());
mc.Close();
}
}
}