Skip to content

Commit

Permalink
Merge pull request #2 from CaptnLarson/ardent
Browse files Browse the repository at this point in the history
Ardent
  • Loading branch information
Rafał Kozik committed May 7, 2018
2 parents 8bcee58 + 606c8a0 commit c2f0b4f
Show file tree
Hide file tree
Showing 22 changed files with 84 additions and 53 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -6,3 +6,4 @@ python/*.pyc
python/__pycache__
.*.swp
comm/CMakeLists.txt.*
.vscode
4 changes: 2 additions & 2 deletions comm/CMakeLists.txt
Expand Up @@ -16,8 +16,8 @@ if(COMM_ROS2_FASTRTPS OR COMM_ROS2_OPENSPLICE OR COMM_ROS2_CONNEXT)
add_subdirectory(ros2node)
endif()
if(COMM_ROS)
include_directories(/opt/ros/jade/include)
link_directories(/opt/ros/jade/lib) #TODO
include_directories(/opt/ros/kinetic/include)
link_directories(/opt/ros/kinetic/lib) #TODO
add_subdirectory(ros1node/messages)
add_subdirectory(ros1node)
endif()
Expand Down
4 changes: 2 additions & 2 deletions comm/ros2node/CMakeLists.txt
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.3)
cmake_minimum_required(VERSION 3.5.1)
project(ros2node)

set(CMAKE_AUTOMOC ON)
Expand Down Expand Up @@ -39,7 +39,7 @@ endif()
find_package(${DDS} REQUIRED)
find_package(ros2eval_msgs REQUIRED)

target_link_libraries(ros2node common rcl rclcpp rclcpp__${DDS} ${${DDS}_LIBRARIES} ${ros2eval_msgs_LIBRARIES})
target_link_libraries(ros2node common rcl rclcpp ${${DDS}_LIBRARIES} ${ros2eval_msgs_LIBRARIES})
include_directories(${${DDS}_INCLUDE_DIRS} ${rcl_INCLUDE_DIRS})
install(FILES ${INSTALL_HEADERS} DESTINATION /include/ros2node)

2 changes: 1 addition & 1 deletion comm/ros2node/messages/CMakeLists.txt
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.3)
cmake_minimum_required(VERSION 3.5.1)

project(ros2eval_msgs)

Expand Down
6 changes: 4 additions & 2 deletions comm/ros2node/messages/package.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<package format="2">
<package format="3">
<name>ros2eval_msgs</name>
<version>1.5.3</version>
<description>Simple messages for testing</description>
Expand All @@ -11,10 +11,12 @@
<buildtool_depend>rosidl_default_generators</buildtool_depend>

<build_depend>std_msgs</build_depend>

<member_of_group>rosidl_interface_packages</member_of_group>

<exec_depend>rosidl_default_runtime</exec_depend>
<exec_depend>std_msgs</exec_depend>

<export>
<build_type>ament_cmake</build_type>
</export>
Expand Down
18 changes: 9 additions & 9 deletions comm/ros2node/ros2node.cpp
Expand Up @@ -19,7 +19,7 @@
#include "ros2subscriptionlistenerinterface.h"
#include "ros2qosprofile.h"
#ifdef FASTRTPS
#include "fastrtps/utils/RTPSLog.h"
#include "fastrtps/log/Log.h"
#endif

//TODO - redesign subscriber
Expand All @@ -37,11 +37,11 @@ namespace roscommunication
{
char *argv[] = { name.toLocal8Bit().data() };
int argc = sizeof(argv) / sizeof(char*) - 1;
rclcpp::utilities::init(argc, argv);
rclcpp::init(argc, argv);
qRegisterMetaType<communication::MessageType>("communication::MessageType");
debug(LOG_WARNING, "RosInitializer", "DDS: %s", rmw_get_implementation_identifier());
#ifdef FASTRTPS
eprosima::Log::setVerbosity(eprosima::VERB_INFO);
eprosima::fastrtps::Log::SetVerbosity(eprosima::fastrtps::Log::Info);
#endif
mInitialized = true; //TODO - check
debug(LOG_WARNING, "RosInitializer", "ros2 initialized");
Expand Down Expand Up @@ -81,7 +81,7 @@ namespace roscommunication

private:
rclcpp::Node::SharedPtr mNode;
typename rclcpp::subscription::Subscription<T>::SharedPtr mSubscription;
typename rclcpp::Subscription<T>::SharedPtr mSubscription;

void subscribe(QoSSetting qos)
{
Expand Down Expand Up @@ -311,7 +311,7 @@ namespace roscommunication
ros2eval_msgs::msg::RobotSensor sensor;
sensor.id = msg.id;
sensor.data = msg.data;
auto pub = std::static_pointer_cast<rclcpp::publisher::Publisher<ros2eval_msgs::msg::RobotSensor>>(mPublishers.value(n));
auto pub = std::static_pointer_cast<rclcpp::Publisher<ros2eval_msgs::msg::RobotSensor>>(mPublishers.value(n));
debug(LOG_BENCHMARK, "PUBLISHING RobotSensor", "id=%d, size=%lu", msg.id, msg.data.size());
try
{
Expand Down Expand Up @@ -344,7 +344,7 @@ namespace roscommunication
control.z = msg.z;
control.z = msg.id;
debug(LOG_BENCHMARK, "PUBLISHING RobotControl", "id=%d, size=%lu", msg.id, sizeof(ros2eval_msgs::msg::RobotControl));
auto pub = std::static_pointer_cast<rclcpp::publisher::Publisher<ros2eval_msgs::msg::RobotControl> >(mPublishers.value(n));
auto pub = std::static_pointer_cast<rclcpp::Publisher<ros2eval_msgs::msg::RobotControl> >(mPublishers.value(n));
try
{
pub->publish(control);
Expand Down Expand Up @@ -374,7 +374,7 @@ namespace roscommunication
alarm.id = msg.id;
alarm.alarm1 = msg.alarm1;
alarm.alarm2 = msg.alarm2;
auto pub = std::static_pointer_cast<rclcpp::publisher::Publisher<ros2eval_msgs::msg::RobotAlarm> >(mPublishers.value(n));
auto pub = std::static_pointer_cast<rclcpp::Publisher<ros2eval_msgs::msg::RobotAlarm> >(mPublishers.value(n));
debug(LOG_BENCHMARK, "PUBLISHING RobotAlarm", "id=%u, size=%lu", alarm.id, sizeof(ros2eval_msgs::msg::RobotAlarm));
try
{
Expand Down Expand Up @@ -407,14 +407,14 @@ namespace roscommunication
QoSSettings mQoS;
rclcpp::Node::SharedPtr mNode;
bool mStarted;
QMap<MessageType, rclcpp::publisher::PublisherBase::SharedPtr> mPublishers;
QMap<MessageType, rclcpp::PublisherBase::SharedPtr> mPublishers;
};

/*--------------------ROS2NodeImpl----------------------*/

