导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    使用python代码启动launch文件

    技术交流
    3
    8
    4953
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • weijiz
      weijiz 最后由 编辑

      在开发中我们经常会遇到使用python代码启动launch文件这样的问题。一般的做法是使用subprocess调用roslaunch。但是这种方法使用起来并不方便。要涉及到自己去控制进程的状态。由于roslaunch实际上是用python实现的。使用python调用launch文件实际上有更简单的方法。

      import roslaunch
      
      uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
      roslaunch.configure_logging(uuid)
      tracking_launch = roslaunch.parent.ROSLaunchParent(
          uuid, ["/home/xiaoqiang/Documents/ros/src/xiaoqiang_track/launch/track_body.launch"])
      tracking_launch.start()
      

      这样就成功启动了一个launch文件。把uuid后面的路径换成自己的launch文件路径就可以了。

      而且我们可以通过roslaunch直接关闭launch文件启动的节点。

      tracking_launch.shutdown() # tracking_launch 即是上面通过roslaunch获取到的变量
      

      这样使用起来就很方便了。

      1 条回复 最后回复 回复 引用 0
      • 几何木偶
        几何木偶 最后由 编辑

        f2fc16e0-f0de-4eec-bc7f-c09762cf99c2-image.png 这个程序运行后就被退出了(killing on exit),应该怎么做?

        weijiz 1 条回复 最后回复 回复 引用 0
        • weijiz
          weijiz @几何木偶 最后由 编辑

          @几何木偶 你的代码是什么样的

          1 条回复 最后回复 回复 引用 0
          • 几何木偶
            几何木偶 最后由 编辑

            f31258e7-3a5b-425d-92ca-53b28be31ffc-image.png

            weijiz 1 条回复 最后回复 回复 引用 0
            • weijiz
              weijiz @几何木偶 最后由 编辑

              @几何木偶 因为没有join方法,所以程序出错后退出了。tracking_launch.start()是不阻塞的,需要自己阻塞主线程。比如

              import roslaunch
              import rospy
              import time
              
              uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
              roslaunch.configure_logging(uuid)
              tracking_launch = roslaunch.parent.ROSLaunchParent(
                  uuid, ["/home/xiaoqiang/Documents/ros/src/xiaoqiang_track/launch/track_body.launch"])
              tracking_launch.start()
              while not rospy.is_shutdown():
                  time.sleep(1)
              
              1 条回复 最后回复 回复 引用 0
              • 几何木偶
                几何木偶 最后由 编辑

                586d74d7-e403-4265-a4ef-969d5b16ebee-image.png
                这样当我使用ctrl+c结束时,它没有跳出循环,变成死循环了。有办法吗?

                weijiz 1 条回复 最后回复 回复 引用 0
                • weijiz
                  weijiz @几何木偶 最后由 编辑

                  @几何木偶 你的代码是什么样的,像我之前的例子那样写应该会正常退出。

                  1 条回复 最后回复 回复 引用 0
                  • 黄哈哈
                    黄哈哈 最后由 编辑

                    tracking_launch.spin()

                    1 条回复 最后回复 回复 引用 0
                    • 1 / 1
                    • First post
                      Last post
                    Copyright © 2015-2023 BlueWhale community