【ROS2實體機械臂驅動】rokae xCoreSDK Python測試使用

【ROS2實體機械臂驅動】rokae xCoreSDK Python測試使用

文章目錄

  • 前言
  • 正文
    • 配置環境
    • 下載源碼
    • 配置環境變量
    • 測試運行
    • 修改點說明
    • 實際運行情況
  • 參考

前言

本文用來記錄 xCoreSDK-Python的調用使用1

正文

配置環境

配置開發環境,這里使用conda做python環境管理,安裝可以參考

anaconda、miniconda、conda的關系及miniconda安裝-CSDN博客2

初始化python環境,根據sdk的說明,依賴于python3.8環境

# 創建環境
$ conda create --name xCorePy python=3.8# 激活虛擬環境
$ conda activate xCorePy# 配置鏡像源加速
$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

下載源碼

這里一定要使用git lfs下載源碼,內部有幾個so文件是使用lfs保存的。

$ mkdir -p ~/workspace/rokae_projects
$ cd ~/workspace/rokae_projects
$ git lfs clone https://github.com/RokaeRobot/xCoreSDK-Python.git
$ cd xCoreSDK-Python

配置環境變量

$ export PYTHONPATH=/home/dev/workspace/rokae_projects/xCoreSDK-Python/rokae_SDK_linux_v0.1.6_py38/lib:$PYTHONPATH

測試運行

注意: 應將庫文件所在路徑添加至運行腳本可識別的路徑中。將腳本中的ip修改為連接機器人所設置的ip。

提醒: 到這一步發現robot.connectToRobot(ec)沒有權限,需要找廠家要license,可以找買機械臂的代理,拿到后自行插入優盤導入即可。

# 運行 firstexample.py
$ cd ~/workspace/rokae_projects/xCoreSDK-Python/rokae_SDK_linux_v0.1.6_py38/example
$ python firstexample.py

修改點說明

