Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PI Sprint 24/25 / PD-456] - [Feature] Implement Localization #34

Open
wants to merge 24 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
7001d91
feat: add gyakuenki subscriber
mbsaloka Nov 18, 2024
968b1cd
feat: add localization methods and attributes
mbsaloka Nov 21, 2024
6bb8a55
feat: run localize when odometry updated and projected objetcs not empty
mbsaloka Nov 21, 2024
4cd6c76
feat: add subscriber for delta position
mbsaloka Dec 3, 2024
a3e4132
fix: localize every get delta pos msg
mbsaloka Dec 5, 2024
a333ac1
feat: add subscriber for button status
mbsaloka Dec 5, 2024
8c8be98
feat: use landmark label to calculate likelihood
mbsaloka Dec 16, 2024
69ee83d
feat: update odometry use estimated pose
mbsaloka Dec 17, 2024
e57ca4b
feat: debug log
mbsaloka Dec 19, 2024
b942ba3
feat: debug and testing log
mbsaloka Dec 25, 2024
58d2418
fix: change attribute name
mbsaloka Jan 4, 2025
8c9f1b2
fix: apply estimate pose
mbsaloka Jan 7, 2025
7f39056
refactor: remove debug logs
mbsaloka Jan 7, 2025
faef1d4
feat: use counter to initialize particles across the field
mbsaloka Jan 7, 2025
06d20e2
fix: clear projected objects after evaluate particles
mbsaloka Jan 7, 2025
7f253d9
feat: validate delta pose before localize
mbsaloka Jan 9, 2025
81bd763
refactor: pass initial localization as method parameter
mbsaloka Jan 9, 2025
0eed5ef
docs: add copyrights
mbsaloka Jan 11, 2025
38fe626
refactor: clean up code
mbsaloka Jan 11, 2025
94f3573
fix: change particles initialization range
mbsaloka Jan 11, 2025
cfd0ec8
fix: swap field width and length in init particles
mbsaloka Jan 11, 2025
9938477
feat: validate estimated pose before apply using num particles
mbsaloka Jan 11, 2025
5da59ed
fix: use radian for trigonometri calculation
mbsaloka Jan 11, 2025
01b85a1
feat: add option to enable localization in config
mbsaloka Jan 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ find_package(ament_index_cpp REQUIRED)
find_package(aruku REQUIRED)
find_package(aruku_interfaces REQUIRED)
find_package(atama_interfaces REQUIRED)
find_package(gyakuenki_interfaces REQUIRED)
find_package(jitsuyo REQUIRED)
find_package(kansei REQUIRED)
find_package(kansei_interfaces REQUIRED)
Expand Down Expand Up @@ -47,6 +48,7 @@ ament_target_dependencies(${PROJECT_NAME}
aruku
aruku_interfaces
atama_interfaces
gyakuenki_interfaces
jitsuyo
kansei
kansei_interfaces
Expand Down Expand Up @@ -112,6 +114,7 @@ ament_export_dependencies(
aruku
aruku_interfaces
atama_interfaces
gyakuenki_interfaces
jitsuyo
kansei
kansei_interfaces
Expand Down
81 changes: 81 additions & 0 deletions include/suiryoku/locomotion/model/field.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// Copyright (c) 2025 Ichiro ITS
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#ifndef SUIRYOKU__LOCOMOTION__MODEL__FIELD_HPP_
#define SUIRYOKU__LOCOMOTION__MODEL__FIELD_HPP_
Comment on lines +21 to +22
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where's the copyright? check other files as well.


#include <vector>

#include "keisan/keisan.hpp"

namespace suiryoku
{

struct Field
{
public:
int width;
int length;
std::vector<keisan::Point2> landmarks_L;
std::vector<keisan::Point2> landmarks_T;
std::vector<keisan::Point2> landmarks_X;
std::vector<keisan::Point2> landmarks_goalpost;

Field()
: width(600),
length(900),
landmarks_L({
{0.0, 0.0},
{0.0, 600.0},
{100.0, 50.0},
{100.0, 550.0},
{900.0, 0.0},
{900.0, 600.0},
{800.0, 50.0},
{800.0, 550.0}
}),
landmarks_T({
{0.0, 50.0},
{0.0, 550.0},
{450.0, 0.0},
{450.0, 600.0},
{900.0, 50.0},
{900.0, 550.0}
}),
landmarks_X({
{210, 300},
{690, 300},
{450, 300},
{450, 375},
{450, 225}
}),
landmarks_goalpost({
{0.0, 170.0},
{0.0, 430.0},
{900.0, 170.0},
{900.0, 430.0}
})
{
}
};

} // namespace suiryoku

#endif // SUIRYOKU__LOCOMOTION__MODEL__FIELD_HPP_
44 changes: 44 additions & 0 deletions include/suiryoku/locomotion/model/robot.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,24 @@
#include <string>

#include "keisan/keisan.hpp"
#include "suiryoku/locomotion/model/field.hpp"

namespace suiryoku
{

struct ProjectedObject
{
std::string label;
keisan::Point3 position;
};

struct Particle
{
keisan::Point2 position;
keisan::Angle<double> orientation;
double weight;
};

class Robot
{
public:
Expand All @@ -36,10 +50,35 @@ class Robot
keisan::Angle<double> get_pan() const;
keisan::Angle<double> get_tilt() const;

// localizations
void localize(bool initial_localization = false);
void init_particles(bool initial_localization);
void resample_particles();
void update_motion();
void calculate_weight();
void estimate_position();
void print_particles();
void print_estimate_position();
double calculate_total_likelihood(const Particle & particle);
double calculate_object_likelihood(const ProjectedObject & measurement, const Particle & particle);
double get_sum_weight();

Field field;
std::vector<Particle> particles;
keisan::Point2 estimated_position;
int num_particles;

bool use_localization;
bool apply_localization;

// IPM
std::vector<ProjectedObject> projected_objects;

// member for getting
bool is_calibrated;
keisan::Angle<double> orientation;
keisan::Point2 position;
keisan::Point2 delta_position;

bool is_walking;

Expand All @@ -57,6 +96,11 @@ class Robot
double y_speed;
double a_speed;
bool aim_on;

private:
double xvar;
double yvar;
int kidnap_counter;
};

} // namespace suiryoku
Expand Down
6 changes: 6 additions & 0 deletions include/suiryoku/locomotion/node/locomotion_node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "aruku_interfaces/msg/set_walking.hpp"
#include "aruku_interfaces/msg/status.hpp"
#include "atama_interfaces/msg/head.hpp"
#include "gyakuenki_interfaces/msg/projected_objects.hpp"
#include "kansei_interfaces/msg/status.hpp"
#include "rclcpp/rclcpp.hpp"
#include "suiryoku/locomotion/model/robot.hpp"
Expand All @@ -42,6 +43,7 @@ class LocomotionNode
using Head = atama_interfaces::msg::Head;
using MeasurementStatus = kansei_interfaces::msg::Status;
using Point2 = aruku_interfaces::msg::Point2;
using ProjectedObjects = gyakuenki_interfaces::msg::ProjectedObjects;
using SetWalking = aruku_interfaces::msg::SetWalking;
using WalkingStatus = aruku_interfaces::msg::Status;

Expand Down Expand Up @@ -69,6 +71,10 @@ class LocomotionNode

rclcpp::Subscription<Head>::SharedPtr head_subscriber;

rclcpp::Subscription<ProjectedObjects>::SharedPtr projected_objects_subscriber;

rclcpp::Subscription<Point2>::SharedPtr delta_position_subscriber;

std::shared_ptr<Locomotion> locomotion;
std::shared_ptr<Robot> robot;

Expand Down
2 changes: 2 additions & 0 deletions include/suiryoku/locomotion/process/locomotion.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,8 @@ class Locomotion
keisan::Angle<double> right_kick_target_pan;
keisan::Angle<double> right_kick_target_tilt;

bool localization_enable;

std::shared_ptr<Robot> robot;
};

Expand Down
Loading
Loading