HumansXドキュメントセンター 公式サイトへ ↗

ロボット本体インターフェースの全体紹介

(一)はじめに

プロジェクトファイルの紹介

Arm_Experiment フォルダ内の実験プロジェクトは次のとおりです:

フォルダ名 実験内容
arm_circar_interpolation ロボットアームの円弧補間動作
arm_linear_interpolation ロボットアームの直線補間動作
module_control_servo 5 つの実験コースの内容を含みます
1. ハンドヘルドジャイロスコープのデータ取得
2. ハンドヘルドジャイロスコープモジュールによるロボットアームの動作制御
3. ハンドヘルドジャイロスコープモジュールによるパンチルト雲台の動作制御
4. PS2 コントローラーモジュールのキー値の取得
5. PS2 コントローラーによるロボットアームの動作制御

API インターフェースドキュメント

  • ロボットアームインターフェースの説明
  • サーボ制御通信プロトコルインターフェース
  • シリアル通信プロトコルインターフェース
  • カスタムフォント機能インターフェース
  • ノード管理プログラムインターフェース

プロジェクトソースコードのダウンロード

Gitee のソースコードリンク:(HumansX サポートより提供)

(二)ファイル構成

Arm_Experiment
    ├── arm_circular_interpolation   #机械臂圆弧插补运动项目
    │   ├── arm_control.py           #机械臂圆弧插补运动程序示例
    │   └── src                      #机械臂运动底层程序
    ├── arm_linear_interpolation     #机械臂直线插补运动项目
    │   ├── arm_control.py           #机械臂直线插补运动程序示例
    │   └── src                      #机械臂运动底层程序
    ├── module_control_servo         #模块控制机械臂,云台项目
    │   ├── control_gimbal.py        #手持陀螺仪模块控制云台运动程序示例
    │   ├── get_imu_rawdata.py       #获取手持陀螺仪模块数据程序示例
    │   ├── get_ps2_data.py          #获取PS2手柄模块按键值程序示例
    │   ├── imu_control_arm.py       #手持陀螺仪模块控制机械臂运动程序示例
    │   ├── Lvgl_Qmi8658_Socket_ui   #手持陀螺仪Arduino程序
    │   ├── ps2_control_arm.py       #PS2手柄控制机械臂运动程序示例
    │   └── src                      #机械臂-PS2模块底层程序
    │       ├── arm_control          #控制机械臂底层运动程序
    │       └── joy                  #控制PS2模块底层运动程序
    └── README.md                    #Arm_Experiment项目文档简介简介

ロボットアーム・パンチルト雲台の機能説明:

src
    └── arm_control
        ├── custom_font.py           #封装自定义字体样式(包含字体颜色,字体背景)程序
        ├── manager.py               #集成串口收发,舵机通信协议,机械臂运动,云台运动,自定义字体样式程序(统一调用)
        ├── serial_section.py        #封装串口收发的程序
        ├── servo_section.py         #封装上位机,与下位机舵机通信的协议程序
        └── user_arm.py              #封装机械臂运动学程序

各機能の説明

1. custom_font.py

"""
-----------------------------------------------------------------------------
终端打印带颜色, 背景色, 是否粗体, 是否带下划线的字体
text: 需要打印的内容
color: 需要打印的内容的字体颜色. 如果需要修改颜色, 改为对应颜色即可.
bg_color: 需要打印的内容的背景色. 如果需要修改颜色, 改为对应颜色即可.
bold: 需要打印的字体内容是否需要加粗. 如果需要加粗, 改为True即可.
underline: 需要打印的字体内容是否需要添加下划线. 如果需要添加, 改为True即可.
-----------------------------------------------------------------------------
"""
def color_text(self, text, color=None, bg_color=None, bold=False, underline=False)

2. user_arm.py

  1. ロボットアームの逆運動学関数
"""
机械臂逆运动学函数
x1: 表示机械臂X方向需要移动的距离
y1:表示机械臂Y方向需要移动的距离
z1:表示系欸比Z方向需要移动的距离
返回值: return(alpha, theta, beta, gamma)对应机械臂各个关节的角度值
"""
def get_coordinate(self, x1, y1, z1):
  1. ロボットアームの直線補間運動学関数