from robot import *
from convert_tools import *
import timefrom math import pi   # 增加導入pi定義def waitRobot(robot):running = Truewhile running:time.sleep(0.1)ec = {}st = robot.operationState(ec)if st == rokae.OperationState.idle.value or st == rokae.OperationState.unknown.value:running = Falsedef main():ip = "192.168.8.160"	# 修改本地機械臂對應的IP. BingLee 2025.5.28ec = {}# 下述類根據實際機械臂情況自行修改. BingLee 2025.5.28## XMateRobot(ip) # 協作機械臂# xMateErProRobot(ip) # 協作7軸機型# StandardRobot(ip) # 連接工業6軸機型# PCB4Robot(ip) # 連接PCB4軸機型# PCB3Robot(ip) # 連接PCB3軸機型with StandardRobot(ip) as robot: # 這里修改為博主使用的工業臂. BingLee 2025.5.28# 連接機器人robot.connectToRobot(ec)# 設置機器人上下電狀態-上電robot.setPowerState(True, ec)# 查詢機器人狀態power = robot.powerState(ec)print("當前上下電狀態為:", power)time.sleep(2)# 設置機器人上下電狀態-下電robot.setPowerState(False, ec)power = robot.powerState(ec)print("當前上下電狀態為:", power)################################################ 2. 查詢信息 ########################################################## 獲取機器人的基本信息info = robot.robotInfo(ec)print("機器人軸數:", info["joint_num"], "機型:", info["type"], "控制器版本:", info["version"])# 獲取SDK版本print("SDK版本:", robot.sdkVersion(ec))# 獲取機器人的上下電狀態power = robot.powerState(ec)print("當前上下電狀態為:", power)# 獲取機器人的操作模式mode = robot.operateMode(ec)print("當前機器人的操作模式為:", mode)# 獲取機器人運行狀態state = robot.operationState(ec)print("當前機器人的運行狀態為:", state)######################################## 3. 獲取機器人當前位姿,軸角度,基坐標系等信息 ###################################### 獲取關節位置joint_pos = robot.jointPos(ec)print("當前關節位置:", joint_pos)# 獲取關節速度joint_vel = robot.jointVel(ec)print("當前關節速度:", joint_vel)# 獲取關節力矩joint_torque = robot.jointTorque(ec)print("當前關節力矩:", joint_torque)# 獲取法蘭位姿posture = robot.flangePos(ec)print("當前法蘭位姿:", posture)# 獲取基坐標系-----原model()類base = robot.baseFrame(ec)print("當前基坐標系:", base)# 獲取當前的工具坐標系toolset = robot.toolset(ec)print("當前的工具坐標系為:", toolset)# 設置新的坐標系# coor_new = {'end': {'rot': [0, 0, 0], 'trans': [0.0, 0.0, -0.01]}, 'load': {'cog': [0.0, 0.0, 0.0],#                                                                            'inertia': [0.0, 0.0, 0.0], 'mass': 0.0},#             'ref': {'rot': [0.0, -0.0, 0.0], 'trans': [0.0, 0.0, 0.0]}}# robot.setToolset(coor_new, ec)# 獲取當前的工具坐標系# toolset = robot.toolset(ec)# print("修改后的工具坐標系為:", toolset)# 獲取法蘭位姿posture_ = robot.flangePos(ec)print("修改坐標系后的法蘭位姿:", posture_)# zero = zeroToolset()# robot.setToolset(zero, ec)############################################## 4. 計算正解和逆解 ###################################################### 計算正解->輸入一個與當前機型軸數相同的List,返回一個當前位姿的listpoint = [10, 20, 30, 40, 50, 10]point = degree2rad(point)print(point)fk = robot.calcFK(point, ec)print("計算正解為:", fk)# 計算逆解->輸入一個位姿,返回一個軸角的list# pos = [0.5930779237738772, -0.060094684364914094, 0.4260427869095114, 3.110893947990362, 0.04429035357891989, -2.9729572573550245]# ik = robot.calcIK(pos, ec)# # ik = rad2degree(ik)# print("計算逆解為:", ik)############################################## 5. 查詢DO和DI ######################################################### 查詢端口1_0的DO值do = robot.getDO(1, 0, ec)print(message(ec))print("DO1_0當前的信號值為:", do)# 查詢端口1_0的DI值di = robot.getDI(0, 0, ec)print("DI1_0當前的信號值為:", di)# 將DO1_0的值設為falserobot.setDO(0, 0, False, ec)# 查詢端口1_0的DO值do = robot.getDO(0, 0, ec)print("DO0_0修改后信號值為:", do)robot.setDO(0, 0, True, ec)############################################## 6. 斷開連接再重連 ###################################################### 機器人斷開連接robot.disconnectFromRobot(ec)time.sleep(2)# 機器人再次連接robot.connectToRobot(ec)############################################## 7. 打開和關閉拖動 ####################################################### # 機器人下電,因機器人拖動模式自動上電# robot.setPowerState(False, ec)# # 將機器人操作模式設為手動# robot.setOperateMode(rokae.OperateMode.manual, ec)# # 開啟拖動# robot.enableDrag(rokae.DragParameter.Space.cartesianSpace.value, rokae.DragParameter.Type.freely.value, ec)# print("機器人狀態:", robot.operationState(ec))# time.sleep(2)# # 關閉拖動# robot.disableDrag(ec)# print("機器人狀態:", robot.operationState(ec))# print("非Drag模式下的上下電模式為:", robot.powerState(ec))# time.sleep(2)############################################## 8. 查詢工件/工具信息 #################################################### 查詢所有工具的信息# tool = robot.toolsInfo(ec)# print(tool)# for name in tool.keys():#     print(name, "質量:", tool[str(name)]["load"]["mass"])# # 查詢所有工件的信息# wobj = robot.wobjsInfo(ec)# print("查詢工件名信息為:")# for name in wobj.keys():#     print(name)############################################### 9. 運動指令 ########################################################robot.setOperateMode(rokae.OperateMode.automatic, ec)robot.setPowerState(True, ec)robot.moveReset(ec)# robot.setDefaultZone(100, ec)# robot.setDefaultSpeed(100, ec)# p0 = robot.flangePos(ec)# print(p0)# ############################################### 10. Move L 點位測試/ NB4 運動指令 ######################################################### 這里博主均改為使用 MoveAbsJCommand命令,數值使用弧度描述. BingLee 2025.5.28p1 = MoveAbsJCommand([0, -pi/4, 0, 0, pi/2, pi],1000, 0)# p1.offset = [0.1, 0, 0, 0, 0, 0]p2 = MoveAbsJCommand([pi/2, 0, pi/4, 0, 0, 0],1000, 0)# p2.offset = [0, 0, 0.01, 0, 0, 0]p3 = MoveAbsJCommand([-pi/2, -pi/4, 0, 0, pi/2, pi],1000, 0)p4 = MoveAbsJCommand([0, -pi/4, pi/4, 0, 0, 0],1000, 0)# p1.offset = [0.1, 0, 0, 0, 0, 0]p5 = MoveAbsJCommand([0, 0, 0, 0, pi/2, 0],500, 0)while True:cmd = input("please input"" 'm(start move)', 'p(pause)', 'c(continue)', 'q(break)', 'i(check)', 's(stop)','a(adjust)',""'r(reset)', d(drag), k(stop_drag) ")if cmd == 'm':print("start move")robot.executeCommand([p1, p2, p3, p4, p5], ec)robot.moveStart(ec)print(ec)elif cmd == 'p':print("suspend")robot.pause(ec)elif cmd == 'd':print("drag")robot.setOperateMode(rokae.OperateMode.manual, ec)robot.enableDrag(rokae.DragParameter.Space.jointSpace.value, rokae.DragParameter.Type.freely.value, ec)elif cmd == 'k':print("kill drag")robot.disableDrag(ec)elif cmd == 'c':print("continue move")robot.moveStart(ec)elif cmd == 'a':print("adjust speed percentage 0.5")robot.adjustSpeedOnline(0.1, ec)elif cmd == 'i':print("current pos id:", robot.getPointPos(ec))elif cmd == 'r':robot.moveReset(ec)elif cmd == 's':robot.stop(ec)else:print("stop")breakrobot.stop(ec)time.sleep(1)robot.setPowerState(False, ec)robot.disconnectFromRobot(ec)#
if __name__ == '__main__':main()

運行輸出結果:

$ python3 firstexample.py 
當前上下電狀態為: 0
當前上下電狀態為: 1
機器人軸數: 6 機型: XB10s-R1206-3B 控制器版本: 2.3.2
SDK版本: 0.1.7(Beta)
當前上下電狀態為: 1
當前機器人的操作模式為: 0
當前機器人的運行狀態為: 0
當前關節位置: [-1.1489009000176548e-05, 1.4887235907275245e-06, 1.6342124870940784e-05, 3.834951969714103e-06, 1.5708015998538547, -5.086011055912068e-05]
當前關節速度: [0.00010657046279474108, -0.0, 0.000355366933557185, 0.0, -0.0, -0.0]
當前關節力矩: [0.0, -0.0, 0.0, 0.0, -0.0, -0.0]
當前法蘭位姿: [0.6140099673622327, -6.736065028031115e-06, 0.9639800086642404, 3.1415888174476487, -2.3400841886472892e-05, -3.141553282467999]
當前基坐標系: [0.0, 0.0, 0.0, 0.0, -0.0, 0.0]
當前的工具坐標系為: {'end': {'name': '', 'rot': [0.0, -0.0, 0.0], 'trans': [0.0, 0.0, 0.0]}, 'load': {'cog': [0.0, 0.0, 0.0], 'inertia': [0.0, 0.0, 0.0], 'mass': 0.0}, 'ref': {'name': '', 'rot': [0.0, -0.0, 0.0], 'trans': [0.0, 0.0, 0.0]}}
修改坐標系后的法蘭位姿: [0.6140099530347417, -6.7360648634224415e-06, 0.9639798350653594, 3.141588817432537, -2.369797142919661e-05, -3.1415532824679984]
[0.17453292222222222, 0.34906584444444444, 0.5235987666666666, 0.6981316888888889, 0.8726646111111112, 0.17453292222222222]
計算正解為: [0.6142222356255438, 0.14980394927718851, 0.47920904205188103, 2.749132677334611, -0.3447416415079533, 2.705140663241381]
操作成功完成
DO1_0當前的信號值為: False
DI1_0當前的信號值為: None
DO0_0修改后信號值為: None
please input 'm(start move)', 'p(pause)', 'c(continue)', 'q(break)', 'i(check)', 's(stop)','a(adjust)','r(reset)', d(drag), k(stop_drag) -  m

輸入下述指令控制:

  • m:啟動運動軌跡
  • p:暫停
  • c:繼續
  • q:中斷程序
  • i:輸出當前位置信息
  • r:清理robot運動點寄存
  • s:停止

這里博主常用的是m、p、c、q、i指令。

實際運行情況

請添加圖片描述

參考

中間還涉及官方的其它庫,也一并附上345


  1. RokaeRobot/xCoreSDK-Python: Software development Python interfaces for Rokae robots all series ??

  2. anaconda、miniconda、conda的關系及miniconda安裝-CSDN博客 ??

  3. RokaeRobot/xCoreSDK-CPP: Software development C++ interfaces for Rokae robots all series, compatible with Linux and Windows. ??

  4. RokaeRobot/xCoreSDK-CSharp: Software development C# interfaces for Rokae robots all series ??

  5. RokaeRobot/xCoreSDK-Android: Software development interfaces for Rokae robots all series, supports Android platform ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907967.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

黑馬Java面試筆記之MySQL篇(優化)

一. 慢查詢 在MySQL中,如何定位慢查詢? 出現慢查詢的情況有以下幾種: 聚合查詢多表查詢表數據量過大查詢深度分頁查詢 表象:頁面加載過慢,接口壓測響應時間過長(超過1s) 1.2 如何定位慢查詢&…

歷史數據分析——廣州港

個股簡介 公司簡介: 華南地區最大的綜合性主樞紐港。 本公司是由廣州港集團、國投交通、廣州發展作為發起人,共同出資以發起方式設立的股份有限公司。 經營分析: 一般經營項目:企業管理服務(涉及許可經營項目的除外);港務船舶調度服務;船舶通信服務;企業自有資金…

圖解gpt之Transformer架構與設計原理

Transformer架構。它不僅僅是一個模型,更是一種范式,徹底改變了我們理解和處理自然語言的方式。 2017年,谷歌大腦團隊發表了一篇劃時代的論文,題目就叫《Attention is All You Need》。這標題本身就充滿了力量,宣告了…

HCIP:MPLS靜態LSP的配置及抓包

目錄 一、MPLS的簡單的一些知識點 1.MPLS的概述: 2.MPLS工作原理: 3.MPLS的核心組件: 4. MPLS標簽 5.MPLS標簽的處理 6.MPLS轉發的概述: 7.MPLS的靜態LSP建立方式 二、MPLS的靜態LSP的實驗配置 1.配置接口的地址和配置OS…

Azure DevOps 管道部署系列之一本地服務器

Azure DevOps 是一個幫助改進 SDLC(軟件開發生命周期)的平臺。 在本文中,我們將使用 Azure Pipelines 創建自動化部署。 Azure DevOps 團隊將 Azure Pipelines 定義為“使用 CI/CD 構建、測試和部署,適用于任何語言、平臺和云平臺”。 在這里,我將解釋如何在 Azure Dev…

深入剖析網絡協議:七層協議與四層協議詳解

在計算機網絡的世界中,數據的傳輸與交互離不開協議的規范。其中,七層協議和四層協議是網絡通信架構的核心概念,它們如同網絡世界的 “交通規則”,保障著數據準確、高效地在不同設備間流轉。本文將深入解讀七層協議與四層協議&…

回頭看,FPGA+RK3576方案的功耗性能優勢

作者:Hello,Panda 各位朋友,大家好,熊貓君這次開個倒車,在這個廣泛使用Xilinx(Altera)高端SoC的時代,分享一個“FPGAARM”實現的低功耗高性能傳統方案。 圖1 瑞芯微RK3576電路 當前&#xff0c…

打造極致計算器:HTML+Tailwind+DaisyUI實戰

一、計算器總體描述 創建一個在線計算器來實現基礎數學運算功能,通過單一頁面集成數字按鈕、運算符按鈕和顯示結果區域,界面采用簡潔直觀的布局設計,按鈕排列合理且提供即時運算反饋,確保計算邏輯準確和良好的按鍵響應體驗&#x…

基于mediapipe深度學習的虛擬畫板系統python源碼

目錄 1.前言 2.算法運行效果圖預覽 3.算法運行軟件版本 4.部分核心程序 5.算法仿真參數 6.算法理論概述 7.參考文獻 8.算法完整程序工程 1.前言 虛擬畫板系統基于計算機視覺與深度學習技術,通過攝像頭捕獲用戶手部動作,利用 MediaPipe框架實現手…

開源的JT1078轉GB28181服務器

