Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
8dab773
servo value
Ackimixs Jan 28, 2026
4769c01
debug lidar
Ackimixs Jan 28, 2026
011bba3
debug lidar
Ackimixs Jan 28, 2026
f3640ed
debug lidar
Ackimixs Jan 28, 2026
b232bec
debug lidar
Ackimixs Jan 28, 2026
cd36e1d
debug lidar
Ackimixs Jan 28, 2026
1707b8c
new game controller sys
Ackimixs Jan 28, 2026
c515b84
new game controller sys
Ackimixs Jan 28, 2026
40f7ce5
new game controller sys
Ackimixs Jan 28, 2026
f9400e2
new game controller sys
Ackimixs Jan 28, 2026
f2e45aa
rewrite action sys hope it do not break anything but can now queue ac…
Ackimixs Jan 29, 2026
58eaeaa
action
Ackimixs Jan 29, 2026
3ab81f1
action
Ackimixs Jan 29, 2026
2a503f1
log
Ackimixs Jan 29, 2026
fe61d95
enemy manager
Ackimixs Jan 29, 2026
6a4fa89
log
Ackimixs Jan 29, 2026
72557bf
fuck me
Ackimixs Jan 29, 2026
e9e4680
const + PID
Ackimixs Jan 29, 2026
45fa33a
const + PID
Ackimixs Jan 29, 2026
b9df6dd
config
Ackimixs Jan 29, 2026
2d521e9
config
Ackimixs Jan 29, 2026
cb73140
reset game action queue
Ackimixs Jan 29, 2026
cf22677
log
Ackimixs Jan 29, 2026
fd99d2e
pb waypoints
Ackimixs Jan 29, 2026
c890b16
servo value
Ackimixs Jan 30, 2026
8243bd3
servo value
Ackimixs Jan 30, 2026
93acaa6
servo value
Ackimixs Jan 30, 2026
4ffab61
servo value
Ackimixs Jan 30, 2026
49a676f
servo value
Ackimixs Jan 30, 2026
fd40f30
servo value
Ackimixs Jan 30, 2026
9f70eff
first setup
Ackimixs Jan 30, 2026
e8e16fb
maybe ??
Ackimixs Jan 30, 2026
55ff8ab
maybe ??
Ackimixs Jan 30, 2026
79c609d
log
Ackimixs Jan 30, 2026
9c8d6cf
default value
Ackimixs Jan 30, 2026
e9bf692
abort mission
Ackimixs Jan 30, 2026
67c8bec
data
Ackimixs Jan 30, 2026
f64f02b
start thermo mission
Ackimixs Jan 30, 2026
ddfda39
rewrite action
Ackimixs Jan 31, 2026
a974e9c
ThermoMission
Ackimixs Jan 31, 2026
3d824e8
reduce a lot cpu consumption of map page
Ackimixs Feb 1, 2026
038fc9d
reduce a lot cpu consumption
Ackimixs Feb 1, 2026
5dd5f56
size
Ackimixs Feb 1, 2026
bd6e22f
beginning color setup
Ackimixs Feb 1, 2026
cf6ca9f
fix some rotate things
Ackimixs Feb 2, 2026
46cba64
fix some things
Ackimixs Feb 2, 2026
7d43edb
angle calculation
Ackimixs Feb 2, 2026
f9f2503
angle calculation
Ackimixs Feb 2, 2026
abdb87b
type
Ackimixs Feb 2, 2026
50dcd99
rota gui
Ackimixs Feb 4, 2026
245d656
2s
Ackimixs Feb 4, 2026
dee4fb5
middleware
Ackimixs Feb 4, 2026
72d4d7b
gui
Ackimixs Feb 4, 2026
94a3f4b
Desktop
Ackimixs Feb 4, 2026
1a32862
Desktop
Ackimixs Feb 4, 2026
1495f89
Desktop
Ackimixs Feb 4, 2026
b50a735
not enough internet for fastdds
Ackimixs Feb 4, 2026
fd552d5
box type
Ackimixs Feb 4, 2026
c5d0709
log
Ackimixs Feb 4, 2026
4fbcdd6
log
Ackimixs Feb 4, 2026
603bb1b
log
Ackimixs Feb 4, 2026
54346bc
log
Ackimixs Feb 4, 2026
2eb0422
time
Ackimixs Feb 4, 2026
871f8a1
time
Ackimixs Feb 4, 2026
768d964
servo page
Ackimixs Feb 4, 2026
d8821f6
servo page
Ackimixs Feb 4, 2026
8933a2a
please
Ackimixs Feb 4, 2026
b8bf6c8
please
Ackimixs Feb 4, 2026
94cf1db
default
Ackimixs Feb 4, 2026
6e6a2c4
setup cam backup
Ackimixs Feb 5, 2026
dd5248d
cam config
Ackimixs Feb 5, 2026
daa1fa7
arrange code + more debug
Ackimixs Feb 6, 2026
772a888
have to reopen cam, not like this but idk how to do without that
Ackimixs Feb 6, 2026
9dfcc83
classify + config array
Ackimixs Feb 7, 2026
d34ad74
box detector
Ackimixs Feb 7, 2026
89f8153
format
Ackimixs Feb 7, 2026
cdcaa79
xml array support
Ackimixs Feb 7, 2026
f92ec91
color config
Ackimixs Feb 7, 2026
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
File renamed without changes.
8 changes: 8 additions & 0 deletions Desktop/no-gui.ros2_launch_marcel.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[Desktop Entry]
Type=Application
Name=No GUI
Comment=Lance le système ROS 2 Sans GUI
Exec=/home/modelec/Modelec-ROS2/start_ros2.sh with_rplidar:=false with_gui:=false
Icon=utilities-terminal
Terminal=true
Categories=Utility;
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Type=Application
Name=Joy no Lidar
Comment=Lance le système ROS 2 avec GUI
Exec=/home/modelec/Modelec-ROS2/start_ros2.sh with_rplidar:=false
Exec=/home/modelec/Modelec-ROS2/start_ros2.sh with_rplidar:=false with_enemy_manager:=false
Icon=utilities-terminal
Terminal=true
Categories=Utility;
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
Type=Application
Name=No Lidar
Comment=Lance le système ROS 2 avec GUI

Exec=/home/modelec/Modelec-ROS2/start_ros2.sh with_joy:=false with_rplidar:=false

Exec=/home/modelec/Modelec-ROS2/start_ros2.sh with_joy:=false with_rplidar:=false with_enemy_manager:=false
Icon=utilities-terminal
Terminal=true
Categories=Utility;
File renamed without changes.
4 changes: 0 additions & 4 deletions TODO.md

This file was deleted.

2 changes: 1 addition & 1 deletion build.rasp.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
MAKEFLAGS="-j1" colcon build --symlink-install --executor sequential --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON # -DCMAKE_BUILD_TYPE=Debug
MAKEFLAGS="-j1" colcon build --symlink-install --executor sequential # --cmake-args -DCMAKE_BUILD_TYPE=Debug

source install/setup.bash
2 changes: 1 addition & 1 deletion build.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
colcon build --symlink-install --cmake-args # -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

source install/setup.bash
2 changes: 1 addition & 1 deletion fastdds_setup.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
</locator>
<locator>
<udpv4>
<address>100.73.69.106</address>
<address>100.91.204.77</address>
</udpv4>
</locator>
</initialPeersList>
Expand Down
9 changes: 5 additions & 4 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ git submodule init
git submodule update

echo "source /opt/ros/jazzy/setup.bash
source ~/Modelec-ROS/install/setup.bash
source ~/Modelec-ROS2/install/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTRTPS_DEFAULT_PROFILES_FILE=~/Modelec-ROS/fastdds_setup.xml
export FASTRTPS_DEFAULT_PROFILES_FILE=~/Modelec-ROS2/fastdds_setup.xml
export ROS_DOMAIN_ID=128" >> ~/.bashrc

source ~/.bashrc
Expand All @@ -39,9 +39,10 @@ source src/rplidar_ros/scripts/create_udev_rules.sh

cd ../..

cp ./*.desktop ~/Desktop
cp ./Desktop/*.desktop ~/Desktop
chmod +x ~/Desktop/*.desktop
gio set ~/Desktop/no_lidar.joy.ros2_launch_marcel.desktop "metadata::trusted" true
gio set ~/Desktop/no_lidar.ros2_launch_marcel.desktop "metadata::trusted" true
gio set ~/Desktop/joy.ros2_launch_marcel.desktop "metadata::trusted" true
gio set ~/Desktop/ros2_launch_marcel.desktop "metadata::trusted" true
gio set ~/Desktop/ros2_launch_marcel.desktop "metadata::trusted" true
gio set ~/Desktop/no-gui.ros2_launch_marcel.desktop "metadata::trusted" true
3 changes: 3 additions & 0 deletions simulated_pcb/odo.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ def handle_message(self, msg):

elif msg.startswith("SET;START;"):
self.start = msg.split(';')[2] == '1'
if not self.start:
self.waypoints.clear()
self.waypoint_queue.clear()
self.ser.write(b"OK;START;1\n")

# --- MULTI WAYPOINT (clears previous) ---
Expand Down
28 changes: 28 additions & 0 deletions src/modelec_com/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(std_srvs REQUIRED)
find_package(Boost REQUIRED COMPONENTS system)
find_package(ament_index_cpp REQUIRED)
find_package(fmt)

find_package(OpenCV REQUIRED)

find_package(modelec_interfaces REQUIRED)
find_package(modelec_utils REQUIRED)

Expand All @@ -35,10 +38,35 @@ target_include_directories(pcb_action_interface PUBLIC
$<INSTALL_INTERFACE:include>
)

# Color Detector Node
add_executable(color_detector
src/color_detector.cpp
)

ament_target_dependencies(color_detector
rclcpp
std_msgs
std_srvs
modelec_interfaces
ament_index_cpp
)

target_link_libraries(color_detector
${OpenCV_LIBS}
modelec_utils::utils
modelec_utils::config
)

target_include_directories(color_detector PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)

# Install targets
install(TARGETS
pcb_odo_interface
pcb_action_interface
color_detector
DESTINATION lib/${PROJECT_NAME}
)

Expand Down
95 changes: 95 additions & 0 deletions src/modelec_com/include/modelec_com/color_detector.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#pragma once

#include <rclcpp/rclcpp.hpp>
#include <opencv2/opencv.hpp>
#include <std_srvs/srv/trigger.hpp>
#include <std_msgs/msg/empty.hpp>
#include <std_msgs/msg/string.hpp>

#include <modelec_utils/config.hpp>

namespace Modelec
{
struct ColorSetting
{
std::string name;
double h_min;
double h_max;
};

class ColorDetector : public rclcpp::Node
{
public:
ColorDetector();

~ColorDetector() override;
private:
bool processSnapshot(std::vector<std::string>& colors, std::string& error);

void onRequest(
const std::shared_ptr<std_srvs::srv::Trigger::Request> request,
std::shared_ptr<std_srvs::srv::Trigger::Response> response);

std::vector<std::string> classifyROIs(const cv::Mat& hsv, cv::Mat& debug_img) const;

std::string classify(const cv::Vec3d& hsv_roi) const;

std::string generateImagePath() const;

rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr service_;

rclcpp::Subscription<std_msgs::msg::Empty>::SharedPtr ask_sub_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr color_pub_;

std::vector<cv::Rect> rois_;

std::string link_;
bool save_to_file_ = true;
std::string save_directory_ = "./";
bool enable_ = false;
bool headless_ = true;

std::vector<ColorSetting> color_configs_;
};

template<>
inline std::vector<ColorSetting>
Config::get<std::vector<ColorSetting>>(
const std::string& prefix,
const std::vector<ColorSetting>& default_value)
{
auto result = Config::getArray<ColorSetting>(
prefix,
[](const std::string& base)
{
return ColorSetting{
Config::get<std::string>(base + "@name"),
Config::get<double>(base + "@hue_min"),
Config::get<double>(base + "@hue_max")
};
});

return result.empty() ? default_value : result;
}

template<>
inline std::vector<cv::Rect>
Config::get<std::vector<cv::Rect>>(
const std::string& prefix,
const std::vector<cv::Rect>& default_value)
{
auto result = Config::getArray<cv::Rect>(
prefix,
[](const std::string& base)
{
return cv::Rect(
Config::get<int>(base + "@x", 0),
Config::get<int>(base + "@y", 0),
Config::get<int>(base + "@w", 100),
Config::get<int>(base + "@h", 100)
);
});

return result.empty() ? default_value : result;
}
}
Loading