"""
机械臂直线插补底层函数
start_x: 机械臂初始x位置
start_y: 机械臂初始y位置
start_z: 机械臂初始z位置
end_x:   机械臂需要到达的目标x位置
end_y:   机械臂需要到达的目标y位置
end_z:   机械臂需要到达的目标z位置
num_points: 机械臂舵机转动细分点数,该值越大,机械臂转动越慢,值越小,机械臂转动越快
返回值: 无
"""
def linear_interpolation(self, start_x, start_y, start_z, end_x, end_y, end_z, num_points):
  1. ロボットアームの円弧補間関数
"""
机械臂圆弧插补函数
start_x: 机械臂圆弧插补运动起始x位置
start_y: 机械臂圆弧插补运动起始y位置
end_x:   机械臂圆弧插补运动要到达的目标x位置
end_y:   机械臂圆弧插补运动要到达的目标y位置
radius:  机械臂圆弧插补运动运动圆弧半径
num_points: 机械臂圆弧插补运动的过程点,该值越大,机械臂运动轨迹越圆
grap_value: 控制末端机械爪的角度,该值暂时没有使用,可忽略
返回值: 无
"""
def arc_interpolation(self, start_x, start_y, end_x, end_y, radius, num_points, grap_value):
  1. ロボットアームの円弧補間動作の中心座標を計算する関数
"""
计算机械臂圆弧插补运动的圆心坐标函数
x1: 机械臂圆弧插补运动起始x位置
y1: 机械臂圆弧插补运动起始y位置
x2: 机械臂圆弧插补运动要到达的目标x位置
y2: 机械臂圆弧插补运动要到达的目标y位置
radius: 机械臂圆弧插补运动运动圆弧半径
返回值: center_x, center_y(圆心坐标)
"""
def calculate_circle_center(self, x1, y1, x2, y2, radius):

3. servo_section.py

  1. チェックサムの計算
"""
计算校验和 - 所有数据的和与上0xFF
返回值: result & 0xFF
"""
def calculate_checksum(data)
  1. サーボ角度の拡大
"""
将角度值转换为两个字节(放大10倍后的uint16)
return [(value >> 8) & 0xFF, value & 0xFF]  # 高字节在前,低字节在后
"""
def angle_to_bytes(angle):
  1. サーボ回転制御関数
"""
控制舵机的主函数
参数:
servo_num: 要控制的舵机数量 (int)
servo_id: 舵机引脚号列表 (list[int])
servo_angle: 对应舵机的角度列表 (list[float])
返回: bytes: 完整的协议数据
"""
def servo_control(self, servo_num, servo_id, servo_angle):
  1. サーボ制御プロトコル生成関数
"""
内部方法:根据舵机数据字典生成协议帧
return bytes(protocol_data) 舵机协议
"""
def _generate_protocol(self, servo_data):

4. serial_section.py

  1. シリアルポートの初期化
"""初始化串口
Args:
    port (str): 串口设备路径,默认 /dev/ttyS1
    baudrate (int): 波特率,默认 115200
    timeout (int): 超时时间(秒),默认 1
"""
def __init__(self, port="/dev/ttyS1", baudrate=115200, timeout=1):
  1. シリアルポートを開く
"""
打开串口
return: 如果串口成功打开,返回true,如果串口打开失败,返回false
"""
def open(self):
  1. シリアルポートを閉じる
"""
关闭串口
return: 无
"""
def close(self):
  1. シリアル送信関数
"""
发送二进制数据到串口
Args: data (bytes): 要发送的二进制数据(如 b'\xAA\xBB\x03')
Returns: int: 实际发送的字节数,失败返回 -1
"""
def serial_send(self, data):
  1. シリアル受信関数
"""从串口接收数据
Args:  expected_bytes (int): 期望接收的字节数(None 表示读取全部缓存)
Returns: str: 接收到的数据(解码后的字符串),失败返回 None
"""
def serial_recv(self, expected_bytes=None):

5. manager.py

  1. 初期化関数
"""
初始化函数
初始化串口: self.serial = serial_section.SerialPort(port="/dev/ttyS1", baudrate=115200)
初始化舵机协议对象: self.servos = servo_section.ServoProtocol()
初始化机械臂: self.arm = user_arm.FourDofArm()
设定机械臂初始位置,设定机械臂三轴运动限位值,设置机械臂全局角度参数
"""
def __init__(self):
  1. ロボットアームの制限関数