JT1078轉GB28181流程 項目地址: JT1078轉GB28181的流媒體服務器: https://github.com/lkmio/lkm JT1078轉GB28181的信令服務器: https://github.com/lkmio/gb-cms 1. 創建GB28181 UA 調用接口: http://localhost:9000/api/v1/jt/device/add 請求體如下&#xf…

元器件基礎學習筆記——雙極結型晶體管 (BJT)

一、概述 1.1 基本結構 雙極結型晶體管(Bipolar Junction Transistor)由發射極(Emitter)、基極(Base)和集電極(Collector)三個摻雜程度不同的半導體區域組成,分別對應有…

Python 在金融中的應用- Part 1

早在2018年,我開始對資本市場產生興趣。理解資本市場的基本理論對財富積累至關重要。我開始閱讀所有經典著作,如《聰明的投資者》和《證券分析》。在這一系列文章中,我想與讀者分享在Python編程語言背景下理解金融理論的旅程。在文章的第一大部分,我們將專注于金融模型的線…

css使用scoped之后樣式失效問題

項目中的vue代碼原本用的style標簽來寫css&#xff0c;現在想改成<style langscss scoped>&#xff0c;但是改完之后發現樣式不對&#xff1a; 原來是&#xff1a; 將style改成scoped之后變成了&#xff1a;檢查發現是之前定義的一些變量無法被識別&#xff0c;導致這些樣…

基于 GitLab CI + Inno Setup 實現 Windows 程序自動化打包發布方案

在 Windows 桌面應用開發中&#xff0c;實現自動化構建與打包發布是一項非常實用的工程實踐。本文以我在開發PackTes項目時的為例&#xff0c;介紹如何通過 GitLab CI 配合 Inno Setup、批處理腳本、Qt 構建工具&#xff0c;實現版本化打包并發布到共享目錄的完整流程。 項目地…

能源領域新興技術論壇:EMQ 實時數據引擎構建工業智能中樞

5 月 26 日&#xff0c;由沙特阿美亞洲公司主辦的能源領域新興技術論壇在上海順利舉行。本次論壇聚焦智能工廠、無人機與機器人、可靠性與完整性、先進材料四大技術賽道&#xff0c;吸引了來自全球的能源企業、技術供應商及行業專家。 作為業內知名的 MQ AI 實時數據與智能產…

【計算機網絡】第2章:應用層—DNS

目錄 一、PPT 二、總結 DNS&#xff08;域名系統&#xff09;詳解 &#xff08;一&#xff09;DNS核心概念 &#xff08;二&#xff09;DNS查詢過程&#xff08;重點?&#xff09; &#xff08;三&#xff09;DNS資源記錄&#xff08;RR&#xff09;類型…

PHP HTTP 完全指南

PHP HTTP 完全指南 引言 PHP 作為一種流行的服務器端腳本語言,廣泛應用于各種Web開發項目中。HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的網絡協議之一,用于在Web服務器和客戶端之間傳輸數據。本文將詳細介紹 PHP 在 HTTP 通信中的應用,幫助開發者更好地理解和利用 P…

C++測開,自動化測試,業務(第一段實習)

目錄 &#x1f33c;前言 一&#xff0c;實習經歷怎么寫簡歷 &#x1f339;業務理解 &#x1f382;結構化表達 二&#xff0c;實習 &#x1f982;技術和流程卡點 &#x1f511;實習收獲 / 代碼風格 三&#xff0c;測試理論&#xff0c;用例設計&#xff0c;工具鏈 &…

NodeJS全棧開發面試題講解——P5前端能力(React/Vue + API調用)

? 5.1 如何使用 React/Vue 發起后端請求&#xff1f;用什么庫&#xff1f; 面試官您好&#xff0c;在實際項目中我們通常使用 axios、fetch 或框架提供的封裝庫發起后端請求。 &#x1f527; 常用庫對比&#xff1a; 庫框架適配優點axios通用默認支持攔截器、取消請求、請求體…

【C/C++】cmake實現Release版本禁用調試接口技巧

在 C 中通過 CMake 實現部分接口在 Release 版本不生效&#xff0c;可以通過條件編譯結合 CMake 的構建類型判斷來實現。以下是詳細步驟&#xff1a; 1. 在 CMakeLists.txt 中定義配置相關宏 # 設置構建類型&#xff08;可選&#xff0c;但推薦顯式設置&#xff09; if(NOT C…