rclcpp::Node::SharedPtr getNode(QString name)
{
return rclcpp::node::Node::make_shared(qPrintable(name));
return rclcpp::Node::make_shared(qPrintable(name));
}

class Ros2NodeImpl : public QObject
Expand Down
33 changes: 18 additions & 15 deletions comm/ros2node/ros2qosprofile.cpp
Expand Up @@ -8,26 +8,29 @@ namespace
{
static const rmw_qos_profile_t rmw_qos_profile_alarm =
{
RMW_QOS_POLICY_KEEP_ALL_HISTORY,
RMW_QOS_POLICY_HISTORY_KEEP_ALL,
0,
RMW_QOS_POLICY_RELIABLE,
RMW_QOS_POLICY_TRANSIENT_LOCAL_DURABILITY
RMW_QOS_POLICY_RELIABILITY_RELIABLE,
RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL,
false
};

static const rmw_qos_profile_t rmw_qos_profile_control =
{
RMW_QOS_POLICY_KEEP_LAST_HISTORY,
RMW_QOS_POLICY_HISTORY_KEEP_LAST,
50,
RMW_QOS_POLICY_RELIABLE,
RMW_QOS_POLICY_VOLATILE_DURABILITY
RMW_QOS_POLICY_RELIABILITY_RELIABLE,
RMW_QOS_POLICY_DURABILITY_VOLATILE,
false
};

static const rmw_qos_profile_t rmw_qos_profile_sensor =
{
RMW_QOS_POLICY_KEEP_LAST_HISTORY,
RMW_QOS_POLICY_HISTORY_KEEP_LAST,
0,
RMW_QOS_POLICY_BEST_EFFORT,
RMW_QOS_POLICY_VOLATILE_DURABILITY
RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT,
RMW_QOS_POLICY_DURABILITY_VOLATILE,
false
};
}

