mirror of
https://github.com/micro-ROS/micro-ROS-Agent.git
synced 2026-09-06 09:55:15 +02:00
Add ros2 launch capabilities and example launch file (#47)
This commit is contained in:
@@ -113,6 +113,13 @@ install(
|
|||||||
lib/${PROJECT_NAME}
|
lib/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
DIRECTORY
|
||||||
|
launch
|
||||||
|
DESTINATION
|
||||||
|
share/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
if(UROSAGENT_GENERATE_PROFILE)
|
if(UROSAGENT_GENERATE_PROFILE)
|
||||||
set(_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/python")
|
set(_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/python")
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
from launch import LaunchDescription
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
return LaunchDescription([
|
||||||
|
Node(
|
||||||
|
package='micro_ros_agent',
|
||||||
|
executable='micro_ros_agent',
|
||||||
|
name='micro_ros_agent',
|
||||||
|
arguments={'udp4 --port 8888 -v6'}
|
||||||
|
)
|
||||||
|
])
|
||||||
@@ -18,10 +18,67 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
uros::agent::Agent micro_ros_agent;
|
uros::agent::Agent micro_ros_agent;
|
||||||
|
|
||||||
if (!micro_ros_agent.create(argc, argv))
|
/** Bypass '--ros-args' flag, as we use our own CLI parser.
|
||||||
|
* As a workaround for launch files, arguments will be passed from
|
||||||
|
* ros2launch as a single token with spaces,
|
||||||
|
* to preserve the correct argument order; split it here.
|
||||||
|
* TODO(jamoralp): investigate ROS2 tools for properly parsing params from launch
|
||||||
|
**/
|
||||||
|
std::vector<std::string> params;
|
||||||
|
for (int i = 0; i < argc; ++i)
|
||||||
|
{
|
||||||
|
params.emplace_back(std::string(argv[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto it = std::find(params.begin(), params.end(), "--ros-args");
|
||||||
|
if (params.end() != it)
|
||||||
|
{
|
||||||
|
if ((it - params.begin()) != 2)
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << "Error: when using ros2 launch, please specify ";
|
||||||
|
ss << "your arguments in a single variable." << std::endl;
|
||||||
|
ss << "Instead of 'arguments: {'udp4', '-p', '8888'}', do ";
|
||||||
|
ss << "'arguments: {'udp4 -p 8888'}" << std::endl;
|
||||||
|
|
||||||
|
std::cerr << ss.str();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
const std::string& agent_args(params.at(1));
|
||||||
|
std::istringstream iss(agent_args);
|
||||||
|
std::vector<std::string> agent_args_split(
|
||||||
|
std::istream_iterator<std::string>{iss},
|
||||||
|
std::istream_iterator<std::string>());
|
||||||
|
|
||||||
|
char** agent_argv = new char*[agent_args_split.size() + 1];
|
||||||
|
agent_argv[0] = argv[0];
|
||||||
|
char** agent_argv_it = &agent_argv[1];
|
||||||
|
|
||||||
|
for (const auto& arg : agent_args_split)
|
||||||
|
{
|
||||||
|
*agent_argv_it = new char[arg.length() + 1];
|
||||||
|
strcpy(*agent_argv_it, arg.c_str());
|
||||||
|
agent_argv_it++;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool success = micro_ros_agent.create(agent_args_split.size() + 1, agent_argv);
|
||||||
|
|
||||||
|
for (size_t i = 1; i <= agent_args_split.size(); ++i)
|
||||||
|
{
|
||||||
|
delete [] agent_argv[i];
|
||||||
|
}
|
||||||
|
delete [] agent_argv;
|
||||||
|
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!micro_ros_agent.create(argc, argv))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
micro_ros_agent.run();
|
micro_ros_agent.run();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user