连通
服务端
切记,进行通信的时候不要使用clash,不要打开系统代理
出现的问题:
当按下按键时,ui界面立马闪退
输入端口号无法进行连接
出现的问题https://www.bilibili.com/video/BV1LB4y1F7P7?t=87.8&p=13
QT的ui界面按钮点不了、不更新、无响应的可能原因_qt设计点不了_你洪哥的博客-CSDN博客
QT小记:QT程序异常结束的可能原因_吻等离子的博客-CSDN博客
原因:指针未初始化,导致内存泄漏,这个问题很常见,需要重视
解决办法:提前初始化
ip地址问题使用127.0.0.1可以但是选择本机ip地址不行
计算机原理—127.0.0.1是什么_lipviolet的博客-CSDN博客
客户端
初步思路
目前已经了初步的思路,打算在一周内实现思路,完成ui界面的设计

最开始我有一个疑惑,是选择多客户端还是多线程,考虑到可能不止两个小车需要将识别到的视频进行回传(其实就我们识别的量,我觉得多线程和多客户端没区别),
所以选择多客户端,服务器多线程
客户端1
这个客户端需要实现订阅小车摄像头发布的视频,并且订阅到马飞扬进行视觉处理完的视频,然后客户端进行视频的转码以及传输
分别订阅到小车的视频,将ros格式使用cv——bridge转换成opencv的格式,然后将格式转换成能够通过tcp/ip通信的格式,传送给windows的上位机,
客户端2
考虑使用多线程
使用此客户端接受map地图,格式转换
(后期可能会加上小车的位置坐标,以及转向),
服务端

考虑使用多线程
我们应该实现在windows上的服务器能够展示两个小车的识别到的经过视觉定位处理过的视频
同时应该将地图实时展现出来
主线程:
- 主线程是服务器程序的主要线程,负责监听客户端连接请求并分配连接给其他线程处理。
接受线程1
接受地图和视频
模仿去年的思路,指定自己的通信协议,利用数据头进行分别
将地图进行格式转换,将视频格式转换,并将其导入主线程中进行展示
首先在ubuntu上配置python环境,编写客户端
基于tcp/ip协议,
订阅之后
python网络编程
Python编程——sys模块的使用详解(附实例)_python中调用sys模块时显示sys未定义_橘子女侠的博客-CSDN博客
Python编程——sys模块的使用详解(附实例)_使用sys.stdin已经导入sys为啥还显示sys.stdin是无效的语法_橘子女侠的博客-CSDN博客
os库
当你在 Python 中编写代码时,你可以使用 os 模块来访问操作系统的功能,例如管理文件和目录,执行命令和处理文件路径等。这个模块提供了许多操作系统相关的功能,包括文件系统操作,进程管理等等。
下面是 os 模块的一些常用函数:
- os.name:返回当前操作系统的名称,例如 Windows、Linux 或者 Mac OS。
- os.getcwd():返回当前工作目录的路径。
- os.chdir(path):改变当前工作目录为 path。
- os.listdir(path):返回一个列表,其中包含给定路径下的所有文件和目录的名称。
- os.mkdir(path):创建一个新目录。
- os.makedirs(path):递归地创建目录,包括必要的父目录。
- os.rmdir(path):删除一个目录,只能删除空目录。
- os.removedirs(path):递归地删除目录,包括所有子目录和文件。
- os.rename(src, dst):重命名文件或目录。
- os.remove(path):删除指定路径的文件。
- os.path.exists(path):如果给定路径存在,返回 True,否则返回 False。
- os.path.isfile(path):如果给定路径是一个文件,返回 True,否则返回 False。
- os.path.isdir(path):如果给定路径是一个目录,返回 True,否则返回 False。
- os.path.join(path1[, path2[, …]]):将多个路径组合成一个路径字符串。
- os.path.abspath(path):返回指定路径的绝对路径。
- os.path.basename(path):返回指定路径中的文件名部分。
- os.path.dirname(path):返回指定路径中的目录部分。
- os.path.splitext(path):返回指定路径中的文件扩展名和文件名部分的元组。
除了上面列举的函数之外,os 模块还提供了许多其他功能,例如文件和目录的权限设置、进程管理等等。总的来说,os 模块是一个非常有用的模块,可以让你更好地管理操作系统相关的功能。
将图片从ros转换成opencv的格式
在ROS中,图像通常以ROS的Image消息格式进行传输和处理。要将ROS图像消息转换为OpenCV格式,可以使用cv_bridge库,它可以方便地进行ROS图像消息和OpenCV图像格式之间的转换。
以下是一个示例Python代码,演示如何将ROS Image消息转换为OpenCV图像格式:
1 | import cv2 |
python-socket
资料汇总
python socket函数中,send 与sendall的区别与使用方法_socket.sendall_无灵的博客-CSDN博客
python struct.unpack和struct.pack详解_eliforsharon的博客-CSDN博客
理解字节序 大端字节序和小端字节序_一颗橙子居然的博客-CSDN博客
python socket.socket()函数 套接字详解及TCP、UDP程序示例(粘包等)_Dontla的博客-CSDN博客
Pycharm打开时一直加载中?现在就给你解决方法 ~_pycharm卡在启动界面_十九1919的博客-CSDN博客
为什么你的pycharm打开时很卡,今天来教你解决方案_pycharm卡顿_Python编程开发的博客-CSDN博客
imencode
1 | def imencode(ext, img, params=None): # real signature unknown; restored from __doc__ |
struck.pack
struct — Interpret bytes as packed binary data
img_size = struct.unpack(‘!i’, data)[0]
struct.unpack() 是Python内置模块struct提供的函数,用于将一个字节流解析为Python对象。在这里,我们使用它来将接收到的4个字节数据解析为一个整数值。
在struct.unpack()函数中,第一个参数‘!i’指定了解析数据的格式,其中‘!’表示使用网络字节序(即大端字节序),‘i’表示解析出来的值的类型为整型。因为客户端发送的数据使用的是网络字节序,所以在服务端接收时需要使用相同的字节序。因此,我们在这里使用大端字节序。
struct.unpack()函数的返回值是一个元组,其中包含了按指定格式解析出来的所有值。在这里,我们只需要一个整数值,因此使用索引[0]取出第一个元素。
问题
什么都可以问chatgpt
他真的什么都会
缺少rospkg


黑屏
安装anaconda的时候出现conda无法识别的情况
Ubuntu18.04安装Anaconda(最新最全亲测图文并茂)_ubuntu18.04 anaconda_向日葵骑士Faraday的博客-CSDN博客
ros安装依赖报错
如果按照以往的教学可能会出现找不到 ackermann-steering-msgs 的情况
其实,它叫 ackermann_msgs

官网没有ackermann-steering-msgs
小车显示为白色
For frame [xxx]: Fixed Frame [map] does not exist_fixed frame里只有map_不知语冰的博客-CSDN博客
无法定位程序输入点
无法定位程序输入点的一种可能_assjaa的博客-CSDN博客
ubuntu unexpected inconsistency;runfsck manually黑屏
黑屏遇到各种命令行不要怕
ubuntu unexpected inconsistency;runfsck manually解决办法_写代码的小姜的博客-CSDN博客
Inotify监视限值不足问题_zhongwcool的博客-CSDN博客
修改pycharm使用内存
修改内存建议直接1g-4g
PyCharm2021-2022版本如何修改配置内存大小?解决PyCharm内存卡死的问题(保姆级图文并茂)_pycharm内存设置多少合适_发现你走远了的博客-CSDN博客
Pycharm打开时一直加载中?解决办法来了~_pycharm正在等待进程分离_蚂蚁爱Python的博客-CSDN博客
当你的虚拟机中的pycharm进行预加载的时候的,总是卡顿,死机,重启的时候,如果看到了这篇文章,对你的问题有所帮助,记得点个赞,被这个bug折腾了好几个小时,阵地难受
胡思乱想
我可以调整输入的端口号,然后开启不同的线程,用来给不同的车打开摄像头
(还是去年的办法)
思考如何让python回传给qt信息,比如发送一个摄像头已连接的信息
现在的问题是小车可以传图,但是一给小车发送信息就会断连
阶段性成果
windows到windows建立通信
一台主机上不同端口号互相传输数据(3月7号完成)
1 | #ifndef SERVER_H |
1 | #include "client.h" |
两台主机间进行通信
windows到ubuntu建立通信
windows到ubuntu(其实啥也不用改,只用在ubuntu上添加一个wine包
如何在 Linux 中运行.exe 程序_linux运行exe_叶之道的博客-CSDN博客
直接sudo apt intall wine就可以,那个stable版本我的报错了
奇思妙想
打算用一个服务端,采用多端口号的视频传输方式,总共四个端口号,三个小车视频,一个地图传输;同时打算在ui中显示本机ip地址,用于python程序客户端的连接。


记录一下如何多个客户端同时发消息,来连接
