autoware
Autoware - the world's leading open-source software project for autonomous driving
Top Related Projects
An open autonomous driving platform
openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system in 275+ supported cars.
Autoware - the world's leading open-source software project for autonomous driving
Open-source simulator for autonomous driving research.
A ROS/ROS2 Multi-robot Simulator for Autonomous Vehicles
Quick Overview
Autoware is an open-source software platform for autonomous driving technology. It provides a complete stack of software components necessary for the development, testing, and deployment of self-driving vehicles, including perception, localization, planning, and control modules.
Pros
- Comprehensive: Offers a full suite of autonomous driving components
- Open-source: Allows for community contributions and customization
- ROS2-based: Leverages the robust and widely-used Robot Operating System 2
- Actively maintained: Regular updates and improvements from the community
Cons
- Steep learning curve: Requires significant expertise in robotics and autonomous systems
- Hardware-dependent: Optimal performance often requires specific sensor configurations
- Resource-intensive: Can be computationally demanding, especially for real-time operations
- Limited documentation: Some areas may lack detailed explanations or tutorials
Code Examples
- Launching Autoware:
ros2 launch autoware_launch autoware.launch.xml map_path:=/path/to/map_folder vehicle_model:=lexus sensor_model:=aip_xx1
This command launches the main Autoware stack with specified map, vehicle, and sensor configurations.
- Publishing a goal pose:
from geometry_msgs.msg import PoseStamped
from rclpy.node import Node
import rclpy
class GoalPublisher(Node):
def __init__(self):
super().__init__('goal_publisher')
self.publisher = self.create_publisher(PoseStamped, '/planning/mission_planning/goal', 10)
self.timer = self.create_timer(1.0, self.publish_goal)
def publish_goal(self):
goal = PoseStamped()
goal.header.frame_id = 'map'
goal.pose.position.x = 10.0
goal.pose.position.y = 20.0
goal.pose.orientation.w = 1.0
self.publisher.publish(goal)
rclpy.init()
node = GoalPublisher()
rclpy.spin(node)
This Python script creates a ROS2 node that publishes a goal pose for the autonomous vehicle to navigate to.
- Subscribing to vehicle status:
#include <rclcpp/rclcpp.hpp>
#include <autoware_auto_vehicle_msgs/msg/vehicle_kinematic_state.hpp>
class VehicleStatusSubscriber : public rclcpp::Node
{
public:
VehicleStatusSubscriber() : Node("vehicle_status_subscriber")
{
subscription_ = this->create_subscription<autoware_auto_vehicle_msgs::msg::VehicleKinematicState>(
"/vehicle/status/kinematic_state", 10,
std::bind(&VehicleStatusSubscriber::status_callback, this, std::placeholders::_1));
}
private:
void status_callback(const autoware_auto_vehicle_msgs::msg::VehicleKinematicState::SharedPtr msg)
{
RCLCPP_INFO(this->get_logger(), "Vehicle speed: %f m/s", msg->state.longitudinal_velocity_mps);
}
rclcpp::Subscription<autoware_auto_vehicle_msgs::msg::VehicleKinematicState>::SharedPtr subscription_;
};
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<VehicleStatusSubscriber>());
rclcpp::shutdown();
return 0;
}
This C++ code creates a ROS2 node that subscribes to the vehicle's kinematic state and prints the current speed.
Getting Started
- Install ROS2 and Autoware dependencies
- Clone the Autoware repository:
git clone https://github.com/autowarefoundation/autoware.git
- Build Autoware:
cd autoware colcon build --symlink-install
- Source the setup file
Competitor Comparisons
An open autonomous driving platform
Pros of Apollo
- More comprehensive simulation environment with advanced scenario generation
- Stronger support for HD maps and localization
- Extensive hardware integration capabilities, including LiDAR and radar
Cons of Apollo
- Steeper learning curve due to complex architecture
- Less modular design, making it harder to customize specific components
- More resource-intensive, requiring higher-end hardware for optimal performance
Code Comparison
Apollo (C++):
void Planning::RunOnce(const LocalView& local_view,
ADCTrajectory* const trajectory_pb) {
const double start_timestamp = Clock::NowInSeconds();
// ... (planning logic)
const double end_timestamp = Clock::NowInSeconds();
}
Autoware (C++):
bool PlanningNode::on_timer() {
// ... (planning logic)
auto trajectory = planner_->planTrajectory(current_pose_, goal_pose_);
publishTrajectory(trajectory);
return true;
}
Both repositories use C++ for core functionality, but Apollo's codebase tends to be more complex and tightly integrated. Autoware's modular design is reflected in its simpler function structure, making it easier for developers to understand and modify specific components.
openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system in 275+ supported cars.
Pros of openpilot
- More user-friendly and accessible for consumer vehicles
- Active community with frequent updates and contributions
- Designed for real-world deployment on existing cars
Cons of openpilot
- Limited to specific supported vehicle models
- Less flexible for research and custom applications
- Focused primarily on highway driving scenarios
Code Comparison
openpilot (Python):
def update(self):
if self.sm.updated['carState']:
self.v_cruise_kph = self.sm['carState'].cruiseState.speed * CV.MS_TO_KPH
self.v_cruise_cluster_kph = self.sm['carState'].cruiseState.speedCluster * CV.MS_TO_KPH
Autoware (C++):
void update()
{
if (current_velocity_ptr_->twist.linear.x < param_.stopping_velocity) {
state_ = State::STOPPED;
} else {
state_ = State::DRIVING;
}
}
Both projects aim to provide autonomous driving capabilities, but they target different use cases. openpilot focuses on enhancing existing consumer vehicles with driver assistance features, while Autoware is a more comprehensive platform for autonomous driving research and development across various vehicle types.
Autoware - the world's leading open-source software project for autonomous driving
Pros of Autoware
- More established and mature project with a larger community
- Broader range of features and functionalities for autonomous driving
- Better documentation and support resources
Cons of Autoware
- Higher complexity and steeper learning curve
- Requires more computational resources
- Less flexible for customization in specific use cases
Code Comparison
Autoware (C++):
void VehicleInterface::publishVehicleStatus(const ros::Time & stamp)
{
autoware_vehicle_msgs::VehicleStatus status;
status.header.stamp = stamp;
status.twist.linear.x = current_velocity_;
vehicle_status_pub_.publish(status);
}
Autoware.Auto (C++):
void VehicleInterface::publish_vehicle_state(const std::chrono::system_clock::time_point & stamp)
{
auto msg = autoware_auto_msgs::msg::VehicleStateReport();
msg.stamp = stamp;
msg.velocity_mps = current_velocity_;
vehicle_state_pub_->publish(msg);
}
The code comparison shows similar functionality but highlights differences in message types, naming conventions, and time handling between the two projects. Autoware.Auto uses more modern C++ features and follows a slightly different coding style.
Open-source simulator for autonomous driving research.
Pros of CARLA
- More realistic and visually appealing simulation environment
- Extensive sensor suite and weather conditions for diverse testing scenarios
- Built-in Python API for easier integration and scripting
Cons of CARLA
- Higher computational requirements due to advanced graphics
- Limited focus on full autonomous driving stack compared to Autoware
- Steeper learning curve for users new to Unreal Engine
Code Comparison
CARLA (Python API):
import carla
client = carla.Client('localhost', 2000)
world = client.get_world()
blueprint = world.get_blueprint_library().find('vehicle.tesla.model3')
spawn_point = world.get_map().get_spawn_points()[0]
vehicle = world.spawn_actor(blueprint, spawn_point)
Autoware (ROS2 launch file):
<launch>
<include file="$(find-pkg-share autoware_launch)/launch/planning_simulator.launch.xml">
<arg name="vehicle_model" value="lexus"/>
<arg name="sensor_model" value="aip_xx1"/>
</include>
</launch>
A ROS/ROS2 Multi-robot Simulator for Autonomous Vehicles
Pros of LGSVL Simulator
- Focused on simulation, providing a more comprehensive virtual testing environment
- Supports multiple autonomous driving platforms, not limited to Autoware
- Offers a user-friendly interface for scenario creation and testing
Cons of LGSVL Simulator
- Less integrated with real-world autonomous driving systems
- Requires more setup and configuration for use with specific platforms
- May have a steeper learning curve for users new to simulation environments
Code Comparison
Autoware (C++):
void VehicleInterface::publishVehicleStatus(const ros::Time& stamp)
{
autoware_msgs::VehicleStatus msg;
msg.header.frame_id = "base_link";
msg.header.stamp = stamp;
// ... (additional code)
}
LGSVL Simulator (Python):
def on_collision(agent, other, contact):
print(f"{agent.name} collided with {other.name} at {contact}")
if config.stop_on_collision:
sim.stop()
The code snippets demonstrate the different focus areas of each project. Autoware's code relates to publishing vehicle status in a real-world scenario, while LGSVL Simulator's code handles collision events in a simulated environment.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Autoware - the world's leading open-source software project for autonomous driving
Autoware is an open-source software stack for self-driving vehicles, built on the Robot Operating System (ROS). It includes all of the necessary functions to drive an autonomous vehicles from localization and object detection to route planning and control, and was created with the aim of enabling as many individuals and organizations as possible to contribute to open innovations in autonomous driving technology.
Documentation
To learn more about using or developing Autoware, refer to the Autoware documentation site. You can find the source for the documentation in autowarefoundation/autoware-documentation.
Repository overview
- autowarefoundation/autoware
- Meta-repository containing
.repos
files to construct an Autoware workspace. - It is anticipated that this repository will be frequently forked by users, and so it contains minimal information to avoid unnecessary differences.
- Meta-repository containing
- autowarefoundation/autoware_common
- Library/utility type repository containing commonly referenced ROS packages.
- These packages were moved to a separate repository in order to reduce CI execution time
- autowarefoundation/autoware.core
- Main repository for high-quality, stable ROS packages for Autonomous Driving.
- Based on Autoware.Auto and Autoware.Universe.
- autowarefoundation/autoware.universe
- Repository for experimental, cutting-edge ROS packages for Autonomous Driving.
- Autoware Universe was created to make it easier for researchers and developers to extend the functionality of Autoware Core
- autowarefoundation/autoware_launch
- Launch configuration repository containing node configurations and their parameters.
- autowarefoundation/autoware-github-actions
- Contains reusable GitHub Actions workflows used by multiple repositories for CI.
- Utilizes the DRY concept.
- autowarefoundation/autoware-documentation
- Documentation repository for Autoware users and developers.
- Since Autoware Core/Universe has multiple repositories, a central documentation repository is important to make information accessible from a single place.
Using Autoware.AI
If you wish to use Autoware.AI, the previous version of Autoware based on ROS 1, switch to autoware-ai repository. However, be aware that Autoware.AI has reached the end-of-life as of 2022, and we strongly recommend transitioning to Autoware Core/Universe for future use.
Contributing
- There is no formal process to become a contributor - you can comment on any existing issues or make a pull request on any Autoware repository!
- Make sure to follow the Contribution Guidelines.
- Take a look at Autoware's various working groups to gain an understanding of any work in progress and to see how projects are managed.
- If you have any technical questions, you can start a discussion in the Q&A category to request help and confirm if a potential issue is a bug or not.
Useful resources
Top Related Projects
An open autonomous driving platform
openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system in 275+ supported cars.
Autoware - the world's leading open-source software project for autonomous driving
Open-source simulator for autonomous driving research.
A ROS/ROS2 Multi-robot Simulator for Autonomous Vehicles
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot