mirror of
https://github.com/bjoernellens1/cps_loki.git
synced 2024-11-23 07:35:09 +00:00
commit
3897815d33
45
README.md
45
README.md
@ -1,4 +1,43 @@
|
|||||||
# cps_bot_mini_ws
|
# cps_bot_mini_ws
|
||||||
|
|
||||||
|
## Now working via Docker!
|
||||||
|
Follow the instructions: To use this you need the latest Docker installed and for the multiplatform build the binfmt dependencies for your system. Otherwise just use the pre-built Docker containers. I will try to make the images available public.
|
||||||
|
|
||||||
|
First let's check if you are able to pull the pre-built images:
|
||||||
|
```
|
||||||
|
docker pull ghcr.io/bjoernellens1/bot_mini_ws/bot:overlay
|
||||||
|
docker pull ghcr.io/bjoernellens1/bot_mini_ws/bot:guis
|
||||||
|
```
|
||||||
|
|
||||||
|
Run:
|
||||||
|
For instance on your PC:
|
||||||
|
```
|
||||||
|
docker compose run guis
|
||||||
|
```
|
||||||
|
|
||||||
|
This will launch the "guis" container where you will find a full ros2 humble installation and all the dependencies this robot needs.
|
||||||
|
|
||||||
|
On the robot:
|
||||||
|
```
|
||||||
|
docker compose up -d controller teleop
|
||||||
|
```
|
||||||
|
|
||||||
|
So as you can see, you will be working from the same git repository as well on the robot and your dev PC.
|
||||||
|
For the fact all can run inside Docker makes the project super portable so everyone should be able to tinker around with it. Nice bonus perks: You won't interfere with your computer's local environment. With Docker you are even able to run multiple versions of ROS simultanously, even on unsupported Linux operating systems like Debian or NixOS. Also on MacOS. Windows might be possible but not tested.
|
||||||
|
|
||||||
|
|
||||||
|
### Attention: do not launch docker compose without arguments else you will start all services at once and you won't need them.
|
||||||
|
|
||||||
|
For building your own images:
|
||||||
|
I would advise to fork the repository and start working in your own one.
|
||||||
|
```
|
||||||
|
docker buildx bake overlay --load
|
||||||
|
```
|
||||||
|
This will allow you to modify the images to your needs. Enjoy!
|
||||||
|
|
||||||
|
|
||||||
|
## Old-fashioned way:
|
||||||
|
|
||||||
temporary ws for developing ros2 control on robot mini with odrive
|
temporary ws for developing ros2 control on robot mini with odrive
|
||||||
|
|
||||||
needed repos are:
|
needed repos are:
|
||||||
@ -12,7 +51,9 @@ For initialization, just call "python3 initialize.py"
|
|||||||
TODO: extend bot_mini_bringup, python scripts for simplyfiyng startup process.
|
TODO: extend bot_mini_bringup, python scripts for simplyfiyng startup process.
|
||||||
|
|
||||||
## Useful commands:
|
## Useful commands:
|
||||||
|
```
|
||||||
rosdep install --from-paths src --ignore-src -r -y
|
rosdep install --from-paths src --ignore-src -r -y
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### Localization using predefined map and navigation
|
### Localization using predefined map and navigation
|
||||||
@ -34,9 +75,13 @@ These are the options that allows to configure the process real-time settings:
|
|||||||
|
|
||||||
Example using ros2 launch:
|
Example using ros2 launch:
|
||||||
|
|
||||||
|
```
|
||||||
ros2 launch pendulum_bringup pendulum_bringup.launch.py priority:=80 cpu-affinity:=4 lock-memory-size:=100 config-child-threads:=True
|
ros2 launch pendulum_bringup pendulum_bringup.launch.py priority:=80 cpu-affinity:=4 lock-memory-size:=100 config-child-threads:=True
|
||||||
|
```
|
||||||
|
|
||||||
Example using the executable command line arguments:
|
Example using the executable command line arguments:
|
||||||
|
|
||||||
|
```
|
||||||
ros2 run pendulum_demo pendulum_demo --priority 80 --cpu-affinity:=4 --lock-memory-size 100 --config-child-threads True
|
ros2 run pendulum_demo pendulum_demo --priority 80 --cpu-affinity:=4 --lock-memory-size 100 --config-child-threads True
|
||||||
|
```
|
||||||
Source: https://github.com/ros2-realtime-demo/pendulum/blob/rolling/docs/real_time_tutorial.md
|
Source: https://github.com/ros2-realtime-demo/pendulum/blob/rolling/docs/real_time_tutorial.md
|
||||||
|
13
dependencies.repos
Normal file
13
dependencies.repos
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
repositories:
|
||||||
|
|
||||||
|
# CPS Bot Mini Dependencies
|
||||||
|
|
||||||
|
odrive_ros2_control:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/odrive_ros2_control
|
||||||
|
version: humble-fw-v0.5.1
|
||||||
|
|
||||||
|
Lslidar_ROS2_driver:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/Lslidar_ROS2_driver
|
||||||
|
version: N10_V1.0
|
175
docker-compose.yaml
Normal file
175
docker-compose.yaml
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Base image containing dependencies.
|
||||||
|
base:
|
||||||
|
image: ghcr.io/bjoernellens1/ros2-base:humble
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
tags:
|
||||||
|
- ghcr.io/bjoernellens1/ros2-base:humble
|
||||||
|
args:
|
||||||
|
ROS_DISTRO: humble
|
||||||
|
target: base
|
||||||
|
x-bake:
|
||||||
|
platforms:
|
||||||
|
- linux/arm64
|
||||||
|
- linux/amd64
|
||||||
|
# Interactive shell
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
# Needed to display graphical applications
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
# Allows graphical programs in the container.
|
||||||
|
- DISPLAY=${DISPLAY}
|
||||||
|
- QT_X11_NO_MITSHM=1
|
||||||
|
- NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
volumes:
|
||||||
|
# Allows graphical programs in the container.
|
||||||
|
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
||||||
|
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
||||||
|
|
||||||
|
# Overlay image containing the project specific source code.
|
||||||
|
overlay:
|
||||||
|
extends: base
|
||||||
|
image: ghcr.io/bjoernellens1/cps_bot_mini_ws/bot:overlay
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
tags:
|
||||||
|
- ghcr.io/bjoernellens1/cps_bot_mini_ws/bot:overlay
|
||||||
|
target: overlay
|
||||||
|
x-bake:
|
||||||
|
platforms:
|
||||||
|
- linux/arm64
|
||||||
|
- linux/amd64
|
||||||
|
volumes:
|
||||||
|
- .:/repo
|
||||||
|
|
||||||
|
# Additional dependencies for GUI applications
|
||||||
|
guis:
|
||||||
|
extends: overlay
|
||||||
|
image: ghcr.io/bjoernellens1/cps_bot_mini_ws/bot:guis
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
tags:
|
||||||
|
- ghcr.io/bjoernellens1/cps_bot_mini_ws/bot:guis
|
||||||
|
target: guis
|
||||||
|
x-bake:
|
||||||
|
platforms:
|
||||||
|
- linux/arm64
|
||||||
|
- linux/amd64
|
||||||
|
command: >
|
||||||
|
/bin/bash
|
||||||
|
|
||||||
|
# Robot State Publisher
|
||||||
|
robot_state_publisher:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch bot_mini_bringup rsp.launch.py
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
|
||||||
|
# Controller
|
||||||
|
controller:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch bot_mini_bringup robot_controller.launch.py
|
||||||
|
devices:
|
||||||
|
- /dev/ttyUSB0:/dev/ttyUSB0
|
||||||
|
- /dev/ttyACM0:/dev/ttyACM0
|
||||||
|
# Interactive shell
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
# Needed to display graphical applications
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
# teleop
|
||||||
|
teleop:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch bot_mini_bringup robot_joy_teleop.launch.py
|
||||||
|
devices:
|
||||||
|
- /dev/input/js0:/dev/input/js0
|
||||||
|
# Interactive shell
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
# Needed to display graphical applications
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
# lidar
|
||||||
|
lidar:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch cbot_mini_bringup robot_lidar.launch.py
|
||||||
|
devices:
|
||||||
|
- /dev/ttyUSB0:/dev/ttyUSB0
|
||||||
|
- /dev/ttyUSB1:/dev/ttyUSB1
|
||||||
|
- /dev/ttyACM0:/dev/ttyACM0
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
|
||||||
|
# mapping
|
||||||
|
mapping:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch bot_mini_bringup robot_mapper.launch.py
|
||||||
|
# Interactive shell
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
|
||||||
|
# navigation
|
||||||
|
navigation:
|
||||||
|
extends: overlay
|
||||||
|
command: >
|
||||||
|
ros2 launch cbot_mini_bringup robot_navigation.launch.py
|
||||||
|
map_subscribe_transient_local:=true
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
|
||||||
|
# rviz2
|
||||||
|
rviz2:
|
||||||
|
extends: guis
|
||||||
|
command: >
|
||||||
|
rviz2
|
||||||
|
# Interactive shell
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
# Networking and IPC for ROS 2
|
||||||
|
network_mode: host
|
||||||
|
ipc: host
|
||||||
|
# Needed to display graphical applications
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
# Allows graphical programs in the container.
|
||||||
|
- DISPLAY=${DISPLAY}
|
||||||
|
- QT_X11_NO_MITSHM=1
|
||||||
|
- NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
volumes:
|
||||||
|
# Allows graphical programs in the container.
|
||||||
|
- /tmp/.X11-unix:/tmp/.X11-unix:rw
|
||||||
|
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
83
docker/Dockerfile
Normal file
83
docker/Dockerfile
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
ARG ROS_DISTRO=humble
|
||||||
|
ARG UNDERLAY_WS=/bot_mini_ws
|
||||||
|
ARG OVERLAY_WS=/bot_mini_ws
|
||||||
|
|
||||||
|
# This file should work for both amd64 and arm64 builds.
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Base Image for Bot Mini Control #
|
||||||
|
########################################
|
||||||
|
FROM ros:${ROS_DISTRO} as base
|
||||||
|
ENV ROS_DISTRO=${ROS_DISTRO}
|
||||||
|
ENV UNDERLAY_WS=${UNDERLAY_WS}
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
|
# Create Colcon workspace with external dependencies
|
||||||
|
RUN mkdir -p /${UNDERLAY_WS}/src
|
||||||
|
WORKDIR /${UNDERLAY_WS}/src
|
||||||
|
COPY dependencies.repos .
|
||||||
|
|
||||||
|
#RUN vcs import < dependencies.repos
|
||||||
|
RUN vcs import < dependencies.repos;
|
||||||
|
|
||||||
|
# Build the base Colcon workspace, installing dependencies first.
|
||||||
|
WORKDIR /${UNDERLAY_WS}
|
||||||
|
RUN source /opt/ros/${ROS_DISTRO}/setup.bash \
|
||||||
|
&& apt-get update -y \
|
||||||
|
&& rosdep install --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} -y \
|
||||||
|
&& colcon build --symlink-install \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Use Cyclone DDS as middleware
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
|
||||||
|
ros-${ROS_DISTRO}-xacro \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
# Overlay Image for Bot Mini Control #
|
||||||
|
###########################################
|
||||||
|
FROM base AS overlay
|
||||||
|
|
||||||
|
ENV OVERLAY_WS=${OVERLAY_WS}
|
||||||
|
|
||||||
|
# Create an overlay Colcon workspace
|
||||||
|
RUN mkdir -p /${OVERLAY_WS}/src
|
||||||
|
WORKDIR /${OVERLAY_WS}/src
|
||||||
|
COPY overlay.repos .
|
||||||
|
RUN vcs import < overlay.repos
|
||||||
|
|
||||||
|
WORKDIR /${OVERLAY_WS}
|
||||||
|
|
||||||
|
RUN source /${UNDERLAY_WS}/install/setup.bash \
|
||||||
|
&& colcon build --symlink-install \
|
||||||
|
&& apt-get update \
|
||||||
|
&& rosdep install --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} -y \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set up the entrypoint
|
||||||
|
COPY ./docker/entrypoint.sh /
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
# GUI Additions for Ros2 #
|
||||||
|
###########################################
|
||||||
|
FROM overlay AS guis
|
||||||
|
|
||||||
|
# Install additional GUI tools
|
||||||
|
RUN source /${UNDERLAY_WS}/install/setup.bash \
|
||||||
|
&& colcon build --symlink-install \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends ros-${ROS_DISTRO}-rviz2 \
|
||||||
|
&& rosdep install --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} -y \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set up the entrypoint
|
||||||
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||||
|
|
||||||
|
LABEL org.opencontainers.image.source=https://github.com/bjoernellens1/cps_bot_mini_ws
|
23
docker/entrypoint.sh
Normal file
23
docker/entrypoint.sh
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Basic entrypoint for ROS / Colcon Docker containers
|
||||||
|
|
||||||
|
# Source ROS 2
|
||||||
|
source /opt/ros/${ROS_DISTRO}/setup.bash
|
||||||
|
echo "Sourced ROS 2 ${ROS_DISTRO}"
|
||||||
|
|
||||||
|
# Source the base workspace, if built
|
||||||
|
if [ -f ${UNDERLAY_WS}/install/setup.bash ]
|
||||||
|
then
|
||||||
|
source ${UNDERLAY_WS}/install/setup.bash
|
||||||
|
echo "Sourced CPS Bot Mini base workspace"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Source the overlay workspace, if built
|
||||||
|
if [ -f /overlay_ws/install/setup.bash ]
|
||||||
|
then
|
||||||
|
source /overlay_ws/install/setup.bash
|
||||||
|
echo "Sourced CPS BOt Mini Overlay workspace"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute the command passed into this entrypoint
|
||||||
|
exec "$@"
|
33
overlay.repos
Normal file
33
overlay.repos
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
repositories:
|
||||||
|
|
||||||
|
cps_rmp220_support:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/cps_rmp220_support.git
|
||||||
|
version: main
|
||||||
|
|
||||||
|
rmp220_teleop:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/rmp220_teleop.git
|
||||||
|
version: main
|
||||||
|
|
||||||
|
cam_openCV:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/ros2_cam_openCV.git
|
||||||
|
version: main
|
||||||
|
|
||||||
|
bot_mini_teleop:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/rmp220_teleop
|
||||||
|
version: bot_mini
|
||||||
|
|
||||||
|
bot_mini_description:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/bot_mini_description
|
||||||
|
|
||||||
|
cam_openCV:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/ros2_cam_openCV
|
||||||
|
|
||||||
|
bot_mini_bringup:
|
||||||
|
type: git
|
||||||
|
url: https://github.com/bjoernellens1/bot_mini_bringup
|
Loading…
Reference in New Issue
Block a user