国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

智能小車(八)ros實現(xiàn)將智能小車數(shù)據(jù)通過TCP/IP發(fā)送到上位機網(wǎng)關

這篇具有很好參考價值的文章主要介紹了智能小車(八)ros實現(xiàn)將智能小車數(shù)據(jù)通過TCP/IP發(fā)送到上位機網(wǎng)關。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ros實現(xiàn)將智能小車數(shù)據(jù)通過TCP/IP發(fā)送到上位機網(wǎng)關
這里主要注意:
將浮點型數(shù)據(jù)*1000轉(zhuǎn)換成int型數(shù)據(jù)然后分字節(jié)儲存(另取一個字節(jié)作為符號位)。沒有用struct.pack進行字節(jié)流打包,原因是不同平臺,字節(jié)流的打包浮點型數(shù)據(jù)不一樣,又要加上包頭等校驗信息,所以這里分別用單字節(jié)保存在列表中,然后sock.sendall(struct.pack(“B”*len(list_send),list_send))
學到的點
1、
在 Python 中,
是一個解包運算符(unpacking operator)。它可以應用于可迭代對象,如列表、元組等,并將可迭代對象中的元素解包為單獨的參數(shù)。

在給定的代碼中,*list_send 使用解包運算符 * 將列表 list_send 中的元素作為單獨的參數(shù)傳遞給 struct.pack 函數(shù)。這意味著 struct.pack 函數(shù)將接收列表中的每個元素作為單獨的參數(shù)。如果列表 list_send 包含三個元素 [1, 2, 3],那么 *list_send 將被解包為 1, 2, 3。

這種解包操作是為了確保 struct.pack 函數(shù)能夠接收正確數(shù)量的參數(shù),并將它們打包為字節(jié)流發(fā)送到 socket 連接。
B是無符號8位
len(list_send)是鏈表長度(列表中元素個數(shù))
2、
這里sock.connect((TCP_IP, TCP_PORT))會報錯異常終止程序運行我們用try except就非常好

while not connect:
    try:
        sock.connect((TCP_IP, TCP_PORT))
        print("TCP/IP連接成功")
    except:
        time_connect+=1
        print("TCP/IP連接失敗次數(shù):%d" % time_connect)
        time.sleep(10)

3、def send_data(car_subscriber): 寫子函數(shù)時這個形參隨便寫調(diào)用傳入的是什么就是什么類型
4、轉(zhuǎn)16位高低8位分別存儲

    int16_num=int(abs(raw_data.twist.linear.y)*1000)&0xFFFF
    list_raw[4]=int16_num&0xFF 
    list_raw[5]=(int16_num>>8)&0xFF 

5、創(chuàng)建套接字 固定IP和端口否則端口會自動分配文章來源地址http://www.zghlxwxcb.cn/news/detail-816222.html

local_ip='192.168.0.11'
local_port=8090
TCP_IP = '192.168.1.81'
TCP_PORT = 8090

# 創(chuàng)建TCP/IP客戶端套接字 AF_INET是指 IPv4 地址族 參數(shù)是套接字(socket)類型,用于指定 socket 的傳輸協(xié)議是基于流(stream)的,也就是 TCP/IP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((local_ip,local_port))
# 獲取實際分配的IP地址和端口號
actual_ip, actual_port = sock.getsockname()
# 打印實際分配的IP地址和端口號
print("Successfully bound to {}:{}".format(actual_ip, actual_port))
#!/usr/bin/env python
# encoding: utf-8
import binascii
from sqlite3 import connect
from threading import local
import time
import rospy
from std_msgs.msg import Float32
from sensor_msgs.msg import Imu, BatteryState
import struct
import socket
from geometry_msgs.msg import Twist
from time import sleep
#當前車頭方向
x_yaw=0
# 設置TCP/IP服務器地址和端口號
local_ip='192.168.0.11'
local_port=8090
TCP_IP = '192.168.1.81'
TCP_PORT = 8090
""" TCP_IP = '192.168.0.2'
TCP_PORT = 8888  """
# 創(chuàng)建TCP/IP客戶端套接字 AF_INET是指 IPv4 地址族 參數(shù)是套接字(socket)類型,用于指定 socket 的傳輸協(xié)議是基于流(stream)的,也就是 TCP/IP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((local_ip,local_port))
# 獲取實際分配的IP地址和端口號
actual_ip, actual_port = sock.getsockname()
# 打印實際分配的IP地址和端口號
print("Successfully bound to {}:{}".format(actual_ip, actual_port))
connect = False
time_connect=0
while not connect:
    try:
        sock.connect((TCP_IP, TCP_PORT))
        print("TCP/IP連接成功")
        connect=True
    except:
        time_connect+=1
        print("TCP/IP連接失敗次數(shù):%d" % time_connect)
        time.sleep(10)

# 訂閱小車速度、IMU角速度、電壓和電量
class RosTcpIPPublisher:
    def __init__(self):
        
        self.twist =Twist()
        self.twist.linear.x=0.0
        self.twist.linear.y=0.0
        self.twist.linear.z=0.0
        self.twist.angular.x = 0.0
        self.twist.angular.y = 0.0
        self.twist.angular.z =0.0
        self.battery = 0.0
        rospy.Subscriber('/vel_raw', Twist, self.vel_callback)
       
        rospy.Subscriber('voltage', Float32, self.battery_callback)

    def vel_callback(self, msg):
        self.twist.linear.x = msg.linear.x
        self.twist.linear.y = msg.linear.y
        self.twist.linear.z = msg.linear.z
        self.twist.angular.x = msg.angular.x
        self.twist.angular.y = msg.angular.y
        self.twist.angular.z = msg.angular.z


    def battery_callback(self, msg):
        self.battery = msg.data

# 打包數(shù)據(jù)并發(fā)送到TCP/IP服務器
def send_data(car_subscriber):
    

    while not rospy.is_shutdown():
        list_data=trans_data(car_subscriber)
        list_send=clc_data(list_data)
        # 發(fā)送數(shù)據(jù)到TCP/IP服務器
        sock.sendall(struct.pack("B"*len(list_send),*list_send))
        sleep(1)
def trans_data(raw_data):
    list_raw=[0]*19
    if raw_data.twist.linear.x>0:
        list_raw[0]=1
    else:
        list_raw[0]=0
    if raw_data.twist.linear.y>0:
        list_raw[3]=1
    else:
        list_raw[3]=0
    if raw_data.twist.linear.z>0:
        list_raw[6]=1
    else:
        list_raw[6]=0
    if raw_data.twist.angular.x>0:
        list_raw[9]=1
    else:
        list_raw[9]=0
    if raw_data.twist.angular.y>0:
        list_raw[12]=1
    else:
        list_raw[12]=0
    if raw_data.twist.angular.z>0:
        list_raw[15]=1
    else:
        list_raw[15]=0
    
    int16_num=int(abs(raw_data.twist.linear.x)*1000)&0xFFFF
    list_raw[1]=int16_num&0xFF 
    list_raw[2]=(int16_num>>8)&0xFF 
    int16_num=int(abs(raw_data.twist.linear.y)*1000)&0xFFFF
    list_raw[4]=int16_num&0xFF 
    list_raw[5]=(int16_num>>8)&0xFF 
    int16_num=int(abs(raw_data.twist.linear.z)*1000)&0xFFFF
    list_raw[7]=int16_num&0xFF 
    list_raw[8]=(int16_num>>8)&0xFF 
    int16_num=int(abs(raw_data.twist.angular.x)*1000)&0xFFFF
    list_raw[10]=int16_num&0xFF 
    list_raw[11]=(int16_num>>8)&0xFF 
    int16_num=int(abs(raw_data.twist.angular.y)*1000)&0xFFFF
    list_raw[13]=int16_num&0xFF 
    list_raw[14]=(int16_num>>8)&0xFF 
    int16_num=int(abs(raw_data.twist.angular.z)*1000)&0xFFFF
    list_raw[16]=int16_num&0xFF 
    list_raw[17]=(int16_num>>8)&0xFF 
    list_raw[18]=int(raw_data.battery*10)&0xFF
    return list_raw
def clc_data(list_data):
    count=0     
    #i=0
    total_sum=0
    current=list_data
    list_send=[0]*0x26
    list_send[0]=0xCC
    list_send[1]=0xEE
    #總長
    list_send[2]=0x26
    list_send[3]=0x00
    #8Byte
    for i in range(8):
        list_send[i+4]=0x00
    #節(jié)點類型
    list_send[12]=0x88
    list_send[13]=0x13
    #指令
    list_send[14]=0x01
    #功能字
    #車輛編號
    list_send[15]=0x01
    count=len(list_data) 
    for i in range(count):
     list_send[i+16]=list_data[i]
    #數(shù)據(jù)長度
    len_L=20
    len_H=00
    list_send[35]=len_L
    list_send[36]=len_H
    for i in range(37):
        total_sum+=list_send[i]

    total_sum=total_sum%256
    list_send[37]=total_sum
    return list_send
if __name__ == '__main__':
    rospy.init_node('ros_tcpip_publish',anonymous=False)
    try:
        car_subscriber = RosTcpIPPublisher()
        sleep(2)
        send_data(car_subscriber)
        rospy.spin()
        sock.close()
    except Exception as e:
        rospy.loginfo("ROS_TCP/IP_ERROR!!!")
        print("發(fā)生異常",str(e))

到了這里,關于智能小車(八)ros實現(xiàn)將智能小車數(shù)據(jù)通過TCP/IP發(fā)送到上位機網(wǎng)關的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于ROS和YOLO的SLAM智能小車仿真系統(tǒng)設計

    基于ROS和YOLO的SLAM智能小車仿真系統(tǒng)設計

    Ubuntu 20.4 ros-noetic gazebo yolov4 nvidia525+cuda10.1+cudnn_7.6.5 將darknet文件夾移動到darknet_ros文件夾下 鏈接: https://download.csdn.net/download/qq_42281475/87502982. 將下載的yolo_network_config替換roscar_gazebo_yolov4/src/darknet_ros/darknet_ros/目錄下的文件 鏈接: https://download.csdn.net/download/qq_42281475/87502991

    2024年02月10日
    瀏覽(17)
  • QT上位機開發(fā)(利用tcp/ip訪問plc)

    QT上位機開發(fā)(利用tcp/ip訪問plc)

    【 聲明:版權(quán)所有,歡迎轉(zhuǎn)載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】 ? ? ? ? plc是工控領域很重要的一個器件。簡單的plc一般就是對io進行控制,但是復雜的plc,還可以控制電機、變頻器,在工業(yè)生產(chǎn)中非常重要。一般plc的價格,也是根據(jù)有多少的io口來確定的

    2024年01月17日
    瀏覽(13)
  • 上位機軟件wincc通過工業(yè)網(wǎng)關采集plc數(shù)據(jù)實現(xiàn)組態(tài)監(jiān)控

    上位機軟件wincc通過工業(yè)網(wǎng)關采集plc數(shù)據(jù)實現(xiàn)組態(tài)監(jiān)控

    WinCC是一個組態(tài)軟件,可以用于數(shù)據(jù)采集與監(jiān)控、自動化控制、工業(yè)物聯(lián)網(wǎng)等領域。WinCC可以幫助用戶實現(xiàn)工廠自動化和過程自動化的解決方案,提供可視化的監(jiān)控界面和數(shù)據(jù)采集分析功能,支持多種協(xié)議和設備,如Siemens、Modbus、OPC等。 如何使用WinCC采集PLC數(shù)據(jù)?工業(yè)網(wǎng)關可

    2024年02月15日
    瀏覽(33)
  • Internet通過TCP/IP協(xié)議可以實現(xiàn)多個網(wǎng)絡的無縫連接

    Internet通過TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)協(xié)議實現(xiàn)多個網(wǎng)絡的無縫連接 。 TCP/IP是Internet的基礎通信協(xié)議套件,它定義了數(shù)據(jù)如何在不同網(wǎng)絡之間傳輸和路由,使得全球范圍內(nèi)的不同計算機和網(wǎng)絡可以互相通信。TCP/IP協(xié)議套件包括多個

    2024年02月07日
    瀏覽(25)
  • 基于QT做上位機開發(fā),實現(xiàn)FPGA通過cyusb3014芯片完成數(shù)據(jù)的收發(fā)

    基于QT做上位機開發(fā),實現(xiàn)FPGA通過cyusb3014芯片完成數(shù)據(jù)的收發(fā)

    #任務要求: 要求用qt編寫上位機程序,實現(xiàn)FPGA通過cyusb3014芯片完成數(shù)據(jù)的收發(fā)。下面是采用通過cypress并安裝usb官方驅(qū)動的環(huán)境搭建,后續(xù)繼續(xù)更新程序的編寫。 一、安裝nodejs ①下載地址:https://nodejs.org/en/ ①.1: 安裝時,除了選擇安裝路徑根據(jù)需要選擇外,其他都可以默認

    2024年02月06日
    瀏覽(25)
  • 實現(xiàn)S7-200smart通過MODBUS TCP/IP與matlab通訊

    實現(xiàn)S7-200smart通過MODBUS TCP/IP與matlab通訊

    目錄 S7-200smart通過MODBUS TCP/IP與matlab通訊 兩臺PLC之間建立Modbus TPC/IP通訊 MODBUS TCP Client梯形圖各個參數(shù)的功能: MODBUS TCP Server梯形圖各個參數(shù)的功能: 兩臺S7-200smart之間通過Modbus TCP連接: MATLAB端建立Modbus TCP客戶端: 通過函數(shù)建立Modbus TCP客戶端 通過Matlab-Industment Control工具箱進

    2024年02月03日
    瀏覽(114)
  • 【QT實現(xiàn)TCP數(shù)據(jù)發(fā)送和接收】

    單客戶端服務器實現(xiàn)代碼: 在.pro文件添加 在頭文件中添加 在源文件中添加

    2024年02月11日
    瀏覽(21)
  • 【雕爺學編程】Arduino智能家居之通過Ethernet Shield與IFTTT Webhooks進行通信發(fā)送數(shù)據(jù)

    【雕爺學編程】Arduino智能家居之通過Ethernet Shield與IFTTT Webhooks進行通信發(fā)送數(shù)據(jù)

    Arduino是一個開放源碼的電子原型平臺,它可以讓你用簡單的硬件和軟件來創(chuàng)建各種互動的項目。Arduino的核心是一個微控制器板,它可以通過一系列的引腳來連接各種傳感器、執(zhí)行器、顯示器等外部設備。Arduino的編程是基于C/C++語言的,你可以使用Arduino IDE(集成開發(fā)環(huán)境)來

    2024年02月03日
    瀏覽(23)
  • ROS小車研究筆記3/11/2023:多點導航及其源碼實現(xiàn)

    ROS小車研究筆記3/11/2023:多點導航及其源碼實現(xiàn)

    多點導航操作 打開導航launch文件 roslaunch turn_on_wheeltec_robot navigation.launch rviz 在rviz里,選擇publish point在地圖上點擊標記目標點。在標記多個目標點后小車會按標記順序依次在各個目標點中往返 多點導航對于話題MarkerArray。需要在rviz中使markerArray訂閱小車發(fā)布的path_point話題 多

    2024年02月03日
    瀏覽(71)
  • ubutu下ros2實現(xiàn)小車仿真建模與目標檢測

    ubutu下ros2實現(xiàn)小車仿真建模與目標檢測

    1.安裝ros2 這里使用小魚的一鍵安裝,根據(jù)自己的喜好安裝,博主用的是ros2的foxy版本 2.下載代碼(這里使用的是古月居的代碼) https://book.guyuehome.com/ 可以結(jié)合古月居的B站視頻來自己一步一步操作,里面有講解基礎理論與一些環(huán)境的配置 https://www.bilibili.com/video/BV16B4y1Q7jQ?p=1

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包