Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions micro_ros_agent/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ if(UROSAGENT_GENERATE_PROFILE)
set(_XML_DEFAULT_READ_BIN "${_OUTPUT_PATH}/bin/Xml_read_default_profiles.py")
normalize_path(_XML_DEFAULT_READ_BIN "${_XML_DEFAULT_READ_BIN}")

set(_PYTHON_PKG_TOOL ${PROJECT_NAME})
set(_PYTHON_PKG_TOOL utils)

set(_RESOURCE_DIR "${_OUTPUT_PATH}/resource")
normalize_path(_RESOURCE_DIR "${_RESOURCE_DIR}")
Expand Down Expand Up @@ -198,7 +198,7 @@ from ${_PYTHON_PKG_TOOL} import *
endforeach()

execute_process(
COMMAND
COMMAND
"${PYTHON_EXECUTABLE}" "${_XML_DEFAULT_READ_BIN}" "--default-xml-path" "${_RESOURCE_DIR}"
OUTPUT_VARIABLE
_XmlDoc
Expand All @@ -207,7 +207,7 @@ from ${_PYTHON_PKG_TOOL} import *
)

if(NOT _result EQUAL 0)
message(FATAL_ERROR "Error in typesuppor generation")
message(FATAL_ERROR "Error in typesupport generation")
endif()

foreach(package ${_packages})
Expand Down Expand Up @@ -241,7 +241,7 @@ from ${_PYTHON_PKG_TOOL} import *
)

if(NOT _result EQUAL 0)
message(FATAL_ERROR "Error in typesuppor generation")
message(FATAL_ERROR "Error in typesupport generation")
endif()

set(_XmlDoc "${_XmlDoc}${_XmlGen}")
Expand Down
104 changes: 104 additions & 0 deletions snap/hooks/configure
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#!/bin/sh -e

# Confirm that the transport is valid
transport="$(snapctl get transport)"
case "$transport" in
udp4) ;;
udp6) ;;
tcp4) ;;
tcp6) ;;
serial) ;;
pseudoterminal) ;;
*)
echo "'$transport' is not a supported transport" >&2
return 1
;;
esac

# Confirm that the middleware is valid
middleware="$(snapctl get middleware)"
case "$middleware" in
dds) ;;
rtps) ;;
ced) ;;
*)
echo "'$middleware' is not a supported middleware" >&2
return 1
;;
esac

if [ "$transport" = "serial" ] || [ "$transport" = "pseudoterminal" ]; then
# A serial transport if being used, which requires a valid baud rate
# as well as a valid device
baudrate="$(snapctl get baudrate)"
if ! expr "$baudrate" : '^[0-9]\+$' > /dev/null; then
echo "'$baudrate' is not a valid baud rate" >&2
return 1
fi

device="$(snapctl get device)"
if [ -z "$device" ]; then
echo "Device must be specified" >&2
return 1
fi
else
port="$(snapctl get port)"
if ! expr "$port" : '^[0-9]\+$' > /dev/null; then
echo "'$port' is not a valid port" >&2
return 1
fi
fi

# Confirm that discovery is a boolean
discovery="$(snapctl get discovery)"
case "$discovery" in
true)
# Confirm that discovery port is valid
port="$(snapctl get discovery-port)"
if ! expr "$port" : '^[0-9]\+$' > /dev/null; then
echo "'$port' is not a valid discovery port" >&2
return 1
fi
;;
false) ;;
*)
echo "'$discovery' is not a valid boolean for discovery" >&2
return 1
;;
esac

# Confirm that the verbosity is valid
verbosity="$(snapctl get verbosity)"
if ! expr "$verbosity" : '^[0-6]$' > /dev/null; then
echo "'$verbosity' is not a valid verbosity" >&2
return 1
fi

# Confirm that p2p port is valid (assuming it's set)
p2p_port="$(snapctl get p2p-port)"
if [ -n "$p2p_port" ]; then
port="$(snapctl get p2p-port)"
if ! expr "$port" : '^[0-9]\+$' > /dev/null; then
echo "'$port' is not a valid p2p port" >&2
return 1
fi
fi

# Confirm that daemon is a boolean, and enable the service if true
daemon="$(snapctl get daemon)"
case "$daemon" in
true)
snapctl start --enable "$SNAP_INSTANCE_NAME.daemon"

# In case it was alraedy started and the configuration changed,
# restart the service
snapctl restart "$SNAP_INSTANCE_NAME.daemon"
;;
false)
snapctl stop --disable "$SNAP_INSTANCE_NAME.daemon"
;;
*)
echo "'$daemon' is not a valid boolean for daemon" >&2
return 1
;;
esac
19 changes: 19 additions & 0 deletions snap/hooks/install
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/sh -e

# Set default configuration values
snapctl set transport=udp4
snapctl set middleware=dds
snapctl set verbosity=4
snapctl set discovery=false
snapctl set discovery-port=7400
snapctl set p2p-port! # unset

# Network-specific things
snapctl set port=8888

# Serial-specific things
snapctl set baudrate=115200
snapctl set device! # unset