"""
限制机械臂X轴运动函数
return input_value_x:返回机械臂x轴坐标值
"""
def arm_limit_x(self, input_value_x): 
"""
限制机械臂Y轴运动函数
return input_value_y:返回机械臂y轴坐标值
"""
def arm_limit_y(self, input_value_y):
"""
限制机械臂Z轴运动函数
return input_value_z:返回机械臂Z轴坐标值
"""
def arm_limit_z(self, input_value_z):
"""
同时限制机械臂X轴,Y轴,Z轴运动函数
return input_value_x, input_value_y, input_value_z:返回机械臂X,Y,Z的坐标值
"""
def three_axis_data_limit(self, input_value_x, input_value_y, input_value_z):
  1. パンチルト雲台の制限関数
"""
限制云台水平方向运动函数
return input_value_ver:返回云台水平方向转动的角度值
"""
def gimbal_limit_hor(self, input_value_hor):
"""
限制云台竖直方向运动函数
return input_value_ver:返回云台竖直方向转动额角度值
"""
def gimbal_limit_ver(self, input_value_ver):
  1. 直線の方程式
"""
通过线性方程将摄像头看到的物体坐标
转换为机械臂抓取的逆运动学坐标
return position_x, position_y. 机械臂运动的x,y坐标值
"""
def calculate_arm_pos(self, x, y):
  1. ロボットアームのグリッパーを閉じる関数
"""
机械臂手爪闭合
return: 无
"""
def catch_sth(self):
  1. ロボットアームのグリッパーを開く関数
"""
机械臂手爪打开
return: 无
"""
def release_sth(self):
  1. パンチルト雲台の動作制御関数
"""
添加云台控制
Horizontal_angle: 云台水平方向需要转动的角度值
Vertical_angle:   云台竖直方向需要转动的角度值
input_point:   云台转动时的过程点,该值越大,云台转动越慢,否则,云台转动越快
return: 无
"""
def gimbal_move(self, Horizontal_angle, Vertical_angle, input_point):
  1. ロボットアームの移動関数
"""
机械臂移动函数
该函数只需要传入机械臂逆运动学的目标位置即可.
意思就是: 该函数会自动记录机械臂上一次机械臂的目标位置, 
        传入目标位置后, 机械臂会自动从上一次位置运动到新传入的目标位置
target_x: 机械臂需要到达的X轴坐标位置
target_y: 机械臂需要到达的Y轴坐标位置
target_z: 机械臂需要到达的Z轴坐标位置
"""
def arm_move(self, target_x, target_y, target_z, input_point):
  1. ロボットアームのリセット動作
"""
机械臂初始化动作
爪子打开,机械臂从上一次的角度转动到初始化动作
"""
def arm_init_action(self):
  1. ロボットアームの円弧補間動作関数
"""
机械臂圆弧插补函数(X轴和Z轴)
start_x: 机械臂圆弧插补运动起始x位置
start_z: 机械臂圆弧插补运动起始z位置
end_x:   机械臂圆弧插补运动要到达的目标x位置
end_z:   机械臂圆弧插补运动要到达的目标z位置
radius:  机械臂圆弧插补运动运动圆弧半径
num_points: 机械臂圆弧插补运动的过程点,该值越大,机械臂运动轨迹越圆
reverse: 如果为true,则机械臂圆弧向上,如果为false,机械臂圆弧向下
返回值: 无
"""
def arm_cir_move(self, start_x, start_z, end_x, end_z, radius, num_points, reverse):

(三)プロジェクト実践

ロボットアームの円弧補間制御

ロボットアームの円弧補間制御

ロボットアームの直線補間制御

ロボットアームの直線補間制御

姿勢センサーのデータ取得

姿勢センサーのデータ取得

ジェスチャーによるパンチルト雲台の動作制御実験

ジェスチャーによるパンチルト雲台の動作制御実験

ジェスチャーによるロボットアームの動作制御実験

ジェスチャーによるロボットアームの動作制御実験

USB-PS2 コントローラーのキーデータ取得

USB-PS2 コントローラーのキーデータ取得

USB-PS2 コントローラーによるロボットアームの回転制御実験

USB-PS2 コントローラーによるロボットアームの回転制御実験