ApolloAuto / apollo

An open autonomous driving platform
Apache License 2.0
25.06k stars 9.68k forks source link

能不能做到:让车辆强制按照我设定的轨迹行驶? #15536

Open lsm2842035890 opened 1 week ago

lsm2842035890 commented 1 week ago

我的想法是通过cyberbridge,通过planning来发送轨迹坐标,强制让小车按照设定的轨迹行驶,这种情况下能不能只提供坐标,其他比如计算当前位置与下一时刻位置如何控制速度和转向等等是自动的吗,需要一并提供控制信息吗 _ROUTINGREQUEST.fields_by_name['header'].message_type = modules_dot_common_dot_proto_dot_header__pb2._HEADER _ROUTINGREQUEST.fields_by_name['waypoint'].message_type = _LANEWAYPOINT _ROUTINGREQUEST.fields_by_name['blacklisted_lane'].message_type = _LANESEGMENT _ROUTINGREQUEST.fields_by_name['parking_space'].message_type = modules_dot_map_dot_proto_dot_mapparkingspace__pb2._PARKINGSPACE _ROUTINGREQUEST.fields_by_name['parking_info'].message_type = _PARKINGINFO _ROUTINGREQUEST.fields_by_name['dead_end_info'].message_type = _DEADENDINFO

YuqiHuai commented 1 week ago

比如计算当前位置与下一时刻位置如何控制速度和转向等等是自动的吗,需要一并提供控制信息吗

不太明白您理解的是什么情况,但是我目前了解的是

可以通过发送Routing Request设置让Apollo到地图上的几个点,然后Routing会计算走哪些路,Planning会自己计算具体的每一步(速度加速什么的)。

lsm2842035890 commented 1 week ago

就是不用planning计算出来的信息(速度加速度转向),我直接提供用户自定义的(速度加速度转向),强制按照用户的来,相当于不让apollo自动驾驶了,就是想知道可以不可以通过某个sh文件,能够实现这个功能。(我也是天马行空哈哈哈)

zhuabaguai commented 1 week ago

import time

from cyber.python.cyber_py3 import cyber

from modules.common_msgs.routing_msgs.routing_pb2 import RoutingRequest

def send_routing_request():
    test_node = cyber.Node("node_name1")

    routing_request = RoutingRequest()
    routing_request.header.timestamp_sec = time.time()
    routing_request.header.module_name = 'routing'

    start_apollo_waypoint = routing_request.waypoint.add()
    start_apollo_waypoint.pose.x = -763.84903046079046
    start_apollo_waypoint.pose.y = -144.15823974289736

    target_apollo_waypoint = routing_request.waypoint.add()
    target_apollo_waypoint.pose.x = -749.65603094640028
    target_apollo_waypoint.pose.y = -174.80081506355179

    writer = test_node.create_writer("/apollo/raw_routing_request", RoutingRequest)

    for i in range(10):
        writer.write(routing_request)
        print("send")
        time.sleep(1)

    print(routing_request)

if __name__ == '__main__':
    cyber.init("talker_sample")

    send_routing_request()

    cyber.shutdown()
我用这个python脚本成功发送了信息到/apollo/raw_routing_request,为什么车辆不开始运动呢。
zhuabaguai commented 1 week ago
header {
  timestamp_sec: 1726740384.5194161
  module_name: "routing"
  sequence_num: 80
}
road {
  id: "71"
  passage {
    segment {
      id: "road_71_lane_0_2"
      start_s: 65.829764517663065
      end_s: 83.296862078864649
    }
    can_exit: true
    change_lane_type: FORWARD
  }
}
road {
  id: "70"
  passage {
    segment {
      id: "road_70_lane_0_2"
      start_s: 0
      end_s: 16.536395339208298
    }
    can_exit: true
    change_lane_type: FORWARD
  }
}
measurement {
  distance: 34.003492900409881
}
routing_request {
  header {
    timestamp_sec: 1726740375.5076156
    module_name: "routing"
  }
  waypoint {
    id: "road_71_lane_0_2"
    s: 65.829764517663065
    pose {
      x: -763.84903046079046
      y: -144.15823974289736
    }
  }
  waypoint {
    id: "road_70_lane_0_2"
    s: 16.536395339208298
    pose {
      x: -749.65603094640028
      y: -174.80081506355179
    }
  }
}
map_version: "0"
status {
  error_code: OK
  msg: "Success!"
}

这是我的响应信息

YuqiHuai commented 1 week ago

@lsm2842035890 Apollo里的RTK Planner应该就是你想要的用户指定Planning,不过我具体没了解过这个。

@zhuabaguai Routing成功车辆不开始运动,一个是检查Planning是否启动(比如用cyber_monitor看有没有/apollo/planning有没有消息),再就是如果你用的是Dreamview的SimControl的话检查一下SimControl有没有打开(用cyber_monitor看/apollo/localization/pose有没有msg)。

1012327963 commented 1 week ago

强制按照你指定的路线行驶的话得用PATH_FOLLOW,但是这东西没开源

ycraurora commented 2 days ago

9.0中可以参考 modules/external_command/external_command_demo