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

    FishBotV1.0雷达转接板驱动(嵌入式)方案讨论

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

      雷达驱动板:主要用于驱动雷达,实现usb转接雷达和wifi转接雷达。

      1. USB有线转雷达。直接采用串口芯片实现,无需开发
      2. wifi无线转雷达,目前小鱼有两个方案,需要讨论确定的。

      方案1:

      通过ESPRTOS开发的,通过串口读数据进行wifi转发。

      方案2:

      通过ESP8266支持的AT固件,进入透传模式进行转发。

      优缺点对比:

      方案1自定义程度较高,可以加入配网(多播)功能、和服务器IP配置等。但稳定性存在疑虑。

      方案2稳定性应该较好,但是灵活性上需要通过外部才能完成网络配置和服务器IP配置工作。

      请各位小伙伴根据以往经验提提建议,选择哪个方案更好些?

      另外关于上位机(电脑端)的驱动,初步打算是做一个Socket2VUart(网络转虚拟串口)的程序,这样可以无缝兼容官方驱动。

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

      1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬
        最后由 编辑

        AT固件版初步测试结果基本达到每秒5帧数据,偶尔四桢,具体测试需要上位机驱动编写完成后尝试

        46cbbde9-ddbe-4856-ab62-8f171a5fec3a-image.png

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

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

          写了个socket2serial的程序,在ros2上已经跑起来了,帧率可以保持在7Hz。采用的方式是AT方法,经调研后发现AT也是开放源码的,所以可以直接在AT源码上进行修改来弥补其灵活性的缺失。

          关于这个问题,个人觉得以当前人力,最小开发为原则,所以选择成熟稳定的AT版本最佳。

          另外关于通过网络数据的延时需要进一步测量,准备最近搭建一个测试环境进行测试,给出相关报告。

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

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

            @小鱼 uart2serial程序分享,利用linux的poll机制实现。

            #!/usr/bin/env python3
            
            import os
            import pty
            import socket
            import select
            import argparse
            
            parser = argparse.ArgumentParser(description='Creates a virtual pty for a remote tcp/udp socket')
            parser.add_argument('host', type=str)
            parser.add_argument('port', type=int)
            parser.add_argument('-u', '--udp', action='store_true')
            args = parser.parse_args()
            
            lhost = args.host
            lport = args.port
            
            def main():
                s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM if args.udp else socket.SOCK_STREAM)
                s.bind((lhost, lport))
                s.listen(5)
                client,client_address = s.accept()
                master, slave = pty.openpty()
                print(s.fileno(),client,master)
            #    tty.setraw(master, termios.TCSANOW)
                print('PTY: Opened {} for {}:{}'.format(os.ttyname(slave), lhost, lport))
                mypoll = select.poll()
                mypoll.register(client.fileno(), select.POLLIN)
                mypoll.register(master, select.POLLIN)
            
                try:
                    while True:
                        fdlist = mypoll.poll(256)
                        for fd,event in fdlist:
                            data = os.read(fd, 256)
                            write_fd = client.fileno() if fd == master else master
                            os.write(write_fd, data)
                finally:
                    s.close()
                    os.close(master)
                    os.close(slave)
                
            if __name__ == "__main__":
                main()
            
            

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

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

              @小鱼 相关资料收集

              • https://github.com/espressif/esp-at/tree/release/v2.2.0.0_esp8266
              • https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/
              • https://docs.espressif.com/projects/esp8266-rtos-sdk/en/v3.4/get-started/index.html
              • https://pypi.org/project/esptool

              环境搭建

              docker run -it -v d:/esp-at:/project -w /project xingrz/esp8266-rtos-builder:3.4 /bin/bash
              

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

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

                @小鱼 走USB串口速率

                average rate: 7.410
                	min: 0.134s max: 0.138s std dev: 0.00108s window: 9
                average rate: 7.419
                	min: 0.134s max: 0.138s std dev: 0.00084s window: 17
                average rate: 7.420
                	min: 0.134s max: 0.138s std dev: 0.00076s window: 25
                average rate: 7.420
                	min: 0.134s max: 0.138s std dev: 0.00068s window: 33
                average rate: 7.421
                	min: 0.134s max: 0.138s std dev: 0.00062s window: 41
                average rate: 7.421
                	min: 0.134s max: 0.138s std dev: 0.00061s window: 49
                average rate: 7.422
                	min: 0.134s max: 0.138s std dev: 0.00059s window: 57
                average rate: 7.422
                	min: 0.134s max: 0.138s std dev: 0.00060s window: 65
                average rate: 7.423
                	min: 0.134s max: 0.138s std dev: 0.00060s window: 73
                average rate: 7.423
                	min: 0.134s max: 0.138s std dev: 0.00058s window: 81
                average rate: 7.423
                	min: 0.134s max: 0.138s std dev: 0.00058s window: 89
                average rate: 7.424
                	min: 0.134s max: 0.138s std dev: 0.00056s window: 97
                average rate: 7.424
                	min: 0.134s max: 0.138s std dev: 0.00056s window: 105
                average rate: 7.424
                	min: 0.134s max: 0.138s std dev: 0.00055s window: 113
                
                

                socket

                average rate: 6.297
                	min: 0.000s max: 0.437s std dev: 0.17967s window: 72
                average rate: 6.294
                	min: 0.000s max: 0.437s std dev: 0.17973s window: 80
                average rate: 6.295
                	min: 0.000s max: 0.437s std dev: 0.17976s window: 88
                average rate: 6.359
                	min: 0.000s max: 0.437s std dev: 0.17850s window: 97
                average rate: 6.415
                	min: 0.000s max: 0.437s std dev: 0.17745s window: 106
                average rate: 6.401
                	min: 0.000s max: 0.439s std dev: 0.17790s window: 114
                average rate: 6.451
                	min: 0.000s max: 0.439s std dev: 0.17686s window: 123
                average rate: 6.492
                	min: 0.000s max: 0.439s std dev: 0.17608s window: 132
                average rate: 6.478
                	min: 0.000s max: 0.439s std dev: 0.17641s window: 140
                average rate: 6.468
                	min: 0.000s max: 0.439s std dev: 0.17663s window: 148
                average rate: 6.458
                	min: 0.000s max: 0.439s std dev: 0.17684s window: 156
                
                

                增大电机转速

                average rate: 6.996
                	min: 0.001s max: 0.385s std dev: 0.16775s window: 9
                average rate: 7.120
                	min: 0.001s max: 0.385s std dev: 0.16423s window: 18
                average rate: 7.138
                	min: 0.001s max: 0.385s std dev: 0.16374s window: 27
                average rate: 7.126
                	min: 0.001s max: 0.385s std dev: 0.16405s window: 36
                average rate: 7.135
                	min: 0.001s max: 0.385s std dev: 0.16378s window: 45
                average rate: 7.141
                	min: 0.001s max: 0.385s std dev: 0.16361s window: 54
                average rate: 7.135
                	min: 0.001s max: 0.389s std dev: 0.16382s window: 63
                average rate: 7.140
                	min: 0.001s max: 0.389s std dev: 0.16367s window: 72
                average rate: 7.143
                	min: 0.000s max: 0.389s std dev: 0.16359s window: 81
                

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

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

                  @小鱼 uart2serial程序分享,利用linux的poll机制实现。

                  #!/usr/bin/env python3
                  
                  import os
                  import pty
                  import socket
                  import select
                  import argparse
                  
                  parser = argparse.ArgumentParser(description='Creates a virtual pty for a remote tcp/udp socket')
                  parser.add_argument('port', type=int)
                  parser.add_argument('uart_name', type=str)
                  args = parser.parse_args()
                  
                  lport = args.port
                  luser_name = args.uart_name
                  
                  def restart_laser_driver_ros2():
                      """
                      Restart YdLaser Driver With Ros2!
                      1.LifeCycle 
                      2.Restart Laser SubProcess
                      """
                      pass
                  
                  def main():
                      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                      s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                      s.bind(('0.0.0.0', lport))
                      s.listen(5)
                      master, slave = pty.openpty()
                      if os.path.exists(luser_name): os.remove(luser_name)
                      os.symlink(os.ttyname(slave),luser_name)
                      print(f"UART2SOCKET:{lport}->{luser_name}")
                      mypoll = select.poll()
                      mypoll.register(master, select.POLLIN)
                  
                      try:
                          while True:
                              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', lport))
                              is_connect = True
                              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)
                              mypoll.unregister(client.fileno())
                      finally:
                          s.close()
                          os.close(master)
                          os.close(slave)
                          os.remove(luser_name)
                  
                  if __name__ == "__main__":
                      main()
                  
                  

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

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