KeyError 发表于 2023-3-4 23:43:03

基于Python的turtlesim远程操作系统1.0

本帖最后由 KeyError 于 2023-3-5 00:25 编辑



Turtlesim远程操作系统1.0隆重推出{:10_298:}

该系统采用类似CMD的方法,让用户输入指令后远程操控

基本思路
1.树莓派端

创建一个无限循环,
接受PC端的指令。
如果指令有效,
发送消息让小乌龟移动

2.PC端

无限循环接受指令,
并发送指令。

代码请自己创建程序包保存。

树莓派端代码:
#soc.py
from socket import *
import time
import rospy
from geometry_msgs.msg import Twist

HOST = ""# HOST 变量是空白的,表示它可以使用任何可用的地址。
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(family=AF_INET, type=SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)# 开始TCP监听,监听5个请求


def move_turtle(one, two):    #定义启动函数
      rospy.init_node("move")    #创建节点名为"move"的节点
      pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=10)
      vel = Twist()
      vel.linear.x = one / 10
      vel.linear.y = 0
      vel.linear.z = 0
      vel.angular.x = 0
      vel.angular.y = 0
      vel.angular.z = two / 10
      rospy.loginfo("Linear Vel = %f:Angular Vel = %f", 0.1, 0.1)    #发送消息,让乌龟移动
      pub.publish(vel)


while True:
    print("正在连接控制器...")
    tcpCliSock, addr = tcpSerSock.accept()
    print(f"...已成功连接IP地址为{addr}的控制器")
    while True:
      try:
            data = tcpCliSock.recv(BUFSIZ)
      except ConnectionResetError:
            print("控制器已退出")
            break
      if not data:
            break
      try:
            data = data.decode("utf-8")    #将指令转为UTF-8编码
            x = data.split(' ')
            if x == "MOVE":
                move_turtle(float(x), float(x))
      except rospy.ROSInterruptException:
            pass
      except (TypeError, ValueError):    #如果值无效
            pass
    tcpCliSock.close()

static/image/hrline/1.gif

PC端:
#pc.py
from socket import *
HOST = '192.168.10.34'   #树莓派的IP,可在树莓派终端输入"ifconfig"查看
PORT = 21567   # 端口一定要一样
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = input('请输入指令: ')
    if not data:
      break
    tcpCliSock.send(bytes(data, 'utf-8'))    #send只能发送bytes,将指令转为bytes
tcpCliSock.close()

运行方法:
在终端里输入:
$ roscore
打开一个新终端,输入:
$ rosrun turtlesim turtlesim_node
再打开一个新终端,输入:
$ python soc.py
在PC的终端里,输入:
$ python pc.py
即可发送指令。

指令发送方法:
MOVE 线速度 角速度
比如让乌龟前进10像素,左转1弧度,要输入:
MOVE 10 10

Mike_python小 发表于 2023-3-5 07:49:28

如果我没看错的话,这应该需要一个公网IP把
不然就只能同一个局域网下使用

KeyError 发表于 2023-3-5 08:12:37

Mike_python小 发表于 2023-3-5 07:49
如果我没看错的话,这应该需要一个公网IP把
不然就只能同一个局域网下使用

sfqxx 发表于 2023-3-5 09:57:15

中奖率10%……
至少10次吧

sfqxx 发表于 2023-3-5 10:04:37

鱼币

照亮人的灯 发表于 2023-3-5 10:16:25

{:10_254:}

一点沙 发表于 2023-3-5 10:19:18

厉害

一点沙 发表于 2023-3-5 10:56:35

鱼币

一点沙 发表于 2023-3-5 10:57:21

这概率也太低了吧{:10_266:}{:10_266:}

一点沙 发表于 2023-3-5 10:58:00

不对,不是说十楼才会有吗,为啥九楼也有?

hornwong 发表于 2023-3-5 11:05:09

感谢分享!

sfqxx 发表于 2023-3-5 11:15:15

一点沙 发表于 2023-3-5 10:57
这概率也太低了吧

概率不一样

一点沙 发表于 2023-3-5 11:20:17

sfqxx 发表于 2023-3-5 11:15
概率不一样

好吧

sfqxx 发表于 2023-3-5 11:24:58

一点沙 发表于 2023-3-5 11:20
好吧

1(灌水——)

sfqxx 发表于 2023-3-5 11:42:20

再来

sfqxx 发表于 2023-3-5 11:47:12

楼主666

sfqxx 发表于 2023-3-5 11:51:38

概率太小会没人领的{:10_262:}

sfqxx 发表于 2023-3-5 11:52:27

终于领到了{:10_254:}

sfqxx 发表于 2023-3-5 12:28:36

{:10_312:}

woshizhangpengp 发表于 2023-3-5 12:51:44

{:5_106:}
页: [1] 2 3 4 5
查看完整版本: 基于Python的turtlesim远程操作系统1.0