Skip to content
Snippets Groups Projects
Commit 63b27208 authored by finn's avatar finn
Browse files

init custom_bridge for jammy

parents
No related merge requests found
Showing
with 479 additions and 0 deletions
# ROS1 Bridge Custom Interfaces w/ Humble on 22.04 (jammy)
FROM ubuntu:jammy
ARG USERNAME=nx
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ENV HOME=/home/nx
RUN addgroup \
--gid $USER_GID $USERNAME && adduser \
--uid $USER_UID \
--gid $USER_GID \
--disabled-password \
--gecos "$USERNAME user" $USERNAME
ARG DBF=noninteractive
ENV DEBIAN_FRONTEND=${DBF}
ENV MAKEFLAGS=-j4
ARG PW=10
ENV ROS2_DISTRO=humble
ENV ROS2_INSTALL_PATH=$HOME/ros2_humble
RUN mkdir -p $ROS2_INSTALL_PATH/src
ENV ROS2_INSTALL=$ROS2_INSTALL_PATH/install/setup.bash
#### GENERAL LINUX/ROS DEPENDENCIES
RUN apt-get update
RUN apt-get install -y \
build-essential \
cmake \
curl \
git \
gnupg \
locales \
lsb-release \
wget
RUN locale-gen en_US en_US.UTF-8 &&\
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG=en_US.UTF-8
#### INSTALL ROS2 HUMBLE FROM SRC
RUN apt install software-properties-common -y
RUN add-apt-repository universe -y
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null
# Install additional packages
RUN apt update && apt install -y \
python3-flake8 \
python3-flake8-blind-except \
python3-flake8-builtins \
python3-flake8-class-newline \
python3-flake8-comprehensions \
python3-flake8-deprecated \
python3-flake8-docstrings \
python3-flake8-import-order \
python3-flake8-quotes \
python3-pip \
python3-pytest \
python3-pytest-cov \
python3-pytest-repeat \
python3-pytest-rerunfailures \
python3-rosdep \
python3-setuptools \
ros-dev-tools
# Install colcon from PyPI, rather than apt packages
RUN python3 -m pip install -U colcon-common-extensions vcstool
WORKDIR $ROS2_INSTALL_PATH
# RUN vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src
# RUN apt upgrade -y
# RUN rosdep init
RUN wget https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos
RUN vcs import src < ros2.repos
RUN sudo rosdep init
RUN rosdep update
RUN rosdep install --from-paths src --ignore-src -y --rosdistro humble --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"
RUN colcon build --symlink-install --parallel-workers $PW
#### INSTALL ROS1 w/ ros-core-dev
RUN rm /etc/apt/sources.list.d/ros2.list && apt-get update -y
RUN apt remove -y \
python3-catkin-pkg \
python3-catkin-pkg-modules
RUN apt update && apt install -y \
ros-core-dev
#### INSTALL ROS2 HUMBLE DEPENDENCIES FROM SRC
ARG ROSV=ros2
# primarily conflict with catkin-pkg-modules (rqd by ros-core-dev)
# systematically discovered ros2 dependencies installed from src
RUN apt install -y \
libboost-python-dev \
libboost-iostreams-dev \
libceres-dev \
libgraphicsmagick++1-dev \
libompl-dev \
libpcl-dev \
libxtensor-dev \
libzmq3-dev \
libgazebo-dev
WORKDIR $HOME
COPY ./rosbridge_general_update_ament.sh .
RUN bash -c "./rosbridge_general_update_ament.sh"
#### COPY CUSTOM_BRIDGE
WORKDIR $HOME
COPY ./custom_bridge_ros1_ws $HOME/custom_bridge_ros1_ws/src
WORKDIR $HOME/custom_bridge_ros1_ws
RUN bash -c "catkin_make"
#### COPY NEW BRIDGE WS
COPY ./custom_bridge_ros2_ws $HOME/custom_bridge_ros2_ws
WORKDIR $HOME/custom_bridge_ros2_ws
RUN bash -c "source $HOME/ros2_humble/install/setup.bash && colcon build --symlink-install"
RUN mkdir -p $HOME/.ros/log && \
chown -R $USERNAME:$USERNAME $HOME/.ros && \
chmod -R 755 $HOME/.ros
RUN chown -R $USERNAME:$USERNAME $HOME/custom_bridge_ros1_ws && \
chmod -R 755 $HOME/custom_bridge_ros1_ws
RUN chown -R $USERNAME:$USERNAME $HOME/custom_bridge_ros2_ws && \
chmod -R 755 $HOME/custom_bridge_ros2_ws
#### INSTALL ROS1_BRIDGE
ARG ROS1_BRIDGE_ROOT_DIR=/ros1_bridge_ws
ENV ROS1_BRIDGE_ROOT_DIR=$ROS1_BRIDGE_ROOT_DIR
ARG ROS1_BRIDGE_INSTALL_DIR=$ROS1_BRIDGE_ROOT_DIR/src
ENV ROS1_BRIDGE_INSTALL_DIR=$ROS1_BRIDGE_INSTALL_DIR
WORKDIR $ROS1_BRIDGE_INSTALL_DIR
RUN git clone https://github.com/ros2/ros1_bridge
# update cmakelist of ros1_bridge to cpp17
RUN sed -i 's/# Default to C++14/# Default to C++17/' ${ROS1_BRIDGE_INSTALL_DIR}/ros1_bridge/CMakeLists.txt
RUN sed -i 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 17)/' ${ROS1_BRIDGE_INSTALL_DIR}/ros1_bridge/CMakeLists.txt
WORKDIR $ROS1_BRIDGE_ROOT_DIR
#### BUILD/COMPILE ROS1_BRIDGE
# RUN bash -c "cd ${HOME}/ht_planner_ws \
# && source ./scripts/rosbridge_source.sh \
# && cd ${ROS1_BRIDGE_ROOT_DIR} \
# && colcon build --packages-select ros1_bridge --cmake-force-configure --parallel-workers $PW \
# "
cmake_minimum_required(VERSION 2.8.3)
project(custom_bridge_msgs)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_compile_options(-Og)
find_package(catkin REQUIRED COMPONENTS
roscpp
geometry_msgs
nav_msgs
std_msgs
)
################################################
## Declare ROS messages, services and actions ##
################################################
## Generate messages in the 'msg' folder
add_message_files(
FILES
Intent.msg
IntentComponent.msg
)
## Generate services in the 'srv' folder
add_service_files(
FILES
BeginPlanning.srv
CustomSrvRes.srv
)
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
geometry_msgs
nav_msgs
std_msgs
)
catkin_package(
CATKIN_DEPENDS
roscpp
nav_msgs
std_msgs
geometry_msgs
)
include_directories(
${catkin_INCLUDE_DIRS}
)
# # Declare a C++ executable
# add_executable(dummy_start_planning_service src/custom_service.cpp)
# # Specify the dependencies for this executable
# add_dependencies(dummy_start_planning_service ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# target_link_libraries(dummy_start_planning_service ${catkin_LIBRARIES})
# # Install the executable
# install(TARGETS dummy_start_planning_service
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
# decmcts_msgs
## decmcts_msgs for ros1 (and ros1_bridge)
mount this directory into custom jammy docker image to bridge custom interfaces on 22.04
std_msgs/Header header
IntentComponent[] components
float32 prob
nav_msgs/Path path
\ No newline at end of file
<?xml version="1.0"?>
<package format="2">
<name>custom_bridge_msgs</name>
<version>0.0.0</version>
<description>The decmcts_msgs package</description>
<author>university of technology sydney</author>
<maintainer email="uts@uts.edu.au">uts</maintainer>
<license>tbd</license>
<buildtool_depend>catkin</buildtool_depend>
<depend>roscpp</depend>
<depend>nav_msgs</depend>
<depend>std_msgs</depend>
<depend>geometry_msgs</depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>
// #include "ros/ros.h"
// #include "custom_bridge_msgs/BeginPlanning.h"
// class DummyStartPlanning
// {
// public:
// DummyStartPlanning()
// {
// service_ = nh_.advertiseService("dummy_start_planning", &DummyStartPlanning::handle_service, this);
// }
// private:
// bool handle_service(custom_bridge_msgs::BeginPlanning::Request &request, custom_bridge_msgs::BeginPlanning::Response &response)
// {
// ROS_INFO_STREAM("Received request: " << request.start_pose.pose.position.x);
// response.start = true;
// // response.message = std::to_string(request.spose); // Commented out as in the original code
// return true;
// }
// ros::NodeHandle nh_;
// ros::ServiceServer service_;
// };
// int main(int argc, char **argv)
// {
// ros::init(argc, argv, "dummy_start_planning");
// DummyStartPlanning dummyStartPlanning;
// ros::spin();
// return 0;
// }
# decmcts_msgs/StartPlanning
# https://gitlab.com/dst-uts-aerial/decmcts_msgs/-/blob/master/srv/StartPlanning.srv
geometry_msgs/PoseStamped start_pose
float32 horizon_m
---
bool start
\ No newline at end of file
# decmcts_msgs/CompletePlanning
# https://gitlab.com/dst-uts-aerial/decmcts_msgs/-/blob/master/srv/CompletePlanning.srv
---
bool success
float32 reward
int32 num_iterations
nav_msgs/Path path
\ No newline at end of file
cmake_minimum_required(VERSION 3.8)
project(custom_bridge_msgs)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
#set(CMAKE_CXX_FLAGS "--std=c++20 ${CMAKE_CXX_FLAGS} -g -rdynamic")
# Find dependencies
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(visualization_msgs REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Intent.msg"
"msg/IntentComponent.msg"
"srv/BeginPlanning.srv"
"srv/CustomSrvRes.srv"
DEPENDENCIES nav_msgs
)
# Include directories
include_directories(
include
${ament_INCLUDE_DIRS}
)
# Export dependencies for downstream packages
ament_export_dependencies(rosidl_default_runtime)
# Finalize the package setup
ament_package()
std_msgs/Header header
IntentComponent[] components
float32 prob
nav_msgs/Path path
\ No newline at end of file
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>custom_bridge_msgs</name>
<version>0.0.0</version>
<description>decmcts_msgs pkg</description>
<author>university of technology sydney</author>
<maintainer email="uts@uts.edu.au">uts</maintainer>
<license>tbd</license>
<!-- Build Tool -->
<buildtool_depend>ament_cmake</buildtool_depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<!-- ROS 2 Message Generation Dependencies -->
<depend>geometry_msgs</depend>
<depend>nav_msgs</depend>
<depend>sensor_msgs</depend>
<depend>std_msgs</depend>
<depend>visualization_msgs</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
geometry_msgs/PoseStamped start_pose
float32 horizon_m
---
bool start
\ No newline at end of file
---
bool success
float32 reward
int32 num_iterations
nav_msgs/Path path
\ No newline at end of file
#!/bin/bash
DIR="$1"
shift
for pkg in "$@"; do
echo "Processing $DIR $pkg"
export AMENT_PREFIX_PATH="$AMENT_PREFIX_PATH:$DIR/$pkg" && echo "$DIR/$pkg"
export AMENT_PREFIX_PATH="$AMENT_PREFIX_PATH:$DIR/$pkg/lib/$pkg" && echo "$DIR/$pkg/lib/$pkg"
export AMENT_PREFIX_PATH="$AMENT_PREFIX_PATH:$DIR/$pkg/share/$pkg" && echo "$DIR/$pkg/share/$pkg"
export PYTHONPATH="$PYTHONPATH:$DIR/$pkg/local/lib/python3.10/dist-packages" && echo "$DIR/$pkg/local/lib/python3.10/dist-packages"
done
\ No newline at end of file
run.sh 0 → 100755
if [ "$1" == "-b" ]; then
docker build -f custom_bridge.Dockerfile -t custom_bridge_example:jammy .
else
docker run \
-it \
--rm \
--user "0" \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
--env DISPLAY=$DISPLAY \
--env NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics \
--env NVIDIA_VISIBLE_DEVICES=all \
--name ros1_bridge_example3 \
ros1_bridge_example_cb:jammy \
"/bin/bash"
fi
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment