鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    拓展:雷达转接板的无线串口功能驱动代码

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    fishbot 雷达驱动
    3
    4
    1.2k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 小鱼 编辑

      拓展-雷达转接板的无线串口功能驱动代码

      核心代码如下,桥接TCP到串口,可实现自动重连功能。

      主要利用虚拟串口+linux的poll实现。

      当启动后会自动生成串口,串口地址名称和地址可以自定义,默认为"/tmp/fishbot_laser",默认端口为8889

      #!/usr/bin/env python3
      
      import subprocess
      import os
      import pty
      import socket
      import select
      import argparse
      import subprocess
      import time
      
      
      
      class SocketServer():
          def __init__(self,lport=8889,uart_name="/tmp/fishbot_laser") -> None:
              self.lport = lport
              self.uart_name = uart_name
              self.main()
      
          def main(self):
              s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
              s.bind(('0.0.0.0', self.lport))
              s.listen(5)
              master, slave = pty.openpty()
              if os.path.exists(self.uart_name):
                  os.remove(self.uart_name)
              os.symlink(os.ttyname(slave), self.uart_name)
              print(f"UART2SOCKET:{self.lport}->{self.uart_name}")
              mypoll = select.poll()
              mypoll.register(master, select.POLLIN)
              try:
                  while True:
                      print("Prepare to Accept connect!")
                      client, client_address = s.accept()
                      mypoll.register(client.fileno(), select.POLLIN)
                      print(s.fileno(), client, master)
                      print('PTY: Opened {} for {}:{}'.format(
                          os.ttyname(slave), '0.0.0.0', self.lport))
                      is_connect = True
                      try:
                          while is_connect:
                              fdlist = mypoll.poll(256)
                              for fd, event in fdlist:
                                  data = os.read(fd, 256)
                                  write_fd = client.fileno() if fd == master else master
                                  if len(data) == 0:
                                      is_connect = False
                                      break
                                  os.write(write_fd, data)
                                  # print(fd, event, data)
                      except ConnectionResetError:
                          is_connect = False
                          print("远程被迫断开链接")
                      finally:
                          mypoll.unregister(client.fileno())
              finally:
                  s.close()
                  os.close(master)
                  os.close(slave)
                  os.remove(self.uart_name)
      
      def main():
          SocketServer()
      
      
      if __name__ == "__main__":
          main()
      

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      1 条回复 最后回复 回复 引用 0
      • 5834867155
        583486715
        最后由 编辑

        您好!按照您的代码,我无法正确启动雷达节点,麻烦您看我的操作哪里有问题,操作流程如下:
        1.在虚拟机中运行该代码,显示如下:
        58fc7967-fcbf-4721-b679-dfdb7135a32f-image.png
        2.小车端雷达转接板的连接是将跳线帽调整到WIFI模式。
        3.在虚拟机中驱动雷达使用的是ydlidar_ros2源码包,启动命令是ros2 launch ydlidar ydlidar_launch.py,报错如下:
        57720303-6779-4e4b-a812-7cbcef43f00c-image.png

        小鱼小 X 2 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @583486715
          最后由 小鱼 编辑

          @583486715 为什么不用教程中的镜像,这个错误估计是雷达型号配置错误,需要修改驱动配置

          @小鱼 在 提问前必看!一定要看!必须看一下! 中说:

          一个好的提问不仅能够帮助自己理清楚问题,还有助于别人快速帮助到你。——提问的智慧

          问题一定要描述清楚,终端打印一定复制粘贴,方便回答者检索和引用(你可以在linux系统上打开浏览器进社区)
          基本的Markdown语法一定要学习下,有的小伙伴图片代码一团糟
          提问时一定要提供尽可能多的信息(系统版本,ROS版本,前后操作,终端日志),包括你的目的,比如你其实想装装某个库遇到问题,不要只说这个问题,因为可能有更好的替代方案
          先搜索再提问,很多问题其实都有解决方案,确保你自己对自己的问题有一定了解再提问
          尽量一句话说完,不要把社区当微信聊天一样用,每一个回复都尽量提供更多的的信息。

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          1 条回复 最后回复 回复 引用 0
          • X
            xloong816 @583486715
            最后由 编辑

            @583486715 解决了吗?兄弟,是什么问题呀?

            1 条回复 最后回复 回复 引用 0
            • 第一个帖子
              最后一个帖子
            皖ICP备16016415号-7
            Powered by NodeBB | 鱼香ROS