# By default the daemon is disabled
snapctl set daemon=false
27 changes: 27 additions & 0 deletions snap/local/micro-ros-agent-daemon
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/sh -e

set -- --middleware "$(snapctl get middleware)" "$@"
set -- --verbose "$(snapctl get verbosity)" "$@"

transport="$(snapctl get transport)"
if [ "$transport" = "serial" ] || [ "$transport" = "pseudoterminal" ]; then
set -- --dev "$(snapctl get device)" "$@"
else
set -- --port "$(snapctl get port)" "$@"
fi

if [ "$(snapctl get discovery)" = "true" ]; then
set -- --discovery "$@"

discovery_port="$(snapctl get discovery-port)"
if [ -n "$discovery_port" ]; then
set -- --disport "$discovery_port" "$@"
fi
fi

p2p_port="$(snapctl get p2p-port)"
if [ -n "$p2p_port" ]; then
set -- --p2p "$p2p_port" "$@"
fi

exec "$SNAP/lib/micro_ros_agent/micro_ros_agent" "$transport" "$@"
119 changes: 119 additions & 0 deletions snap/snapcraft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: micro-ros-agent
base: core20
version: git
summary: Bridge between Micro ROS client applications and ROS 2
description: |
Micro-ROS, whose default implementation is based on eProsima's
Micro XRCE-DDS middleware, is composed of client applications
which interact with the ROS 2 world by means of an Agent.
This agent keeps tracks of the entities created by means of
requests performed on the microcontroller side, and uses them
to communicate with the ROS 2 dataspace.

Being an extension of the Micro XRCE-DDS Agent, the micro-ROS
agent supports being run by the user like this:

$ micro-ros-agent --help

In addition, the Agent supports running as a service that can be
enabled with:

$ snap set micro-ros-agent daemon=true

If the service is enabled, by default it uses the `udp4` transport on
port 8888. The following parameters can be changed (these are
specific to the service, the `micro-ros-agent` command simply
takes command-line arguments, but the capabilities are the same):

* `transport`. Supported transports are `udp4`, `udp6`, `tcp4`,
`tcp6`, `serial`, and `pseudoterminal`. Default is `udp4`. Change
with:

$ snap set micro-ros-agent transport="new transport"

* `middleware`. Supported kinds of middleware are `ced`, `rtps`, and
`dds`. Default is `dds`. Change with:

$ snap set micro-ros-agent middleware="new middleware"

* `verbosity`. Supported verbosity levels are 0-6, defaulting to 4.
Change with:

$ snap set micro-ros-agent verbosity="selected verbosity"

* `discovery`. Enable or disable the discovery server. Defaults to
"false". Change with:

$ snap set micro-ros-agent discovery="true or false"

* `discovery-port`. Port on which the discovery server (see above)
listens. Defaults to 7400. Change with:

$ snap set micro-ros-agent discovery-port="selected port"

* `p2p-port`. Port to use for the P2P profile. Change with:

$ snap set micro-ros-agent p2p-port="selected port"

* `port`. Port on which the agent listens. Only applicable to one of
the UDP or TCP transports (see above). Defaults to 8888. Change with:

$ snap set micro-ros-agent port="selected port"

* `baudrate`. Baud rate to use when accessing serial ports. Only
applicable when using the `serial` or `pseudoterminal` transport.
Defaults to 115200. Change with:

$ snap set micro-ros-agent baudrate="baud rate"

* `device`. The serial device to use. Only applicable when using the
`serial` or `pseudoterminal` transport. Change with:

$ snap set micro-ros-agent device="device path"


grade: stable
confinement: strict

architectures:
- build-on: amd64
- build-on: arm64
- build-on: armhf
- build-on: ppc64el

parts:

uros-agent:
plugin: colcon
source: .
override-build: |
git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git -b $ROS_DISTRO
git clone https://github.com/eProsima/Micro-CDR.git -b $ROS_DISTRO
git clone https://github.com/micro-ROS/micro_ros_msgs.git -b $ROS_DISTRO
git clone https://github.com/micro-ROS/rosidl_typesupport_microxrcedds.git -b $ROS_DISTRO
git clone https://github.com/micro-ROS/rmw-microxrcedds.git -b $ROS_DISTRO
. /opt/ros/$ROS_DISTRO/setup.sh
colcon build --merge-install --install-base $SNAPCRAFT_PRIME --cmake-args '-DUAGENT_CLI_PROFILE=OFF -DUAGENT_BUILD_EXECUTABLE=OFF' --packages-up-to micro_ros_agent
build-packages: [make, gcc, g++]
stage-packages: [ros-foxy-ros2launch]

runner:
plugin: dump
source: snap/local/
organize:
'*': usr/bin/

apps:
micro-ros-agent:
command: lib/micro_ros_agent/micro_ros_agent
environment:
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib"
plugs: [network, network-bind, serial-port]
extensions: [ros2-foxy]

daemon:
command: usr/bin/micro-ros-agent-daemon
environment:
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib"
daemon: simple
plugs: [network, network-bind, serial-port]