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

    请问ros2 run和ros2 launch启动同一个节点的启动效果不同是什么原因呢?

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    launch ros2 run
    3
    9
    888
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 毛哥成山轮胎机油保养毛
      毛哥成山轮胎机油保养 活跃VIP
      最后由 编辑

      我参考网上代码写了一个JY_95T imu的获取程序,这款imu需要在接收数据前发送一串字符串命令,但是我发现我用ros2 run imu_get_cpp publisher_imu_node 启动能正确发送这段代码,用 ros2 launch imu_get_cpp imu_cpp.launch.py 启动这个imu节点这段命令不能正常发出,而是在按ctrl+c退出程序的时候才发出这段命令,按理说这两种启动节点的方法应该是一样的。有人知道什么原因吗?下面是2种启动方法的日志文件
      m@ubun:~/ros2_ws$ ros2 run imu_get_cpp publisher_imu_node
      [INFO] [1693883056.342819936] [publisher_imu_node]: imu串口初始化完成!
      imu发出命令: a4 3 8 23 d2
      imu发布线程工作中
      ^C[INFO] [1693883060.571197391] [rclcpp]: signal_handler(signal_value=2)
      imu线程退出

      m@ubun:~/ros2_ws$ ros2 launch imu_get_cpp imu_cpp.launch.py
      [INFO] [launch]: All log files can be found below /home/m/.ros/log/2023-09-05-11-05-57-304442-ubun-16558
      [INFO] [launch]: Default logging verbosity is set to INFO
      [INFO] [publisher_imu_node-1]: process started with pid [16563]
      [publisher_imu_node-1] [INFO] [1693883157.461656186] [publisher_imu_node]: imu串口初始化完成!
      ^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
      [publisher_imu_node-1] [INFO] [1693883161.738837124] [rclcpp]: signal_handler(signal_value=2)
      [publisher_imu_node-1] imu发出命令: a4 3 8 23 d2
      [publisher_imu_node-1] imu发布线程工作中
      [publisher_imu_node-1] imu线程退出
      [INFO] [publisher_imu_node-1]: process has finished cleanly [pid 16563]

      imu_cpp.launch.py

      #!/usr/bin/python3
      from ament_index_python.packages import get_package_share_directory
      from launch import LaunchDescription
      from launch_ros.actions import Node
      
      def generate_launch_description():
      
          imu_node = Node(package='imu_get_cpp',
                          executable='publisher_imu_node',
                          name='publisher_imu_node',		
                          output='screen',                              
                          )
          return LaunchDescription([
              imu_node,
          ])
      
      毛哥成山轮胎机油保养毛 1 条回复 最后回复 回复 引用 0
      • 毛哥成山轮胎机油保养毛
        毛哥成山轮胎机油保养 活跃VIP @毛哥成山轮胎机油保养
        最后由 编辑

        @毛哥成山轮胎机油保养 imu程序详细代码在
        链接文本

        小鱼小 1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @毛哥成山轮胎机油保养
          最后由 编辑

          @毛哥成山轮胎机油保养 用launch相当于用子进程启动程序,还是有点区别的,对于多线程的程序,会出现一些异常
          除此之外,考虑程序是否有阻塞问题

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

          毛哥成山轮胎机油保养毛 1 条回复 最后回复 回复 引用 0
          • 毛哥成山轮胎机油保养毛
            毛哥成山轮胎机油保养 活跃VIP @小鱼
            最后由 编辑

            @小鱼 c++还是有点驾驭不了,源码在这
            链接文本
            鱼总有时间帮我分析一下哪里有问题,现在这个程序用launch启动逻辑是不正常的,只能用ros2 run 启动,还有这个imu我用尽了各种办法都不能固定usb端口别名,只能是先插这个imu 它的端口号用ttyUSB0
            usb.rules

            KERNELS=="1-1.2:1.0", MODE:="0777", GROUP:="dialout",SYMLINK+="wheeltec_laser"
            KERNELS=="3-1:1.0", MODE:="0777", GROUP:="dialout", SYMLINK+="ttyTHS1"
            SUBSYSTEM=="usb", ATTR{idProduct}=="0403", ATTR{idVendor}=="2bc5", MODE:="0666", OWNER:="root", GROUP:="video", SYMLINK+="astra_pro"
            SUBSYSTEM=="usb", ATTR{idProduct}=="0501", ATTR{idVendor}=="2bc5", MODE:="0666", OWNER:="root", GROUP:="video", SYMLINK+="astrauvc"
            KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777",GROUP:="dialout", SYMLINK+="ttyimu"
            

            其他像雷达 摄像头 底盘驱动端口都生效了,这个ttyimu就是死活不生效,现在只能用/dev/ttyUSB0

            LorryL 1 条回复 最后回复 回复 引用 0
            • LorryL
              Lorry @毛哥成山轮胎机油保养
              最后由 编辑

              @毛哥成山轮胎机油保养
              你试试把

              printf("imu发出命令: %x %x %x %x %x\n",cmd_buffer[0],cmd_buffer[1],cmd_buffer[2],cmd_buffer[3],cmd_buffer[4]);
              

              换成RCLCPP_INFO输出,应该就没问题了

              毛哥成山轮胎机油保养毛 2 条回复 最后回复 回复 引用 0
              • 毛哥成山轮胎机油保养毛
                毛哥成山轮胎机油保养 活跃VIP @Lorry
                最后由 编辑

                @Lorry 确实用RCLCPP_INFO把问题解决了,谢谢

                1 条回复 最后回复 回复 引用 0
                • 毛哥成山轮胎机油保养毛
                  毛哥成山轮胎机油保养 活跃VIP @Lorry
                  最后由 编辑

                  @Lorry 我试遍了网上给usb端口改别名的方法,就是不生效,只能把imu第一个插上选/dev/ttyUSB0,你有经验吗?

                  LorryL 1 条回复 最后回复 回复 引用 0
                  • LorryL
                    Lorry @毛哥成山轮胎机油保养
                    最后由 编辑

                    @毛哥成山轮胎机油保养 改别名是可以的呀,我之前也改过imu的别名

                    毛哥成山轮胎机油保养毛 1 条回复 最后回复 回复 引用 0
                    • 毛哥成山轮胎机油保养毛
                      毛哥成山轮胎机油保养 活跃VIP @Lorry
                      最后由 编辑

                      @Lorry 可以了
                      KERNELS=="3-2.3:1.0", MODE:="0777", GROUP:="dialout", SYMLINK+="ttyimu",
                      以前弄了好多次,不行,刚刚重新试了一下,可以了。

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