Attending mind-numbing meetings is not one of them.
Waking up in the morning, feeling refreshed after a good night’s sleep, and more importantly, you know what you want to do today.
Starting your day at the office attending 15-minute stand-up, to share progress and issues you and your team faced the previous day. 15 minutes sharp and the stand-up end.
You are clear about the priority of the tickets assigned to you, you work on them in order from the highest to the lowest, but today you will focus on working on one of them.
You start your day, everything…
Step-by-step Algorithm Implementation: from Pseudo-code and Equations to Python Code. In this article, we will implement the Planning Graph and its planner — the GraphPlanner in Python, data structure and search algorithm for AI Planning.
Planning Graph was developed to solve the issues in complexity found in the classical AI Planning approaches, a.k.a STRIPS-like planners. There are two main parts that we need to implement:
If you are not familiar with the Planning Graph and want to understand more, check out my post…
I wanted to use the HFSM (Hierarchical Finite State Machine) in my Pacman AI Agent Implementation to fully understand the concepts and to compare it with the Behavior Tree. In my experience, after reading books and papers of some technical topics, my comprehension of the topics would greatly improve if I implemented them in code.
Pacman AI is written in Python and so I tried searching HFSM implementation on Github, but couldn’t find a good one for my implementation and decided to write one and release it on Github.
In this article, I want to share what I have learned…
We have seen how powerful the behavior tree is, in the previous post.
It is hierarchical, modular, and more importantly reactive to changes that happen in the agent’s environment.
It can be used to replace Hierarchical Finite State Machines (HFSMs), to make the systems more scalable and understandable to humans.
However, as you may have noticed behavior trees can become very complex if we want the agent to select between many methods to achieve a goal or a task.
Let’s look at an example.
When we plan a trip to a city in another country, we usually start with a…
In our previous posts, we discussed about Planning and Acting. Both are for planning, one with a Descriptive Model and the other with an Operational Model of actions.
Acting with Operational Model uses Refinement Methods to refine abstract tasks into subtasks or commands that can be executed by Execution Platform. In a rather complex domain where there are multiple methods that we can use to refine a task, this approach excels.
However, for many less complex systems, we only have one/two methods that we can use to refine an abstract task into. One may argue that we don’t need planning…
One of the main problems that a mobile robot has to solve is knowing where it is located in its environment. This process of determining the location and orientation of the robot (robot pose) with respect to its environment is called localization.
Without knowing where it is in its environment, there are very limited tasks a robot can perform. Therefore this is one of the most important problems for it to solve.
It is easy for us to know where the robot is in the picture above because we can see everything. But, that’s not the case for the robot…
One of the many tasks that an autonomous robot has to perform is mapping the environment. Having a map of the environment is important because many other tasks may depend on the map as a prerequisite.
For some robots, the map is given as input but for many others that is not possible. The robot has to map the environment autonomously by exploring it.
Exceptions in software refer to error conditions that stop the software from executing the regular path. These errors can be something that can be controlled by the software itself such as bad parameters or outside of its control. For example, errors returned by the system calls such as to open a file, a socket, to allocate a block of memory, etc.
Exception Handling offers a better mechanism to detect and handle errors. To understand why it is better, let’s now see how we detect and handle errors without Exception Handling, such as in a programming language like C.
One of the new features introduced in Modern C++ starting from C++11 is Lambda Expression.
It is a convenient way to define an anonymous function object or functor. It is convenient because we can define it locally where we want to call it or pass it to a function as an argument.
Lambda is easy to read too because we can keep everything in the same place.
In this post, we’ll look at what a lambda is, compare it with a function object (functor), and more importantly understand what it actually is and how to think about it when coding…
When you start learning C++, the first thing you should understand is the Object Model. Everything else will start to make sense after you understand the Object Model.
C++ can be hard to learn, especially if you come from high-level programming languages such as Python. It is very important to start your learning journey by understanding the fundamentals.
One of them is to understand what an object is. How it is represented in the memory and how it is related to other concepts in the language.
In this article, we will look into the details of the object model in…