<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Autonomy &#8211; Welcome to Hang&#039;s Website!</title>
	<atom:link href="https://hangpersonal.com/category/autonomy/feed/" rel="self" type="application/rss+xml" />
	<link>https://hangpersonal.com</link>
	<description>Embedded Systems</description>
	<lastBuildDate>Sat, 10 Jan 2026 21:46:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://hangpersonal.com/wp-content/uploads/2024/10/cropped-HC-32x32.jpg</url>
	<title>Autonomy &#8211; Welcome to Hang&#039;s Website!</title>
	<link>https://hangpersonal.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">252449636</site>	<item>
		<title>Exploratory Review of AI Concepts and Tools</title>
		<link>https://hangpersonal.com/2025/07/23/ai-concepts-tools/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 17:36:40 +0000</pubDate>
				<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Autonomy]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=2990</guid>

					<description><![CDATA[AI Concepts LLM typically refers to Large Language Model in the context of artificial intelligence and machine learning.It is a type of deep learning model trained on massive amounts of text data to understand and generate human-like language. Examples: GPT-4, Claude, Gemini, LLaMA, etc. Transformer is a deep learning architecture introduced by Vaswani et al....]]></description>
										<content:encoded><![CDATA[
<b style="font-family: Arial; font-size: 18px; color: black;"> AI Concepts </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>LLM</b> typically refers to Large Language Model in the context of artificial intelligence and machine learning.It is a type of deep learning model trained on massive amounts of text data to understand and generate human-like language. Examples: GPT-4, Claude, Gemini, LLaMA, etc.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>Transformer</b> is a deep learning architecture introduced by Vaswani et al. in the 2017 paper <a href="https://arxiv.org/abs/1706.03762" style="color: blue;">Attention Is All You Need</a>. It revolutionized how models process sequential data like text — and forms the backbone of models like GPT, BERT, Claude, Gemini, and more. A Transformer uses self-attention to weigh the importance of different words in a sequence — allowing it to understand context, even over long distances.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>Prompt Engineering</b> 🗣️✍️ → 🧠💬 is the practice of crafting effective inputs (prompts) to guide and optimize the behavior of large language models (LLMs) like GPT-4, Claude, or Gemini to get accurate, useful, or creative outputs.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>RAG</b> 🔍📄 ➕ 🧠 = 🧠💬 stands for Retrieval-Augmented Generation — a powerful technique that enhances large language models (LLMs) by giving them access to external information during inference time. LLMs like GPT or Claude are limited to the data they were trained on. RAG solves this by combining: (1) <b>Retrieval</b>: Pulling relevant documents or facts from an external knowledge base (e.g., database, website, PDFs). (2) <b>Augmented Generation</b>: Feeding those retrieved results into the LLM so it can generate more accurate and up-to-date responses.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>Fine-tuning</b> 📊 ➕ 🧠🛠️ = 🎯 is the process of taking a pre-trained large language model (LLM) (like GPT, LLaMA, or Claude) and training it further on <b>custom</b>, <b>domain-specific data</b> to specialize its behavior.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>AI Agent</b> 🤖🧠 is an intelligent system — often powered by a Large Language Model (LLM) — that can <b>autonomously perceive, reason, and take actions</b> to accomplish a goal, often by interacting with tools, environments, or users.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>LangChain</b> 🗣️ → 🔗🧠 → 🔧 → 💬 = AI brain (logic, reasoning, LLM interaction) is an open-source framework that helps developers build LLM-powered applications — especially ones that go beyond simple prompts by enabling <b>reasoning, memory, tool use, and multi-step workflows</b>.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>Multi-modal</b> 🧠 + 🖼️ + 🔊 + 📝 refers to AI systems that can process and understand multiple types of data (modalities) — such as text, images, audio, video, or structured data — at the same time or in combination.
  </div>
</body>
</html>

<br>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>AGI</b> 🧠🤖🌐 (Artificial General Intelligence) is an AI system with the ability to understand, learn, and apply knowledge across a wide range of tasks — just like a human.
  </div>
</body>
</html>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;"> AI Tools </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>Cherry Studio</b> is a powerful, open‑source desktop AI client designed for Windows, macOS, and Linux. It integrates multiple large language models (LLMs)—both cloud-based (like OpenAI, Gemini, Anthropic) and local models via backends such as Ollama or LM Studio—which lets you easily switch between them in conversation. 

🌐 <a href="https://www.cherry-ai.com" style="color: blue;">Website</a>

📘 <a href="https://docs.cherry-ai.com/" style="color: blue;">Docs</a>

🐙 <a href="https://github.com/CherryHQ/cherry-studio" style="color: blue;">GitHub</a>

  </div>
</body>
</html>



<br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
<b>n8n</b> = Automation backbone (triggering, routing, integration) is an open-source AI workflow automation tool that lets you connect various services (APIs, databases, webhooks, etc.) and automate tasks without writing much code—though coding is also supported for flexibility.

🌐 <a href="https://n8n.io" style="color: blue;">Website</a>

📘 <a href="https://docs.n8n.io" style="color: blue;">Docs</a>

🐙 <a href="https://github.com/n8n-io/n8n" style="color: blue;">GitHub</a>

➡️ <a href="https://n8n.io/workflows/" style="color: blue;">Workflows</a>

  </div>
</body>
</html>



<br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2990</post-id>	</item>
		<item>
		<title>Localization &#038; Mapping</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/slam/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Fri, 03 Jan 2025 17:39:23 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[SLAM]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=2500</guid>

					<description><![CDATA[Stay tuned for future updates! Types of Localization Types of Frame and Transformation Reference Where is the car with relation to a static reference frame (local or global map)? Where are static objects with relation to the car? Where are dynamic objects with relation to the car? Types of Localization (1) Global Localization Position relative...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<a href="#type_of_localization" style="color: blue;">Types of Localization</a> 
<br>

<a href="#type_of_frame_transform" style="color: blue;">Types of Frame and Transformation</a> 
<br>

<a href="#reference" style="color: blue;">Reference</a> 
<br>



<br>



<li> Where is the car with relation to a static reference frame (local or global map)?
</li>

<li> Where are static objects with relation to the car?
</li>

<li> Where are dynamic objects with relation to the car?
</li>

<br>



<p id="type_of_localization" style="font-family: Arial; font-size: 18px; color: black;">
<b> Types of Localization </b> 
</p>



<b> (1) Global Localization </b> <br>

<li> Position relative to Earth
</li>

<li> Latitude, Longitude, Altitude/Elevation, Heading
</li>

<b> Sources </b> <br>

<li> GNSS: GPS(USA), BeiDou(China), GLONASS(Russia), Galileo(EU)
</li>

<li> GNSS Corrections: Ground-based RTK (Real-Time Kinematic) corrections, <br>
Satellite-based Subscription Services (TERRASTAR)
</li>

<br>

<b> (2) Absolute Local Localization </b> <br>

<li> Position relative to local landmarks (maps)
</li>

<li> X,Y,Z, orientation (RPY/Quaternion) in map frame
</li>

<li> Algorithms: Perfect Match (PM), Normal Distribution Transform (NDT), <br> Iterative Closest Point (ICP)
</li>

<b> Sources </b> <br>

<li> LiDAR: relative to point-cloud-based map
</li>

<li> Radar: relative to return-based map 
</li>

<li> Camera (with classification and depth sensing): relative to object-based map
</li>

<br>

<b> (3) Relative Local Localization </b> <br>

<li> Position relative to arbitrary origin (starting location)
</li>

<li> X,Y,Z, orientation (RPY/Quaternion) in odometry frame
</li>

<li> Local map is built dynamically, so measurements must be integrated over time
</li>

<li> Algorithms: Simultaneous Localization and Mapping (SLAM), <br>
LiDAR Odometry and Mapping (LOAM)
</li>

<b> Sources </b> <br>

<li> IMU (Inertial Measurement Unit): measures velocity and acceleration in RPY
</li>

<li> Wheel Encoder: measures rotation speed of individual wheels
</li>

<li> Camera (image-based odometry): measures relative movement from frame-to-frame 
</li>



<br>



<p id="type_of_frame_transform" style="font-family: Arial; font-size: 18px; color: black;">
<b> Types of Frame and Transformation</b> 
</p>



<li> Inertial reference frames
</li>

<li> Global or local, fixed or relative
</li>

<li> Measurement system relative to some origin
</li>

<br>

(1) Body frame <br>
(2) Sensor frame <br>
(3) Map frame <br>
(4) Odometry frame <br>
(5) Earth frame <br>



<br>



<b> Coordinate Frames </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>

Shared conventions for coordinate frames provide a specification for developers creating drivers and models for mobile bases. <br>

<br>

(1) <b>base_link</b>: The coordinate frame called base_link is rigidly attached to the mobile robot base. The base_link can be attached to the base in any arbitrary position or orientation; for every hardware platform there will be a different place on the base that provides an obvious point of reference. <br>

<br>

(2) <b>odom</b>: The coordinate frame called odom is a world-fixed frame. The pose of a mobile platform in the odom frame can drift over time, without any bounds. This drift makes the odom frame useless as a long-term global reference. However, the pose of a robot in the odom frame is guaranteed to be continuous, meaning that the pose of a mobile platform in the odom frame always evolves in a smooth way, without discrete jumps. <br> <br>

In a typical setup the odom frame is computed based on an odometry source, such as wheel odometry, visual odometry or an inertial measurement unit. The odom frame is useful as an accurate, short-term local reference, but drift makes it a poor frame for long-term reference. <br>

<br>

(3) <b>map</b>: The coordinate frame called map is a world fixed frame, with its Z-axis pointing upwards. The pose of a mobile platform, relative to the map frame, should not significantly drift over time. The map frame is not continuous, meaning the pose of a mobile platform in the map frame can change in discrete jumps at any time. <br> <br>

In a typical setup, a localization component constantly re-computes the robot pose in the map frame based on sensor observations, therefore eliminating drift, but causing discrete jumps when new sensor information arrives. The map frame is useful as a long-term global reference, but discrete jumps in position estimators make it a poor reference frame for local sensing and acting. <br>

<br>

(4) <b>earth</b>: The coordinate frame called earth is the origin of ECEF (Earth-centered, Earth-fixed coordinate system). This frame is designed to allow the interaction of multiple robots in different map frames. If the application only needs one map the earth coordinate frame is not expected to be present. In the case of running with multiple maps simultaneously the map and odom and base_link frames will need to be customized for each robot. <br> <br>

If the map frame is globally referenced the publisher from earth to map can be a static transform publisher. Otherwise the earth to map transform will usually need to be computed by taking the estimate of the current global position and subtracting the current estimated pose in the map to get the estimated pose of the origin of the map. <br> <br>

In case the map frame&#8217;s absolute positon is unknown at the time of startup, it can remain detached until such time that the global position estimation can be adaquately evaluated. This will operate in the same way that a robot can operate in the odom frame before localization in the map frame is initialized.

    </p>
  </div>
</body>
</html>



<b> Relation between Frames </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">
<p>

The map frame is the parent of odom, and odom is the parent of base_link. Although intuition would say that both map and odom should be attached to base_link, this is not allowed because each frame can only have one parent.

</p>
  </div>
</body>
</html>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="629" height="58" src="https://hangpersonal.com/wp-content/uploads/2025/01/relation_bw_frames.png" alt="" class="wp-image-2679" style="width:450px" srcset="https://hangpersonal.com/wp-content/uploads/2025/01/relation_bw_frames.png 629w, https://hangpersonal.com/wp-content/uploads/2025/01/relation_bw_frames-300x28.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></figure>



<br>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="942" height="891" src="https://hangpersonal.com/wp-content/uploads/2025/01/avp_tf_tree.png" alt="" class="wp-image-2691" srcset="https://hangpersonal.com/wp-content/uploads/2025/01/avp_tf_tree.png 942w, https://hangpersonal.com/wp-content/uploads/2025/01/avp_tf_tree-300x284.png 300w, https://hangpersonal.com/wp-content/uploads/2025/01/avp_tf_tree-768x726.png 768w" sizes="(max-width: 942px) 100vw, 942px" /><figcaption class="wp-element-caption">Example: AVP TF Tree</figcaption></figure>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] AutowareAutoClass2020, Localization <a href="https://gitlab.com/ApexAI/autowareclass2020/-/tree/master/lectures/10_Localization?ref_type=heads" style="color: blue;">Link</a>
<br>

[2] Frames for Self-Driving Cars, Coordinate Frames for Mobile Platforms <a href="https://ros.org/reps/rep-0105.html" style="color: blue;">Link</a>
<br>

[3] AVP 2020 Demo Localization Design <a href="https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/avp-localization-design.html" style="color: blue;">Link</a>
<br>

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2500</post-id>	</item>
		<item>
		<title>Vehicle Interface &#038; PACMod2</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/vehicle-interface/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 08 Dec 2024 03:37:22 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Control]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=2125</guid>

					<description><![CDATA[Stay tuned for future updates! The Vehicle Interface component provides an interface between Autoware and a vehicle that passes control signals to the vehicle’s drive-by-wire system and receives vehicle information that is passed back to Autoware. Vehicle Lateral Interface Longitudinal Interface Polaris GEM Vehicle steering angle/rate accel/brake pedal position Lexus steering angle accel/brake pedal position...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>
The Vehicle Interface component provides an interface between Autoware and a vehicle that passes control signals to the vehicle’s drive-by-wire system and receives vehicle information that is passed back to Autoware.
    </p>
  </div>
</body>
</html>



<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        table {
            width: 100%;
            //border-collapse: collapse;
            font-size: 16px; /* Default font size for table */
        }
        th, td {
            border: 1px solid #000;
            padding: 4px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
            font-size: 16px !important;  
            font-weight: bold;  
            color: #000 !important;       
        }
        /* Set the width of the first column */
        th:first-child, td:first-child {
            width: 150px; 
        }
    </style>
</head>
<body>

    <table>

        <tr>
            <th>Vehicle</th>
            <th>Lateral Interface</th>
            <th>Longitudinal Interface</th>
        </tr>

        <tr>
            <td>Polaris GEM Vehicle</td>
            <td>steering angle/rate</td>
            <td>accel/brake pedal position</td>
        </tr>

        <tr>
            <td>Lexus</td>
            <td>steering angle</td>
            <td>accel/brake pedal position</td>
        </tr>

    </table>

</body>
</html>



<b>Note</b>: Acceleration lookup table conversion for longitudinal.
<br><br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Input Topics: From AutowareAuto
</b> <br>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="329" src="https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware-1024x329.png" alt="" class="wp-image-2192" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware-1024x329.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware-300x96.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware-768x247.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware-1536x493.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_autoware.png 1841w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Input Topics: From PACMod2
</b> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="711" src="https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_pacmod2-1024x711.png" alt="" class="wp-image-2211" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_pacmod2-1024x711.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_pacmod2-300x208.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_pacmod2-768x533.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_from_pacmod2.png 1066w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Output Topics: To AutowareAuto
</b> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="338" src="https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware-1024x338.png" alt="" class="wp-image-2196" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware-1024x338.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware-300x99.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware-768x254.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware-1536x507.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_autoware.png 1790w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Output Topics: To PACMod2
</b> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="316" src="https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_pacmod2-1024x316.png" alt="" class="wp-image-2207" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_pacmod2-1024x316.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_pacmod2-300x93.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_pacmod2-768x237.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_to_pacmod2.png 1131w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
ROS Parameters
</b> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="249" src="https://hangpersonal.com/wp-content/uploads/2024/12/interface_pacmod2_parameters-1024x249.png" alt="" class="wp-image-2214" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/interface_pacmod2_parameters-1024x249.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_pacmod2_parameters-300x73.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_pacmod2_parameters-768x187.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/interface_pacmod2_parameters.png 1029w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Architecture
</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>

<li>
A Raw Vehicle Command Converter component that will pass through vehicle commands from the Control component if velocity/acceleration control is supported by the drive-by-wire system. Otherwise, the Control commands will be modified according to the control method (eg: converting a target acceleration from the Control component to a vehicle specific accel/brake pedal value through the use of an acceleration map)
</li>
<br>
<li>
A Vehicle Interface component (vehicle specific) that acts as an interface between Autoware and a vehicle to communicate control signals and to obtain information about the vehicle (steer output, tyre angle etc)
</li>
<br>
Each component contains static nodes of Autoware, while each module can be dynamically loaded and unloaded (corresponding to C++ classes). The mechanism of the Vehicle Interface component is depicted by the following figures:
    </p>
  </div>
</body>
</html>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="861" height="883" src="https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_architecture.png" alt="" class="wp-image-2144" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_architecture.png 861w, https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_architecture-293x300.png 293w, https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_architecture-768x788.png 768w" sizes="auto, (max-width: 861px) 100vw, 861px" /></figure>



<br>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="841" height="649" src="https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_overview.png" alt="" class="wp-image-2148" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_overview.png 841w, https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_overview-300x232.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/vehicle_interface_overview-768x593.png 768w" sizes="auto, (max-width: 841px) 100vw, 841px" /></figure>



<b style="font-family: Arial; font-size: 18px; color: black;">
Features
</b> <br> <br>
(1) Converting Autoware control commands to vehicle specific command
<br>
(2) Converting vehicle specific status information to Autoware status message
<br>
(3) Disengage autonomous driving via manual intervention
<br>
(4) Optional controls: turn indicator, hazard lights, etc
<br>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Vehicle Interface Design, <a href="https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/vehicle/" style="color: blue;">Link 1</a>, <a href="https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/vehicle-interface/" style="color: blue;">Link 2</a>

<br>

[2] PACMod3 Interface for AutowareAuto, <a href="https://github.com/tier4/pacmod_interface/tree/main/pacmod_interface" style="color: blue;">Link</a>

<br>

[3] PACMod2 Driver &#038; PACMod2 Message, <a href="https://github.com/astuff/pacmod2/tree/ros2_master" style="color: blue;">Link 1</a>, <a href="https://github.com/astuff/pacmod2_msgs" style="color: blue;">Link 2</a>, 

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2125</post-id>	</item>
		<item>
		<title>Sensing &#038; Data Preprocessing</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/sensing/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 08 Dec 2024 03:21:46 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=2109</guid>

					<description><![CDATA[Stay tuned for future updates! LiDAR Preprocessing High-level Architecture Input Types LiDAR Preprocessing A minimum amount of information is needed to produce correct results. Preprocessing provides sufficient statistics for further algorithms. Remove noisy data from problematic areas Range &#038; angle based filtering Ground filtering Remove redundant data Voxel grids or other downsampling Produce a single...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<a href="#lidar_preprocssing" style="color: blue;">LiDAR Preprocessing</a> 
<br>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
High-level Architecture
</b> <br> <br>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="774" height="317" src="https://hangpersonal.com/wp-content/uploads/2024/12/sensing_architecture.png" alt="" class="wp-image-2093" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/sensing_architecture.png 774w, https://hangpersonal.com/wp-content/uploads/2024/12/sensing_architecture-300x123.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/sensing_architecture-768x315.png 768w" sizes="auto, (max-width: 774px) 100vw, 774px" /></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Input Types
</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="386" src="https://hangpersonal.com/wp-content/uploads/2024/12/sensing_messages-1024x386.png" alt="" class="wp-image-2105" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/sensing_messages-1024x386.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/sensing_messages-300x113.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/sensing_messages-768x290.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/sensing_messages.png 1103w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<p id="lidar_preprocssing" style="font-family: Arial; font-size: 18px; color: black;">
<b> LiDAR Preprocessing </b> 
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>
A minimum amount of information is needed to produce correct results. Preprocessing provides sufficient statistics for further algorithms.
    </p>
  </div>
</body>
</html>



<li>Remove noisy data from problematic areas
<ul>

<li>Range &#038; angle based filtering</li>
<li>Ground filtering</li>

</ul>
</li>

<li>Remove redundant data
<ul>

<li>Voxel grids or other downsampling</li>

</ul>
</li>

<li>Produce a single consistent representation
<ul>

<li>Static transforms into common frame</li>
<li>Fuse into a single pointcloud</li>
<li>Ego-motion is required for high speed use cases to correct for slewing </li>

</ul>
</li>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Sensing Component Design, <a href="https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/sensing/" style="color: blue;">Link</a>
  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2109</post-id>	</item>
		<item>
		<title>Comparison of ROS1 and ROS2</title>
		<link>https://hangpersonal.com/2024/12/07/comparison-of-ros1-and-ros2/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sat, 07 Dec 2024 21:11:24 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=2025</guid>

					<description><![CDATA[ROS1 vs ROS2 Architecture ROS2 is well-suited for a variety of applications, including navigation, security, embedded systems, real-time operations, safety-critical tasks, and robotic manipulation. Data Distribution Service (DDS) for ROS2 (1) An industry-standard communication system, a networking middleware (2) Data-Centric Publish-Subscribe (DCPS) system (3) Real-time machine-to-machine (middleware communication) (4) Uses Real-Time Publish-Subscribe (RTPS) pattern for...]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="963" height="389" src="https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2.png" alt="" class="wp-image-2081" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2.png 963w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2-300x121.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2-768x310.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>



<b> ROS1 vs ROS2 Architecture </b>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="571" src="https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-1024x571.png" alt="" class="wp-image-2058" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-1024x571.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-300x167.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-768x428.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-1536x857.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/12/ros1_ros2_architecture-2048x1143.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Reference: Exploring the performance of ROS2</figcaption></figure>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>
<b>ROS2</b> is well-suited for a variety of applications, including navigation, security, embedded systems, real-time operations, safety-critical tasks, and robotic manipulation.
    </p>
  </div>
</body>
</html>



<b> Data Distribution Service (DDS) for ROS2 </b> <br>
(1) An industry-standard communication system, a networking middleware
<br>
(2) Data-Centric Publish-Subscribe (DCPS) system
<br>
(3) Real-time machine-to-machine (middleware communication)
<br>
(4) Uses Real-Time Publish-Subscribe (RTPS) pattern for sending and receiving data, events, and commands among the nodes
<br>
(5) DDS allows the user to specify quality of service (QoS) parameters (QoS Profiles)
<br>



<br>



<b> Data Distribution Service (DDS) Design Goals </b> <br>
(1) Scalability
<br>
(2) Real-time
<br>
(3) Dependability
<br>
(4) High performance
<br> 
(5) Interoperable data exchange (discovery, serialization, transport)
<br>



<br>



<b> ROS2 Discovery </b> <br>
(1) DDS replaces the ROS master discovery system
<br>
(2) DDS API provides information on node topics, services, etc
<br>
(3) Users are prevented from direct access to DDS (hidden behind ROS API)
<br>
(4) Fully distributed discovery process (no single point of failure, fault tolerance)
<br>



<br>



<b> ROS2 Messages </b> <br>
(1) ROS2 maintains the same message definitions as in ROS1
<br>
(2) ROS1 *.msg files are converted into *.idl files to be used by DDS transport layer
<br>
(3) Experiments show that cost of message conversion is non-significant as compared to cost of serialization
<br>



<br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2025</post-id>	</item>
		<item>
		<title>Vehicle Accel/Brake Calibration</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/vehicle-accel-brake-calibration/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 17 Nov 2024 19:50:07 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Control]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=1958</guid>

					<description><![CDATA[Stay tuned for future updates! Acceleration and Brake Map Calibration Raw Vehicle Command Converter Steer Offset Estimator Reference Acceleration and Brake Calibration (Polaris GEM Vehicles) accel_brake_map_calibrator Raw Vehicle Command Converter (Polaris GEM Vehicles) Steer Offset Estimator (Polaris GEM Vehicles) Reference [1] Autoware Universe Documentation , Link [2] Lochrie, Gabrielle, et al. &#8220;Anti-windup recursive least squares...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<li> <a href="#accel_brake_map_calibrator" style="color: blue;"> Acceleration and Brake Map Calibration</a> 
</li>

<li> <a href="#raw_vehicle_cmd_converter" style="color: blue;">Raw Vehicle Command Converter</a> 
</li>

<li> <a href="#steer_offset_estimator" style="color: blue;">Steer Offset Estimator</a> 
</li>

<li> <a href="#reference" style="color: blue;">Reference</a> 
</li>



<br>



<p id="accel_brake_map_calibrator"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Acceleration and Brake Calibration (Polaris GEM Vehicles)
</b>
</p>



<i>accel_brake_map_calibrator</i>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/12/accel_brake_calibrator_lookup_table.mp4" playsinline></video></figure>



<br>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="623" height="441" src="https://hangpersonal.com/wp-content/uploads/2024/12/accel_brake_calibraion_result.png" alt="" class="wp-image-2363" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/accel_brake_calibraion_result.png 623w, https://hangpersonal.com/wp-content/uploads/2024/12/accel_brake_calibraion_result-300x212.png 300w" sizes="auto, (max-width: 623px) 100vw, 623px" /></figure>



<br>



<p id="raw_vehicle_cmd_converter"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Raw Vehicle Command Converter (Polaris GEM Vehicles)
</b>
</p>



<br>



<p id="steer_offset_estimator"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Steer Offset Estimator (Polaris GEM Vehicles)
</b>
</p>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Autoware Universe Documentation
, <a href="https://autowarefoundation.github.io/autoware.universe/main/vehicle/autoware_accel_brake_map_calibrator/" style="color: blue;">Link</a>
<br>

[2] Lochrie, Gabrielle, et al. &#8220;Anti-windup recursive least squares method for adaptive lookup tables with application to automotive powertrain control systems.&#8221; IFAC-PapersOnLine 54.20 (2021): 840-845.
<br>

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1958</post-id>	</item>
		<item>
		<title>Dynamics &#038; Control</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/control/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 13 Oct 2024 00:14:09 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Control]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=898</guid>

					<description><![CDATA[Stay tuned for future updates! Pure Pursuit Lateral Controller (Kinematic Bicycle Model) Stanley Lateral Controller (Kinematic/Dynamic Bicycle Model) LQR Tracker with Feed Forward Term (Dynamic Bicycle Model) Model Predictive Control (Dynamic Bicycle Model) Coming more, stay tuned for future updates! Reference Vehicle Bicycle Model Kinematic Models: Kinematic models are simplifications of dynamic models that ignore...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<li> <a href="#pp" style="color: blue;">Pure Pursuit Lateral Controller (Kinematic Bicycle Model)</a> 
</li>

<li> <a href="#stanley" style="color: blue;">Stanley Lateral Controller (Kinematic/Dynamic Bicycle Model)</a> 
</li>

<li> <a href="#lqr" style="color: blue;">LQR Tracker with Feed Forward Term (Dynamic Bicycle Model)</a> 
</li>

<li> <a href="#mpc" style="color: blue;">Model Predictive Control (Dynamic Bicycle Model)</a> 
</li>

<li> <span style="color: red;">Coming more, stay tuned for future updates!</span>
</li>

<li> <a href="#reference" style="color: blue;">Reference</a> 
</li>



<br>



<b>Vehicle Bicycle Model</b> <br> <br>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="628" src="https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model-1024x628.png" alt="" class="wp-image-1741" style="width:550px" srcset="https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model-1024x628.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model-300x184.png 300w, https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model-768x471.png 768w, https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model-1536x943.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/11/bicycle_model.png 1778w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>
<b>Kinematic Models</b>: Kinematic models are simplifications of dynamic models that ignore tire forces, gravity, and mass. This simplification reduces the accuracy of the models, but it also makes them more tractable. At low and moderate speeds, kinematic models often approximate the actual vehicle dynamics. 
<br> 
<br>
<b>Dynamic Models</b>: Dynamic models aim to embody the actual vehicle dynamics as closely as possible. They might encompass tire forces, longitudinal and lateral forces, inertia, gravity, air resistance, drag, mass, and the geometry of the vehicle. Not all dynamic models are created equal. Some may consider more of these factors than others. Advanced dynamic models even take internal vehicle forces into account. For example, how responsive the chassis suspension is.
<br>
<br>
<b>Reference Trajectory</b>: The reference trajectory is typically passed to the control block as a polynomial. This polynomial is usually 3rd order, since third order polynomials will fit trajectories for most roads. We need to fit 3rd order polynomials to waypoints (x, y) in C++ using Eigen, and evaluate the output. 
    </p>
  </div>
</body>
</html>



<p id="pp"> 
<b>Pure Pursuit Lateral Controller (Kinematic Bicycle Model)</b>
</p>



<b>Pure Pursuit Geometry</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="326" src="https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-1024x326.png" alt="" class="wp-image-1775" srcset="https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-1024x326.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-300x96.png 300w, https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-768x245.png 768w, https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-1536x490.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/11/pp_bicycle_model-2048x653.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>
\(\theta\): heading of vehicle or yaw angle of vehicle
<br>
\(\dot{\theta}\): rotation rate of vehicle or yaw rate of vehicle
<br>
\(\delta_f\): front steering angle
<br>
\(L\): wheelbase
<br>
\(l_d\): look-ahead distance
<br>
\(\alpha\): angle between the vehicle&#8217;s heading vector and the look-ahead vector
<br>
\(e_{l_d}\): crosstrack error, \(e_{l_d}(t) = l_d sin(\alpha(t))\)
<br>
\(\kappa\): path curvature
<br>
\(v_x\): vehicle speed in the direction of its x-axis
<br>
\(k_{dd}\): gain of pure pursuit controller, \(l_d = k_{dd}v_x(t)\)
</p>
  
</body>
</html>



<b>Recap: Pure Pursuit Control Law</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>
$$\delta_f(t) = tan^{-1}(\frac{2Lsin(\alpha(t))}{l_d}) = tan^{-1}(\frac{2Lsin(\alpha(t))}{k_{dd}v_x(t)})$$
</p>

<p>
$$\delta_f(t) = tan^{-1}(\frac{2L}{l^2_d}e_{l_d}(t))$$
</p>
  
</body>
</html>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">
    <p>
Pure pursuit controller is a <span style="color: red;">proportional controller</span> of the front steering angle \(\delta_f\) operating on a crosstrack error \(e_{l_d}\) with some look-ahead distance \(l_d\) in front of the vehicle and having a gain of \(2L/l^2_d\).
    </p>
  </div>
</body>
</html>



<b> Characteristic </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

<li>A short look-ahead distance provides more accurate tracking while a large \(l_d\) provides smoother tracking
</li> <br>

<li>\(k_{dd}\) value that is too small will cause instability and a \(k_{dd}\) value that is too large will cause poor tracking
</li> <br>

<li> High level of robustness: e.g. good handling on the discontinuity in the path
</li>

  </div>
</body>
</html>



<br>



<b> Demo </b> <br> <br>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/10/e4_path_tracking.mp4" playsinline></video><figcaption class="wp-element-caption">Polaris GEM e4 – Pure Pursuit Path Tracker based on RTK GNSS/INS Localization</figcaption></figure>



<br>



<p id="stanley"> 
<b>Stanley Lateral Controller (Kinematic/Dynamic Bicycle Model)</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

The Stanley controller uses the center of the front axle as a reference point. It looks at the error in heading and position relative to the closest point on the reference path. It defines an intuitive steering law to correct heading and position errors and obey max steering angle bounds.

  </div>
</body>
</html>



<br>



<b>Stanley Controller Geometry</b> <br> <br>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="975" src="https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry-1024x975.png" alt="" class="wp-image-1826" style="width:350px" srcset="https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry-1024x975.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry-300x286.png 300w, https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry-768x731.png 768w, https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry-1536x1463.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/11/stanley_geometry.png 1993w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>

\(\theta\): heading of vehicle or yaw angle of vehicle
<br>

\(\dot{\theta}\): rotation rate of vehicle or yaw rate of vehicle
<br>

\(\theta_{e}\): heading error
<br>

\(\delta_f\): front steering angle, \(\delta_f \in [\delta_{min}, \delta_{max}]\)
<br>

\(L\): wheelbase
<br>

\(e\): crosstrack error
<br>

\(k\): controller gain
<br>

</p>
  
</body>
</html>



<b>Recap: Stanley Control Law</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

$$\delta_f(t) = \theta_e(t) + \delta_e(t) = \theta_e(t) + tan^{-1}(\frac{e(t))}{d(t)}) = \theta_e(t) + tan^{-1}(\frac{ke(t))}{v_f(t)})$$

  </div>
</body>
</html>



<b>Recap: Stanley Controller Error Dynamics</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

$$\dot e(t) = -\frac{kv_f(t)e(t)}{\sqrt{v_f^2(t) + (ke(t))^2}} = -\frac{ke(t)}{\sqrt{1+(\frac{ke(t)}{v_f(t)})^2}}$$

For small cross track error, it leads to exponential decay characteristics <br>

$$\dot e(t) \approx -k e(t) => e(t) = e(0)e^{-kt}$$

The error decays exponentially to 0. The decay rate is independent of vehicle speed and \(k\) is positive.

  </div>
</body>
</html>



<br>



<b>Recap: Stanley Controller Adjustment</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

$$\delta_f(t) = \theta_e(t) + \delta_e(t) = \theta_e(t) + tan^{-1}(\frac{ke(t))}{k_s + v_f(t)})$$

<li>Inverse speed can cause numerical instability
</li>

<li>Add positive softening constant to controller (\(k_s\) is tuned in field)
</li>

  </div>
</body>
</html>



<br>



<b>Recap: Stanley Controller Summary</b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

<li>Similar to the pure pursuit tracker, steady-state errors in curves at moderate speeds become significant.
</li> <br>

<li>Unlike pure pursuit, a well-tuned Stanley tracker will not cut corners, but rather overshoot turns. This effect can be attributed to not having a look-ahead.
</li> <br>

<li>The Stanley tracker can be over-tuned to a specific course in a similar manner because the only way it can overcome dynamic effects is with a high gain that may lead to instability on other paths.
</li> 

  </div>
</body>
</html>



<br>



<b> Demo </b> <br> <br>



<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        #image-frame1 {
            width: 650px;
            //height: 500px;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        #image-frame1 img {
            max-width: 100%;
            max-height: 100%;
            display: none;
        }

        #image-frame1 img.active1 {
            display: block;
        }

        .button-container1 {
            display: flex;
            justify-content: flex-start; /* Align buttons to the left */
            margin-top: 15px;
        }

        .button-container1 button {
            padding: 10px 20px;
            margin-right: 10px;
            cursor: pointer;
            font-size: 16px;
        }
    </style>
</head>
<body>

<div class="image-frame1" id="image-frame1">
    <img decoding="async" id="stanley_image1" src="https://hangpersonal.com/wp-content/uploads/2024/10/rtk-stanley-controller1.png" class="active1" alt="Frame 1 Image 1">

    <img decoding="async" id="stanley_image2" src="https://hangpersonal.com/wp-content/uploads/2024/10/rtk-stanley-controller2.png" alt="Frame 1 Image 2">
</div>

<div class="button-container1">
    <button onclick="showImageFrame1('stanley_image1')">Stanley Controller 1</button>
    <button onclick="showImageFrame1('stanley_image2')">Stanley Controller 2</button>
</div>

<script>
    function showImageFrame1(imageId) {
        // Hide all images
        document.getElementById('stanley_image1').classList.remove('active1');
        document.getElementById('stanley_image2').classList.remove('active1');
        // Show the selected image
        document.getElementById(imageId).classList.add('active1');
    }
</script>

</body>
</html>



<br>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/12/Stanley_tracker_kinematic.mp4" playsinline></video><figcaption class="wp-element-caption">Polaris GEM e4 – Stanley Kinematic Tracker based on RTK GNSS/INS Localization</figcaption></figure>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/12/Stanley_tracker_dynamic.mp4" playsinline></video><figcaption class="wp-element-caption">Polaris GEM e4 – Stanley Dynamic Tracker based on RTK GNSS/INS Localization</figcaption></figure>



<br>



<p id="lqr"> 
<b>LQR Tracker with Feed Forward Term (Dynamic Bicycle Model)</b>
</p>



<b>Dynamic Bicycle Model</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="470" src="https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-1024x470.png" alt="" class="wp-image-1892" srcset="https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-1024x470.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-300x138.png 300w, https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-768x352.png 768w, https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-1536x704.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/11/lqr_bdm-2048x939.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>

\(\theta\): heading of vehicle or yaw angle of vehicle
<br>

\(v\) and \(a\): velocity of the center of mass and acceleration of center of mass
<br>

\(v_x\) and \(v_y\): longitudinal velocity and lateral velocity
<br>

\(a_x\) and \(a_y\): longitudinal acceleration and lateral acceleration, \(a_y = {v_x^2}/{R} = \kappa v_x^2\)
<br>

\(v_f\) and \(v_r\): velocity of front wheel and velocity of rear wheel
<br>

\(F_{yf}\) and \(F_{yr}\): lateral force of front/rear tire, \(F_{yf}=[2]C_{\alpha f}\alpha_f\), \(F_{yr}=[2]C_{\alpha r}\alpha_r\)
<br>

\(\alpha_f\) and \(\alpha_r\): slip angle of front/rear tire
<br>

\(C_{\alpha f}\) and \(C_{\alpha r}\): cornering stiffness of front/rear tire
<br>

\(l_f\) and \(l_r\): distance from front/rear wheel to the center of mass
<br>

\(\theta_{vf}\) and \(\theta_{vr}\): velocity angle of front/rear tire
<br>

\(\theta\): yaw angle in absolute coordinate 
<br>

\(\beta\): slip angle of the center of mass in vehicle body coordinate
<br>

\(\theta+\beta\): heading angle in absolute coordinate 
<br>

\(e_d\): lateral error, \(e_d\) is positive when road is on the left side of the vehicle
<br>

</p>
  
</body>
</html>



<b>Recap: Bicycle Dynamic Model</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>

$$\sum F_y = m a_y = F_{yf}cos(\delta_f) + F_{yr}$$

$$\sum M = I \ddot{\theta} = F_{yf}cos(\delta_f) l_f &#8211; F_{yr} l_r$$

$$a_y = \frac{d^2y}{dt^2} = \ddot{y} + v_x\frac{v_x}{R}= \ddot{y} + v_x \dot{\theta} = \dot{v_y} + v_x \dot{\theta}$$

$$ma_y = C_{\alpha f}\alpha_f + C_{\alpha r}\alpha_r = m(\dot{v_y} + v_x \dot{\theta}) = C_{\alpha f} (\delta_f &#8211; \frac{\dot{\theta}l_f+v_y}{v_x}) + C_{\alpha r} (\frac{\dot{\theta}l_r-v_y}{v_x})$$

$$\dot{v_y} = \frac{C_{\alpha f}}{m} \delta_f + (\frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{m v_x} &#8211; v_x)\dot{\theta} &#8211; \frac{C_{\alpha f} + C_{\alpha r}}{m v_x} v_y$$

$$\ddot{\theta} = \frac{C_{\alpha f} l_f}{I} \delta_f &#8211; \frac{C_{\alpha f} l_f^2 + C_{\alpha r} l_r^2}{I v_x} \dot{\theta} + \frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{I v_x} v_y$$

</p>
  
</body>
</html>



<b>Recap: Linearized Bicycle Dynamic Model</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>

$$
\begin{bmatrix}
\ddot{y} \\
\ddot{\theta} \\
\end{bmatrix}
=
\begin{bmatrix}
&#8211; \frac{C_{\alpha f} + C_{\alpha r}}{m v_x} &#038; \frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{m v_x} &#8211; {v_x} \\
\frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{I v_x} &#038; &#8211; \frac{C_{\alpha f} l_f^2 + C_{\alpha r} l_r^2}{I v_x} \\
\end{bmatrix}

\begin{bmatrix}
\dot{y} \\
\dot{\theta} \\
\end{bmatrix}
%
+ 
%
\begin{bmatrix}
\frac{C_{\alpha f}}{m} \\
\frac{C_{\alpha f} l_f}{I} \\
\end{bmatrix}
%
\delta_f
$$

$$
\begin{bmatrix}
\dot{e}_d \\
\ddot{e}_d \\
\dot{e}_{\theta} \\
\ddot{e}_{\theta} \\
\end{bmatrix}
=
\begin{bmatrix}
{0} &#038; {1} &#038; {0} &#038; {0} \\
{0} &#038; &#8211; \frac{C_{\alpha f} + C_{\alpha r}}{m v_x} &#038; \frac{C_{\alpha f} + C_{\alpha r}}{m} &#038; \frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{m v_x} \\
{0} &#038; {0} &#038; {0} &#038; {1} \\
{0} &#038; \frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{I v_x} &#038; -\frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{I} &#038; &#8211; \frac{C_{\alpha f} l_f^2 + C_{\alpha r} l_r^2}{I v_x} \\
\end{bmatrix}

\begin{bmatrix}
{e}_d \\
\dot{e}_d \\
{e}_{\theta} \\
\dot{e}_{\theta} \\
\end{bmatrix}
$$

$$
+ 
%
\begin{bmatrix}
{0} \\
\frac{C_{\alpha f}}{m}  \\
{0} \\
\frac{C_{\alpha f} l_f}{I} \\
\end{bmatrix}
%
\delta_f
%
+ 
%
\begin{bmatrix}
{0} \\
\frac{C_{\alpha r} l_r &#8211; C_{\alpha f} l_f}{m v_x} &#8211; {v_x} \\
{0}  \\
&#8211; \frac{C_{\alpha f} l_f^2 + C_{\alpha r} l_r^2}{I v_x} \\
\end{bmatrix}
%
\dot{\theta}_r
$$

$$
\dot{X} = AX + B_1 \delta_f + B_2 \dot{\theta}_r \quad where \quad 
X = 
\begin{bmatrix}
{e}_d \\
\dot{e}_d \\
{e}_{\theta} \\
\dot{e}_{\theta} \\
\end{bmatrix}
$$

</p>
  
</body>
</html>



<b>Recap: Discrete-time LQR</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>

$$
J = \sum_{k=0}^{\infty} X^T[k] Q X[k] + u[k]^T R u[k] \quad w.r.t. \quad x[k+1] = A_dx[k]+B_du[k]
$$

where \(A_d = (I &#8211; \frac{Adt}{2})^{-1}(I + \frac{Adt}{2})\) and \(B_d = Bdt\)
<br> <br>

<b><i>Riccati Equation</i></b> 
<br>

$$
P_{k-1} = Q + A_d^TP_kA_d-A_d^TP_kB_d(R+B_d^TP_kB_d)^{-1}B_d^TP_kA_d
$$

<b><i>Feed Forward Term</i></b> 
<br> 

The state space model for the closed-loop system under state feedback <br>

$$
\dot{X} = AX + B_1 \delta_f + B_2 \dot{\theta}_r = (A- B_1)K X + B_2 \dot{\theta}_r
$$

The closed-loop system with feedforward term \(\delta_{ff}\) can be written as

$$
\dot{X} = AX + B_1 \delta_f + B_2 \dot{\theta}_r = (A- B_1)K X + B_1\delta_{ff} + B_2 \dot{\theta}_r 
$$

where \(u = \delta_f = -K_{1\times4}X_{4\times1} + \delta_{ff}\)

</p>
  
</body>
</html>



<b>Pretest demo</b> <br> 
Lateral Control &#8211; LQR, Longitudinal Control &#8211; PID <br>



<figure class="wp-block-video"><video height="1020" style="aspect-ratio: 1918 / 1020;" width="1918" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/10/e4_sim_lqr_pid.mp4" playsinline></video></figure>



<br>



<p id="mpc"> 
<b>Model Predictive Control (Dynamic Bicycle Model)</b>
</p>



<b>Pretest demo</b> <br> 
Lateral Control &#038; Longitudinal Control &#8211; MPC <br>



<br>



<p id="reference"> 
<b>Reference</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Conlter, R. Craig. &#8220;Implementation of the Pure Pursuit Path’hcking Algorithm.&#8221; Camegie Mellon University (1992). 
<br>
[2] Hoffmann, Gabriel M., et al. &#8220;Autonomous automobile trajectory tracking for off-road driving: Controller design, experimental validation and racing.&#8221; 2007 American control conference. IEEE, 2007.
<br>
[3] Snider, Jarrod M. &#8220;Automatic steering methods for autonomous automobile path tracking.&#8221; Robotics Institute, Pittsburgh, PA, Tech. Rep. CMU-RITR-09-08 (2009).
<br>

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">898</post-id>	</item>
		<item>
		<title>Perception</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/perception/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sat, 12 Oct 2024 23:58:14 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Perception]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=880</guid>

					<description><![CDATA[Stay tuned for future updates! Camera Perception Radar Perception LiDAR Perception Sensor Fusion with LiDAR &#038; Camera AutowareAuto High-level Architecture of Perception Component Camera Perception (Temporary Demo, AutowareClass2020) Recap: Camera Model \(D\): aperture diameter \(f\): focal length \(N\): aperture f-number (e.g., f/2.8, f/4) $$D = \frac{f}{N}$$ A larger aperture diameter (smaller N) allows more light...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future updates! </b> <br> <br>



<a href="#camera_perception" style="color: blue;">Camera Perception</a> 
<br>

<a href="#radar_perception" style="color: blue;">Radar Perception</a> 
<br>

<a href="#lidar_perception" style="color: blue;">LiDAR Perception</a> 
<br>

<a href="#lidar_camera" style="color: blue;">Sensor Fusion with LiDAR &#038; Camera</a> 
<br>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
AutowareAuto High-level Architecture of Perception Component
</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="754" src="https://hangpersonal.com/wp-content/uploads/2024/12/perception_architecture-1024x754.png" alt="" class="wp-image-2184" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/perception_architecture-1024x754.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/perception_architecture-300x221.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/perception_architecture-768x565.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/perception_architecture.png 1159w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<p id="camera_perception" style="font-family: Arial; font-size: 18px; color: black;">
<b> Camera Perception (Temporary Demo, AutowareClass2020) </b> 
</p>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/12/camera_perception_autoware_auto_class.mp4" playsinline></video></figure>



<br>



<b>Recap: Camera Model</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<br>

<p>
\(D\): aperture diameter
<br>
\(f\): focal length
<br>
\(N\): aperture f-number (e.g., f/2.8, f/4)
<br>
</p>

<p>
$$D = \frac{f}{N}$$
</p>

</body>
</html>



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
</head>
<body>
  <div class="justify-text">
    <p>
A larger aperture diameter (smaller N) allows more light to enter the lens, affecting exposure and depth of field (DoF, not FoV directly). A smaller \(N\) (larger aperture) leads to a shallow DoF.<br>
    </p>
  </div>
</body>
</html>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<p>
$$FoV = 2arctan(\frac{sensor\_dimension}{2f})$$
</p>

A longer focal length reduces the field of view (FoV).
<br>

</body>
</html>



<br>



<b>Recap: Camera Matrix</b> <br>



<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
  </script>
</head>
<body>

<br>

<p>
\(K\): intrinsic camera parameters
<br>
\([R|t]\): extrinsic camera parameters
<br>
\(s\): extrinsic camera parameters
<br>
\(f_x,f_y\): focal lengths of the camera in the x- and y-direction in pixels
<br>
\(c_x,c_y\): principal point coordinates, \(c_x\) and \(c_y\) are close to the center of the image
<br>
\(p_i\): 2D image point in homogeneous coordinates \([u, v, 1]^T\)
<br>
\(p_w\): 3D image point in the world in homogeneous coordinates \([x, y, z, 1]^T\)
<br>
</p>

<p>
$$P = K[R|t] = \begin{bmatrix}
f_x &#038; s &#038; c_x \\
0 &#038; f_y &#038; c_y \\
0 &#038; 0 &#038; 1
\end{bmatrix}[R|t]$$
</p>

<p>
$$p_i = \begin{bmatrix}
u \\
v \\
1
\end{bmatrix} = Pp_w = K[R|t]p_w = \begin{bmatrix}
f_x &#038; s &#038; c_x \\
0 &#038; f_y &#038; c_y \\
0 &#038; 0 &#038; 1
\end{bmatrix} \begin{bmatrix}
r_{11} &#038; r_{12} &#038; r_{13} &#038; t_x \\
r_{21} &#038; r_{22} &#038; r_{23} &#038; t_y  \\
r_{31} &#038; r_{32} &#038; r_{33} &#038; t_z 
\end{bmatrix}  \begin{bmatrix}
x \\
y \\
z \\
1
\end{bmatrix}$$
</p>

</body>
</html>



<b>Recap: Camera Len Distortion</b> <br> <br>

<li> Barrel distortion </li>
<li> Pincushion distortion </li>
<li> Mustache (complex) distortion </li>
<li> Radial distortion </li>
<li> Tangential (decentering) distortion </li>



<br>



<p id="radar_perception" style="font-family: Arial; font-size: 18px; color: black;">
<b> Radar Perception (Temporary Demo, AutowareClass2020) </b> 
</p>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/12/radar_perception_autoware_auto_class.mp4" playsinline></video></figure>



<br>



<p class="wp-block-paragraph">Radar can measure the <strong>distance</strong>, <strong>angle</strong>, <strong>velocity</strong>, and <strong>cross-section</strong> to/of objects to detect and classify different objects.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="955" height="356" src="https://hangpersonal.com/wp-content/uploads/2025/01/radar_srr_mrr_lrr.jpg" alt="" class="wp-image-2519" srcset="https://hangpersonal.com/wp-content/uploads/2025/01/radar_srr_mrr_lrr.jpg 955w, https://hangpersonal.com/wp-content/uploads/2025/01/radar_srr_mrr_lrr-300x112.jpg 300w, https://hangpersonal.com/wp-content/uploads/2025/01/radar_srr_mrr_lrr-768x286.jpg 768w" sizes="auto, (max-width: 955px) 100vw, 955px" /><figcaption class="wp-element-caption">Reference: <a href="https://www.renesas.com/en/blogs/why-do-we-need-radar">https://www.renesas.com/en/blogs/why-do-we-need-radar</a></figcaption></figure>



<p id="lidar_perception" style="font-family: Arial; font-size: 18px; color: black;">
<b> LiDAR Perception </b> 
</p>



<li>Drivers &#8211; translate raw data</li>

<li>Preprocessing &#8211; clean up inputs</li>

<li>Ground filtering &#8211; remove noise <a href="https://gitlab.com/ApexAI/autowareclass2020/-/blob/master/lectures/07_Object_Perception_LIDAR/04_-_Ground_Filtering.pdf?ref_type=heads" style="color: blue;">tutorial</a></li> 

<li>Clustering &#8211; detect objects</li>

<li>Shape extraction &#8211; simplify representation</li>
<br>

Autoware.Auto uses ray-based ground filtering because it is fast and deterministic. <br>



<br>



<p id="lidar_camera" style="font-family: Arial; font-size: 18px; color: black;">
<b> Object Detection &#038; Recognition with LiDAR and Camera on GEM e4 </b> 
</p>



<figure class="wp-block-video"><video height="1586" style="aspect-ratio: 2536 / 1586;" width="2536" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/10/Top-LiDAR-Front-Camera-and-Yolo.mp4" playsinline></video></figure>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Perception Component Design, <a href="https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/perception/" style="color: blue;">Link</a>

<br>

[2] Self-Driving Cars with ROS and Autoware, <a href="https://www.apex.ai/autoware-course" style="color: blue;">Link</a>

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">880</post-id>	</item>
		<item>
		<title>ROS2 Software Stack Development</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-ros2-software-stack/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Tue, 24 Sep 2024 22:36:45 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=641</guid>

					<description><![CDATA[ROS2 Software Stack Development Sensing &#038; Data Preprocessing Perception Localization &#038; Mapping (SLAM/V-SLAM) Planning Dynamics &#038; Control Vehicle Interface &#038; PACMod2 Simulation ROS2 Resources ROS2 (Humble) Documentation ROS2 (Humble) Tutorials ROS2 (Humble) Demos ROS2 (Humble) Real-time Programming Autoware.Auto Resources The Autoware Foundation Autoware Documentation Autoware Documentation (Github) Autoware Universe Documentation Autoware (Github) Autoware.Universe (Github) Integrating...]]></description>
										<content:encoded><![CDATA[
<br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="489" src="https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-1024x489.png" alt="" class="wp-image-166" srcset="https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-1024x489.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-300x143.png 300w, https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-768x367.png 768w, https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-1536x733.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/09/Polaris-GEM-e4-2048x978.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<b style="font-family: Arial; font-size: 16px; color: black;"> ROS2 Software Stack Development </b> 

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/sensing/" style="color: blue;"> Sensing &#038; Data Preprocessing </a> </li>

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/perception/" style="color: blue;"> Perception </a> </li>

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/slam/" style="color: blue;"> Localization &#038; Mapping (SLAM/V-SLAM)  </a> </li>

<li> Planning </li>

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/control/" style="color: blue;"> Dynamics &#038; Control </a> </li>

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/vehicle-interface/" style="color: blue;"> Vehicle Interface &#038; PACMod2 </a> </li>

<li> <a href="https://hangpersonal.com/projects/self-driving-car/e4-ros2-software-stack/simulation/" style="color: blue;"> Simulation </a> </li>



<br>



<b style="font-family: Arial; font-size: 16px; color: black;"> ROS2 Resources </b> 
<li> <a href="https://docs.ros.org/en/humble/index.html" style="color: blue;"> ROS2 (Humble) Documentation </a> </li>
<li> <a href="https://docs.ros.org/en/humble/Tutorials.html" style="color: blue;"> ROS2 (Humble) Tutorials </a> </li>
<li> <a href="https://github.com/ros2/demos/tree/humble" style="color: blue;"> ROS2 (Humble) Demos </a> </li>
<li> <a href="https://docs.ros.org/en/humble/Tutorials/Demos/Real-Time-Programming.html" style="color: blue;"> ROS2 (Humble) Real-time Programming </a> </li>



<br>



<b style="font-family: Arial; font-size: 16px; color: black;"> Autoware.Auto Resources </b>
<li> <a href="https://autoware.org/" style="color: blue;"> The Autoware Foundation </a> </li>
<li> <a href="https://autowarefoundation.github.io/autoware-documentation/main/" style="color: blue;"> Autoware Documentation </a> </li>
<li> <a href="https://github.com/autowarefoundation" style="color: blue;"> Autoware Documentation (Github) </a> </li>
<li> <a href="https://autowarefoundation.github.io/autoware.universe/main/" style="color: blue;"> Autoware Universe Documentation </a> </li>
<li> <a href="https://github.com/autowarefoundation/autoware" style="color: blue;"> Autoware (Github) </a> </li>
<li> <a href="https://github.com/autowarefoundation/autoware.universe/tree/main" style="color: blue;"> Autoware.Universe (Github) </a> </li>
<li> <a href="https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/overview/" style="color: blue;"> Integrating Autoware </a> </li>

<br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="597" src="https://hangpersonal.com/wp-content/uploads/2024/12/autoware_architecture_overview-1024x597.png" alt="" class="wp-image-2179" srcset="https://hangpersonal.com/wp-content/uploads/2024/12/autoware_architecture_overview-1024x597.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/12/autoware_architecture_overview-300x175.png 300w, https://hangpersonal.com/wp-content/uploads/2024/12/autoware_architecture_overview-768x448.png 768w, https://hangpersonal.com/wp-content/uploads/2024/12/autoware_architecture_overview.png 1283w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Autoware Open-source Software Stack (Copyright to The Autoware Foundation)</figcaption></figure>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">641</post-id>	</item>
		<item>
		<title>Sensor Calibration</title>
		<link>https://hangpersonal.com/projects/polaris-gem-car/e4-sensor-calibration/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Tue, 24 Sep 2024 22:28:53 +0000</pubDate>
				<category><![CDATA[Autonomy]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?page_id=632</guid>

					<description><![CDATA[Stay tuned for future detailed updates! Top LiDAR and Front Camera Data Collection and Sensor Calibration Front LiDAR and Front Camera Data Collection and Sensor Calibration Reference [1] Autoware Calibration Toolkit Manual, Link [2] Yan, Guohang, et al. &#8220;Opencalib: A multi-sensor calibration toolbox for autonomous driving.&#8221; Software Impacts 14 (2022): 100393. Back to top of...]]></description>
										<content:encoded><![CDATA[
<br>



<b style="font-family: Arial; font-size: 18px; color: red;"> Stay tuned for future detailed updates! </b> <br> <br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Top LiDAR and Front Camera Data Collection and Sensor Calibration
</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="526" src="https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection-1024x526.png" alt="" class="wp-image-844" srcset="https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection-1024x526.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection-300x154.png 300w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection-768x394.png 768w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection-1536x789.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_data_collection.png 1922w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" autoplay controls loop muted src="https://hangpersonal.com/wp-content/uploads/2024/10/lidar_camera_calib_result.mp4" playsinline></video></figure>



<br>



<b style="font-family: Arial; font-size: 18px; color: black;">
Front LiDAR and Front Camera Data Collection and Sensor Calibration
</b> <br> <br>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="526" src="https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera-1024x526.png" alt="" class="wp-image-876" srcset="https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera-1024x526.png 1024w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera-300x154.png 300w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera-768x394.png 768w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera-1536x789.png 1536w, https://hangpersonal.com/wp-content/uploads/2024/10/e4_calib_front_lidar_camera.png 1922w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<br>



<p id="reference"> 
<b style="font-family: Arial; font-size: 18px; color: black;">
Reference
</b>
</p>



<!DOCTYPE html>
<html lang="en">
<head>
  <style>
    .justify-text {
      text-align: justify;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
  <div class="justify-text">

[1] Autoware Calibration Toolkit Manual, <a href="https://github.com/JunzWu/Autoware_Calibration_Camera_Lidar" style="color: blue;">Link</a>
<br>
[2] Yan, Guohang, et al. &#8220;Opencalib: A multi-sensor calibration toolbox for autonomous driving.&#8221; Software Impacts 14 (2022): 100393.
<br>

  </div>
</body>
</html>



<br> <br>
<a href="#top" style="color: blue;">Back to top of the page</a>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">632</post-id>	</item>
	</channel>
</rss>
