Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 894263e2 rédigé par x-MTheun's avatar x-MTheun
Parcourir les fichiers

add fonctinnality to connect all drones on the same joystick

parent 78694f3a
Branches multi_robot_ui
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
import os
import ast
from ament_index_python.packages import get_package_share_directory
from launch_ros.actions import Node
import launch
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, OpaqueFunction
from launch.substitutions import LaunchConfiguration
def launch_setup(context, *args, **kwargs):
joy_namespace_str = LaunchConfiguration('joy_namespace').perform(context)
print(joy_namespace_str)
joy_namespace_list = [ns.strip() for ns in joy_namespace_str.split(',') if ns.strip()]
launch_joystick = []
for ns in joy_namespace_list:
launch_joystick.append(
Node(
package="ls2n_drone_command_center",
executable="joystick",
output="screen",
namespace=ns,
parameters=[
{
"joy_config_version": LaunchConfiguration(
"joy_config_version"
)
}
],
)
)
return launch_joystick
def generate_launch_description():
ld = LaunchDescription()
ld.add_action(
DeclareLaunchArgument(
"joy_config_version",
default_value="CONFIG_1",
description="Joystick Configuration To Use",
)
)
ld.add_action(
DeclareLaunchArgument(
"joy_namespace",
default_value="CommandCenter,Drone1",
description="Joystick namespace",
)
)
joy_params = os.path.join(
os.path.join(
get_package_share_directory("ls2n_drone_command_center"), "config"
),
"joystick_params.yaml",
)
joy_node = Node(
package="joy",
executable="joy_node",
output="screen",
parameters=[joy_params],
remappings=[("joy", "CommandCenter/Joystick")],
)
ld.add_action(joy_node)
ld.add_action(
launch.actions.RegisterEventHandler(
event_handler=launch.event_handlers.OnProcessExit(
target_action=joy_node,
on_exit=[
launch.actions.EmitEvent(
event=launch.events.Shutdown()
)
],
)
)
)
ld.add_action(OpaqueFunction(function=launch_setup))
return ld
......@@ -147,13 +147,24 @@ void GuiNode::startCCApp(const CommandCenterApp &app) {
QString ns;
QString joy_config;
QStringList ros2Args;
std::vector<QString> name_drone(droneList);
name_drone.erase(std::remove_if(name_drone.begin(), name_drone.end(),
[&](const QString& s) { return s == "CommandCenter"; }),
name_drone.end());
QStringList temp_name;
for (const auto& item : name_drone) {
temp_name << QString("%1").arg(item);
}
QString name_args = QString("%1").arg(temp_name.join(","));
switch (app) {
case CommandCenterApp::JOYSTICK:
launchFileName = "joystick.launch.py";
ns = "joy_namespace:=" + currentDrone;
launchFileName = "joystick_node.launch.py";
ns = "joy_namespace:=" + name_args;
joy_config = "joy_config_version:=" + QString::fromStdString(joy_config_version_);
ros2Args << "launch"
<< "ls2n_drone_command_center" << launchFileName << ns << joy_config;
<< "ls2n_drone_ui" << launchFileName << ns << joy_config;
break;
case CommandCenterApp::MOCAP:
launchFileName = "mocap.launch.py";
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter