日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python控制Socket通信知識補充

大象機器人科技 ? 來源:大象機器人科技 ? 作者:大象機器人科技 ? 2022-06-24 15:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python控制
Socket通信知識補充
Socket又稱"套接字",應用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應答網(wǎng)絡(luò)請求,使主機間或者一臺計算機上的進程間可以通訊。

建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務(wù)器端,稱為ServerSocket 。

每臺電腦對應唯一ip地址,電腦上每一個進程對應一個端口(一個進程可以綁定多個端口號,但一個端口只能綁定一個進程)。此外,0~1023為知名端口號,一般不要去設(shè)置這些,1024~65535則可以自己去設(shè)置。比如9999。

先運行服務(wù)端,再運行客戶端

配置流程
廠家已經(jīng)把代碼封裝好了,機器人只要啟動,服務(wù)端默認就打開了的(也就是roboflow打開就行,不需要上電操作),啟動roboflow之后,服務(wù)器端就開始運行。

可以打開roboflow,查看配置的ip以及端口是什么,剩下的操作都很簡單,調(diào)用接口就行

實戰(zhàn)經(jīng)驗
set_coords()在使用笛卡爾坐標系的時候,在某些角度下有可能無法運動,因為機器人可能解算不出來。我可以先用角度移動到笛卡爾坐標系能解算的范圍,再去使用
可能會遇到編碼問題,因為elephant是python2.7寫的。我需要用encode與decode去編碼解碼,如下:
def get_angles(self):
'''獲取當前六個關(guān)節(jié)角度(°)'''
message = "get_angles()".encode()
self.sock.sendall(message)
angles_str = self.sock.recv(1024)
# while not angles_str.startswith('get_angles'):
# self.sock.sendall(message)
# angles_str = self.sock.recv(1024)
# str to list[float]
angles = [float(p) for p in angles_str[12:-1].decode().split(',')]
return angles
代碼
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 大象機器人Socket控制工具包

import socket
import time

class elephant_command():
def __init__(self):
'''初始化,連接機械臂'''
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_address = ('192.168.2.8', 5001) # 機械臂服務(wù)器的IP地址和端口
print("start connect")
self.sock.connect(self.server_address)
print("connect success")

def get_angles(self):
'''獲取當前六個關(guān)節(jié)角度(°)'''
message = "get_angles()"
self.sock.sendall(message)
angles_str = self.sock.recv(1024)
while not angles_str.startswith('get_angles'):
self.sock.sendall(message)
angles_str = self.sock.recv(1024)
# str to list[float]
angles = [float(p) for p in angles_str[12:-1].split(',')]
return angles

def set_angles(self, angles_array, speed):
'''設(shè)定六個關(guān)節(jié)的角度(°)和速度'''
ang_msg = "set_angles({},{})".format(','.join(['{:.3f}'.format(x) for x in angles_array]), speed)
self.sock.sendall(ang_msg)
back_msg = self.sock.recv(1024)
print(back_msg)

def set_angle(self, joint, angle, speed):
'''設(shè)定單個關(guān)節(jié)(joint,1~6)的角度(°)和速度(°/min)'''
ang_msg = "set_angle(J{},{},{})".format(joint, angle, speed)
self.sock.sendall(ang_msg)
back_msg = self.sock.recv(1024)
print(back_msg)

def get_coords(self):
'''獲取當前末端位姿(mm)'''
message = "get_coords()".encode()
self.sock.sendall(message)
coords_str = self.sock.recv(1024)
while not coords_str.startswith(b'get_coords'):
self.sock.sendall(message)
coords_str = self.sock.recv(1024)
# str to list[float]
coords = [float(p) for p in coords_str[12:-1].split(b',')]
return coords

def set_coords(self, coords_array, speed):
'''設(shè)定機械臂目標位姿(mm)和運動速度(mm/min)'''
coords_msg = "set_coords({},{})".format(','.join(['{:.3f}'.format(x) for x in coords_array]), speed)
# print(coords_msg)
self.sock.sendall(coords_msg.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

def set_coord(self, axis, coord, speed):
'''設(shè)定x,y,z,rx,ry,rz某一方向的坐標(mm)和速度(mm/min)'''
coord_msg = "set_coord({},{:.3f},{})".format(axis, coord, speed)
self.sock.sendall(coord_msg)
back_msg = self.sock.recv(1024)
print(back_msg)

def jog_coord(self, axis, dirc, speed):
'''讓機械臂沿一軸(axis, x,y,z)方向(dirc, -1負方向,0停止,1正方向)以勻速(mm/min)運動'''
coord_msg = "jog_coord({},{},{})".format(axis, dirc, speed)
self.sock.sendall(coord_msg.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

def jog_stop(self, axis):
'''讓機械臂沿一軸(axis, x,y,z,rx,ry,rz,j1~j6)運動停止'''
coord_msg = "jog_stop({})".format(axis)
self.sock.sendall(coord_msg.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

def jog_angle(self, joint, dirc, speed):
'''讓機械臂某一關(guān)節(jié)(joint, 1~6)勻速( / )轉(zhuǎn)動(dirc, -1負方向,0停止,1正方向)'''
coord_msg = "jog_angle(J{},{},{})".format(joint, dirc, speed)
self.sock.sendall(coord_msg.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

def task_stop(self):
'''停止當前任務(wù)'''
message = "task_stop()"
self.sock.sendall(message.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

def wait(self, seconds):
'''設(shè)定機械臂等待時間(s)'''
message = "wait({})".format(seconds)
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def power_on(self):
'''給機械臂上電?'''
message = "power_on()"
self.sock.sendall(message)
time.sleep(20)
back_msg = self.sock.recv(1024)
print(back_msg)

def power_off(self):
'''給機械臂斷電?'''
message = "power_off()"
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def get_speed(self):
'''獲取機械臂(末端)速度(mm/s)'''
message = "get_speed()"
self.sock.sendall(message)
speed = self.sock.recv(1024)
return speed

def state_check(self):
'''檢查機械臂狀態(tài)(1正常,0不正常)'''
message = b"state_check()"
self.sock.sendall(message)
state = self.sock.recv(1024)
return state

def check_running(self):
'''檢查機械臂是否運行(1正在運行,0不在運行)'''
message = b"check_running()"
self.sock.sendall(message)
running_state = self.sock.recv(1024)
if running_state == 'check_running:1':
return True
else:
return False

def set_torque_limit(self, axis, torque):
'''設(shè)置機械臂在x,y,z某一方向上的力矩限制(N)'''
torque_limit = "set_torque_limit({},{})".format(axis, torque)
self.sock.sendall(torque_limit)
back_msg = self.sock.recv(1024)
print(back_msg)

def set_payload(self, payload):
'''設(shè)置機械臂負載(kg)'''
message = "set_payload({})".format(payload)
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def set_acceleration(self, acc):
'''設(shè)置機械臂(末端)加速度(整數(shù),mm/s^2)'''
message = "set_acceleration({})".format(acc)
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def get_acceleration(self):
'''獲取機械臂(末端)加速度(mm/s^2)'''
message = "get_acceleration()"
self.sock.sendall(message)
acc = self.sock.recv(1024)
return acc

def wait_command_done(self):
'''等待命令執(zhí)行完畢'''
message = "wait_command_done()"
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def pause_program(self):
'''暫停進程'''
message = "pause_program()"
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def resume_program(self):
'''重啟已暫停的進程'''
message = "resume_program()"
self.sock.sendall(message)
back_msg = self.sock.recv(1024)
print(back_msg)

def state_on(self):
'''機器人使能(使可控)'''
message = "state_on()"
self.sock.sendall(message)
time.sleep(5)
back_msg = self.sock.recv(1024)
print(back_msg)

def state_off(self):
'''機器人去使能(使不可控)'''
message = "state_off()"
self.sock.sendall(message)
time.sleep(5)
back_msg = self.sock.recv(1024)
print(back_msg)

def set_digital_out(self, pin_number, signal):
""" 設(shè)定數(shù)字輸出端口電平,pin_number:0~15, signal:0低1高"""
digital_signal = 'set_digital_out({},{})'.format(pin_number, signal)
self.sock.sendall(digital_signal.encode())
back_msg = self.sock.recv(1024)
print(back_msg)

簡單測試

from elephant import elephant_command
import time
import random

erobot = elephant_command()
# 笛卡爾空間
cur_pose = erobot.get_coords()
print(cur_pose)
ROS控制
盡量多看官方的github代碼,里面有最詳細的資源github

要用rviz控制機械,肯定就需要安裝大象機器人的庫

大象機器人ros庫的安裝
先安裝依賴,命令行執(zhí)行下面語句:(此外ROS以及moveit都已經(jīng)安裝)

pip install pymycobot --upgrade
git 庫并且編譯(刪除src中的mycobot320這個庫,這個文件用不到,并且有問題)

cd ~/catkin_ws/src
git clone https://github.com/elephantrobotics/mycobot_ros.git
cd ..
catkin build
source /devel/setup.bash
最后一部環(huán)境變量也可以設(shè)置為永久環(huán)境變量的更改,參考之前的博客

實現(xiàn)與真實機械臂的通信需要修改端口波特率等,在py文件中。pro600默認使用python3(每一代機器人的版本不同,我需要看py文件去確定)

pro600的ros控制
啟動launch,打開rviz。官方已經(jīng)給了配置以及模型文件了。拖動劃塊可以移動。

roslaunch mycobot_600 mycobot_600_slider.launch

poYBAGK1ZquAFYgLAAGacHD5hvY273.png


如果要實現(xiàn)實時控制機械臂,那么還需要啟動python文件,新開一個終端,用rosrun啟動(可能會手動把文件的權(quán)限設(shè)置為可執(zhí)行文件)

rosrun mycobot_600 slider_600.py
特別注意:不要拖動過快以及造成碰撞??!不要拖動過快以及造成碰撞?。〔灰蟿舆^快以及造成碰撞?。?br />
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制
    +關(guān)注

    關(guān)注

    5

    文章

    1035

    瀏覽量

    125892
  • Socket
    +關(guān)注

    關(guān)注

    1

    文章

    214

    瀏覽量

    37038
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4889

    瀏覽量

    90330
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RK3576 單板機 C/Python/MQTT 應用開發(fā)手冊(二)

    本文為創(chuàng)龍科技RK3576 單板機應用開發(fā)指南,包含開發(fā)環(huán)境配置、GDB 調(diào)試、外設(shè)控制(LED/CAN/ 串口)、Python 開發(fā)及 MQTT 通信案例。提供完整編譯命令、代碼解析與實測
    的頭像 發(fā)表于 04-21 10:43 ?108次閱讀
    RK3576 單板機 C/<b class='flag-5'>Python</b>/MQTT 應用開發(fā)手冊(二)

    RK3576 單板機 C/Python/MQTT 應用開發(fā)手冊(一)

    本文為創(chuàng)龍科技RK3576 單板機應用開發(fā)指南,包含開發(fā)環(huán)境配置、GDB 調(diào)試、外設(shè)控制(LED/CAN/ 串口)、Python 開發(fā)及 MQTT 通信案例。提供完整編譯命令、代碼解析與實測
    的頭像 發(fā)表于 04-20 13:55 ?374次閱讀
    RK3576 單板機 C/<b class='flag-5'>Python</b>/MQTT 應用開發(fā)手冊(一)

    使用PYTHON進行的跨平臺仿真

    如何使用編程語言Python來調(diào)用和控制VirtualLab Fusion中的模擬。請查看下面鏈接的文檔,以找到關(guān)于如何設(shè)置和使用Python和VirtualLab Fusion之間的接口的詳細指南,以及一個
    發(fā)表于 04-02 08:21

    強強聯(lián)合:imc FAMOS內(nèi)嵌Python接口,提高分析效率!

    德國知名車廠工程師首選將Python和imcFAMOS結(jié)合起來用于分析測試和測量數(shù)據(jù)——這是否有意義?事實上這非常有意義。Python和imcFAMOS可以很好地相互補充Python
    的頭像 發(fā)表于 03-18 09:05 ?505次閱讀
    強強聯(lián)合:imc FAMOS內(nèi)嵌<b class='flag-5'>Python</b>接口,提高分析效率!

    TCP/IP(Socket)協(xié)議深度剖析

    TCP/IP協(xié)議作為互聯(lián)網(wǎng)通信的基礎(chǔ)架構(gòu),其核心機制Socket編程承載著全球數(shù)據(jù)交換的使命。本文將深入剖析這一協(xié)議的七層架構(gòu)、三次握手與四次揮手的精妙設(shè)計、流量控制與擁塞控制的動態(tài)平
    的頭像 發(fā)表于 03-03 17:06 ?821次閱讀

    輕松掌握——LuatOS socket基礎(chǔ)知識和應用開發(fā)

    對于剛接觸LuatOS開發(fā)的工程師而言,實現(xiàn)設(shè)備聯(lián)網(wǎng)往往是第一個重要目標,而Socket編程正是實現(xiàn)這一目標的核心技術(shù)路徑。本文以循序漸進的方式,帶領(lǐng)讀者從最基礎(chǔ)的Socket概念入手,逐步掌握在
    的頭像 發(fā)表于 01-28 20:07 ?401次閱讀
    輕松掌握——LuatOS  <b class='flag-5'>socket</b>基礎(chǔ)<b class='flag-5'>知識</b>和應用開發(fā)

    socket是什么

    Socket(套接字)是計算機網(wǎng)絡(luò)中的一個概念,它指示了一個可以進行網(wǎng)絡(luò)通信的軟件端點。通過使用Socket,計算機程序可以通過網(wǎng)絡(luò)進行通信Soc
    發(fā)表于 12-03 08:27

    rtthread v5.0.1 , at socket使用select函數(shù)不能監(jiān)控多個socket fd的問題,怎么解決?

    我最近使用at socket ,at device 組件創(chuàng)建tcpclient,使用select函數(shù)實現(xiàn),發(fā)現(xiàn)select只能監(jiān)控一個socket fd,監(jiān)控兩個socket fd就不能正常接收
    發(fā)表于 10-13 06:05

    ESP8266 socket通信,串口溢出怎么解決?

    1、硬件平臺:原子精英板 stm32f103zet6+esp8266 開發(fā)板作為client,網(wǎng)絡(luò)調(diào)試助手模擬server 學習研究AT SOCKET有一段時間了,之前逛論壇提問解決了一些問題。遇到
    發(fā)表于 09-28 13:42

    alloc_socket在不斷創(chuàng)建socket時會不斷新建信號量和互斥鎖,導致內(nèi)存泄漏,怎么解決?

    alloc_socket在不斷創(chuàng)建socket時會不斷新建信號量和互斥鎖,導致內(nèi)存泄漏。 修改前: static struct wiz_socket *alloc_socket(vo
    發(fā)表于 09-10 08:22

    請問at_device不用at socket能使用bsd socket嗎?

    at_device不用at socket能使用bsd socket嗎?
    發(fā)表于 09-10 08:04

    GraniStudio : TCP/IP(Socket)協(xié)議深度剖析

    在工業(yè)自動化與物聯(lián)網(wǎng)領(lǐng)域,TCP/IP(Socket)協(xié)議作為應用最廣泛的網(wǎng)絡(luò)通信標準,是實現(xiàn)設(shè)備間數(shù)據(jù)交互的核心技術(shù)。GraniStudio 軟件作為工業(yè)級零代碼開發(fā)平臺,其內(nèi)置的 TCP/IP
    的頭像 發(fā)表于 08-03 22:20 ?1379次閱讀
    GraniStudio : TCP/IP(<b class='flag-5'>Socket</b>)協(xié)議深度剖析

    跟老齊學Python:從入門到精通

    本帖最后由 yuu_cool 于 2025-6-3 16:52 編輯 本資料是面向編程零基礎(chǔ)讀者的Python 入門教程,內(nèi)容涵蓋了Python 的基礎(chǔ)知識和初步應用。以比較輕快的風格,向零基
    發(fā)表于 06-03 16:10

    CPU Socket的基本結(jié)構(gòu)和工作原理

    CPU Socket是連接中央處理單元(CPU)與計算機主板之間的關(guān)鍵部件,它充當著傳遞電信號、電源和散熱等多重功能的樞紐。在整個計算機系統(tǒng)中,CPU Socket的作用至關(guān)重要,尤其在高性能計算
    的頭像 發(fā)表于 05-08 17:14 ?2851次閱讀

    在KaihongOS應用開發(fā)中,如何利用Socket進行數(shù)據(jù)傳輸

    參考:@ohos.net.socket (Socket連接)。 應用 TCP/UDP 協(xié)議進行通信 UDP 與 TCP 流程大體類似,下面以 TCP 為例: import 需要的 sock
    發(fā)表于 05-08 07:25
    松桃| 墨竹工卡县| 河北省| 福泉市| 成都市| 台前县| 镇平县| 宁陵县| 石台县| 樟树市| 黑龙江省| 佛山市| 铜鼓县| 通辽市| 堆龙德庆县| 石台县| 禄劝| 宜兰市| 大理市| 轮台县| 唐海县| 图片| 靖远县| 锡林浩特市| 年辖:市辖区| 高阳县| 潮州市| 马公市| 绥中县| 扶风县| 高淳县| 苗栗县| 平谷区| 满洲里市| 清涧县| 龙里县| 富源县| 普兰县| 远安县| 平定县| 武定县|