Expand All @@ -53,10 +56,10 @@ std::string Ros2QoSProfile::profileDescription(QoSProfile p)
std::string description;
switch (profile.history)
{
case RMW_QOS_POLICY_KEEP_ALL_HISTORY:
case RMW_QOS_POLICY_HISTORY_KEEP_ALL:
description.append("H: KEEP_ALL, ");
break;
case RMW_QOS_POLICY_KEEP_LAST_HISTORY:
case RMW_QOS_POLICY_HISTORY_KEEP_LAST:
description.append("H: KEEP_LAST=" + std::to_string(profile.depth)+ ", ");
break;
case RMW_QOS_POLICY_HISTORY_SYSTEM_DEFAULT:
Expand All @@ -65,10 +68,10 @@ std::string Ros2QoSProfile::profileDescription(QoSProfile p)
}
switch (profile.reliability)
{
case RMW_QOS_POLICY_RELIABLE:
case RMW_QOS_POLICY_RELIABILITY_RELIABLE:
description.append("R: RELIABLE, ");
break;
case RMW_QOS_POLICY_BEST_EFFORT:
case RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT:
description.append("R: BEST_EFFORT, ");
break;
case RMW_QOS_POLICY_RELIABILITY_SYSTEM_DEFAULT:
Expand All @@ -77,10 +80,10 @@ std::string Ros2QoSProfile::profileDescription(QoSProfile p)
};
switch (profile.durability)
{
case RMW_QOS_POLICY_TRANSIENT_LOCAL_DURABILITY:
case RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL:
description.append("D: TRANSIENT");
break;
case RMW_QOS_POLICY_VOLATILE_DURABILITY:
case RMW_QOS_POLICY_DURABILITY_VOLATILE:
description.append("D: VOLATILE");
break;
case RMW_QOS_POLICY_DURABILITY_SYSTEM_DEFAULT:
Expand Down
2 changes: 1 addition & 1 deletion docker/ros1_base/Dockerfile
@@ -1,4 +1,4 @@
FROM ros:jade
FROM ros:kinetic

RUN cd /etc && rm localtime && ln -s /usr/share/zoneinfo/Poland localtime
RUN apt-get update && apt-get install -y terminator vim build-essential perl python git wget tcpdump qt5-default qtcreator
2 changes: 1 addition & 1 deletion docker/ros1_node/Dockerfile
Expand Up @@ -7,4 +7,4 @@ RUN mkdir $top
ADD comm $comm
RUN mkdir $comm/build
RUN touch $comm/ros2node/messages/CATKIN_IGNORE
RUN cd $comm/build && /bin/bash -c "source /opt/ros/jade/setup.bash && cmake -DCOMM_ROS=true .. && make"
RUN cd $comm/build && /bin/bash -c "source /opt/ros/kinetic/setup.bash && cmake -DCOMM_ROS=true .. && make"
32 changes: 27 additions & 5 deletions docker/ros2_base/Dockerfile
@@ -1,10 +1,13 @@
FROM ubuntu:xenial

RUN cd /etc && rm localtime && ln -s /usr/share/zoneinfo/Poland localtime
RUN apt-get update
RUN apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV top /ros2_benchmarking
ENV comm $top/comm

ENV RMW_IMPLEMENTATION rmw_opensplice_cpp
ENV ROS2_SETUP /ros2_ws/install/local_setup.bash
ENV OSPL_URI file:///usr/etc/opensplice/config/ospl.xml
Expand All @@ -17,15 +20,34 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys D2486D2DD83DB
RUN echo "deb http://packages.osrfoundation.org/gazebo/ubuntu xenial main" > /etc/apt/sources.list.d/gazebo-latest.list

RUN apt-get update
RUN apt-get install -y perl git wget build-essential cppcheck cmake libopencv-dev python-empy python3-empy python3-nose python3-pip python3-setuptools python3-vcstool qt5-default qtcreator
RUN apt-get install -y libboost-chrono-dev libboost-date-time-dev libboost-program-options-dev libboost-regex-dev libboost-system-dev libboost-thread-dev libopensplice64 vim openjdk-9-jre
RUN pip3 install -U setuptools
#build essentials
RUN apt-get install -y cmake gcc wget git
RUN apt-get install -y wget build-essential cppcheck libopencv-dev libpoco-dev libpocofoundation9v5 libpocofoundation9v5-dbg

RUN apt-get install -y qt5-default qtcreator
RUN apt-get install -y libtinyxml-dev libeigen3-dev uncrustify
RUN apt-get install -y clang-format pydocstyle pyflakes qtbase5-dev

#dependencies for RViz
RUN apt-get install -y libcurl4-openssl-dev libqt5core5a libqt5gui5 libqt5opengl5 libqt5widgets5 libxaw7-dev libgles2-mesa-dev libglu1-mesa-dev qtbase5-dev

#pyhton requirements
RUN apt-get install -y python-empy python3-empy python3-dev python3-nose python3-pip python3-setuptools python3-vcstool python3-yaml python3-coverage python3-mock python3-pep8 python3-pyparsing
RUN pip3 install -U argcomplete
RUN pip3 install -U flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes pytest pytest-cov pytest-runner

#Fastrtps and opensplice requirements
RUN apt-get install -y libasio-dev libtinyxml2-dev libopensplice67


RUN apt-get install -y vim openjdk-9-jre


RUN mkdir -p /ros2_ws/src/applied
RUN wget https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.repos -O /ros2_ws/ros2.repos
RUN vcs import /ros2_ws/src < /ros2_ws/ros2.repos
RUN perl -i -p -e "s/#(?=.+\/(Byte|ByteMultiArray|MultiArrayDimension|MultiArrayLayout)\.msg)//" /ros2_ws/src/ros2/common_interfaces/std_msgs/CMakeLists.txt
RUN for dir in demos examples rclpy realtime_support ros1_bridge rmw_connext system_tests tlsf ../eProsima; do touch /ros2_ws/src/ros2/$dir/AMENT_IGNORE; done

RUN for dir in demos examples rclpy realtime_support ros1_bridge rviz rmw_connext system_tests tlsf; do touch /ros2_ws/src/ros2/$dir/AMENT_IGNORE; done
ADD comm/ros2node/messages /ros2_ws/src/ros2/common_interfaces/messages
RUN /ros2_ws/src/ament/ament_tools/scripts/ament.py build $AMENT_ARGS

3 changes: 2 additions & 1 deletion docker/ros2_bridge/Dockerfile
@@ -1,6 +1,7 @@
FROM ros2:base

RUN apt-get install -y ros-kinetic-roscpp ros-kinetic-rosmsg ros-kinetic-catkin ros-kinetic-std-msgs
RUN apt-get update
RUN apt-get install -y ros-kinetic-roscpp ros-kinetic-rosmsg ros-kinetic-catkin ros-kinetic-std-msgs ros-kinetic-roslaunch --fix-missing

ENV ROS_SETUP /opt/ros/kinetic/setup.bash
ENV build $comm/ros1node/messages/build
Expand Down
9 changes: 5 additions & 4 deletions docker/ros2_fastrtps/Dockerfile
@@ -1,9 +1,10 @@
FROM ros2:base

ADD comm $comm
ADD docker/ros2_fastrtps/*.patch /ros2_ws/src/
#ADD docker/ros2_fastrtps/*.patch /ros2_ws/src/
RUN mkdir $comm/build
RUN rm /ros2_ws/src/eProsima/AMENT_IGNORE
RUN cd /ros2_ws/src/ && cat *.patch | patch -p0 && mv *.patch applied
RUN cd /ros2_ws && ./src/ament/ament_tools/scripts/ament.py build --force-ament-cmake-configure $AMENT_ARGS
#RUN cd /ros2_ws/src/ && cat *.patch | patch -p0 && mv *.patch applied
#RUN cd /ros2_ws && ./src/ament/ament_tools/scripts/ament.py build --force-ament-cmake-configure $AMENT_ARGS
RUN cd $comm/build && /bin/bash -c "source $ROS2_SETUP && cmake -DCOMM_ROS2_FASTRTPS=true .. && make"

ENV RMW_IMPLEMENTATION=rmw_fastrtps_cpp
1 change: 1 addition & 0 deletions docker/ros2_opensplice/Dockerfile
Expand Up @@ -4,3 +4,4 @@ ENV OSPL_URI file:///ros2_benchmarking/comm/ros2node/ospl.xml
ADD comm $comm
RUN mkdir $comm/build
RUN cd $comm/build && /bin/bash -c "source $ROS2_SETUP && cmake -DCOMM_ROS2_OPENSPLICE=true .. && make"
ENV RMW_IMPLEMENTATION=rmw_opensplice_cpp
2 changes: 1 addition & 1 deletion scripts/cpu_usage.sh
Expand Up @@ -2,7 +2,7 @@

while true
do
idle=`top -bn2 | grep "Cpu(s)" | sed 1d | sed "s/.*, \([0-9,]\+\) id.*/\\1/" | sed "s/,/./"`
idle=`top -bn2 | grep "Cpu(s):" | sed 1d | sed "s/.*, \([0-9]\+.[0-9]\+\) id.*/\\1/" | sed "s/,/./"`
echo "scale=2; 100-$idle" | bc -l
sleep 1
done
4 changes: 2 additions & 2 deletions scripts/memory_usage.sh
Expand Up @@ -2,8 +2,8 @@

while true
do
usage=`free -m | grep "buffers/cache"`
expression=`echo $usage | sed 's/.*cache:\s*\([0-9]\+\)\s*\([0-9]\+\).*/\1\/\2/'`
usage=`free -m | grep "Mem:"`
expression=`echo $usage | sed 's/Mem:\s*\([0-9]\+\)\s*\([0-9]\+\).*/\1\/\2/'`
echo "scale=2; 100*$expression" | bc -l
sleep 1
done
2 changes: 1 addition & 1 deletion scripts/start_ros2fastrtps_console.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && ./ros2runner rosconsole.ini >/logs/console.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && ./ros2runner rosconsole.ini >/logs/console.txt 2>&1"
docker run -d -h console --pid=host --net ros2fastrtps --ip $net_ros2fastrtps_console --add-host robot:$net_ros2fastrtps_robot -v $PWD/logs:/logs ros2:fastrtps bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2fastrtps_robot.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
docker run -d -h robot --pid=host --net ros2fastrtps --ip $net_ros2fastrtps_robot --add-host console:$net_ros2fastrtps_console -v $PWD/logs:/logs ros2:fastrtps bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2fastrtps_scalability_robot.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && ./ros2runner rosrobot.ini >/logs/robot-${1}.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && ./ros2runner rosrobot.ini >/logs/robot-${1}.txt 2>&1"
docker run -d -h robot --net ros2fastrtps --ip ${net_ros2fastrtps_prefix}.$1 --add-host console:$net_ros2fastrtps_console -v $PWD/logs:/logs ros2:fastrtps bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2opensplice_console.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosconsole.ini >/logs/console.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosconsole.ini >/logs/console.txt 2>&1"
docker run -d -h console --net ros2opensplice --ip $net_ros2opensplice_console --add-host robot:$net_ros2opensplice_robot -v $PWD/logs:/logs ros2:opensplice bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2opensplice_robot.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
docker run -d -h robot --net ros2opensplice --ip $net_ros2opensplice_robot --add-host console:$net_ros2opensplice_console -v $PWD/logs:/logs ros2:opensplice bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2opensplice_robot_bridge.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot.txt 2>&1"
docker run -d -h robot --net ros1 --ip $net_ros1_ros2_robot --add-host console:$net_ros1_console -v $PWD/logs:/logs ros2:opensplice bash -c "$cmd"
2 changes: 1 addition & 1 deletion scripts/start_ros2opensplice_scalability_robot.sh
@@ -1,5 +1,5 @@
#/bin/bash

. ./scripts/networks.sh
cmd="cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot-${1}.txt 2>&1"
cmd="source /ros2_ws/install/setup.sh && cd \$comm/build/scenarios && OSPL_ERRORFILE='<stderr>' OSPL_INFOFILE='<stderr>' OSPL_VERBOSITY=WARNING ./ros2runner rosrobot.ini >/logs/robot-${1}.txt 2>&1"
docker run -d -h robot --net ros2opensplice --ip ${net_ros2opensplice_prefix}.$1 --add-host console:$net_ros2opensplice_console -v $PWD/logs:/logs ros2:opensplice bash -c "$cmd"

0 comments on commit c2f0b4f

Please sign in to comment.