From 09ea6230faeb73f6ca88c2ddf05bb525381fae0e Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 15:14:26 +0100
Subject: [PATCH 001/165] Changed to local images
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 7d522600..eeae1edc 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,10 @@
Packages for the simulation of the Summit XL
-
-
-
-
+
+
+
+
From 575860a076d79ff1f41e515eb7cb1127b6fc3f53 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 15:21:45 +0100
Subject: [PATCH 002/165] Moved vcstool repo file to repos folder
---
{doc => repos}/summit_xl_sim.repos | 0
{doc => repos}/summit_xl_sim_devel.repos | 0
2 files changed, 0 insertions(+), 0 deletions(-)
rename {doc => repos}/summit_xl_sim.repos (100%)
rename {doc => repos}/summit_xl_sim_devel.repos (100%)
diff --git a/doc/summit_xl_sim.repos b/repos/summit_xl_sim.repos
similarity index 100%
rename from doc/summit_xl_sim.repos
rename to repos/summit_xl_sim.repos
diff --git a/doc/summit_xl_sim_devel.repos b/repos/summit_xl_sim_devel.repos
similarity index 100%
rename from doc/summit_xl_sim_devel.repos
rename to repos/summit_xl_sim_devel.repos
From 8b0ce6285631e68b9f188b0584647dc783cc42f6 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 15:21:55 +0100
Subject: [PATCH 003/165] added changelog file
---
CHANGELOG.md | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..e69de29b
From 70609926aefc31b9ab86247878a8c0faae435ed2 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 15:22:03 +0100
Subject: [PATCH 004/165] added dockignore file
---
.dockerignore | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 .dockerignore
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..e69de29b
From 7b9f7eaddb7573728f90660d17a808a558c2ee0e Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 15:23:48 +0100
Subject: [PATCH 005/165] added first stage of dockerfile
---
Dockerfile | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 Dockerfile
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..ec9678c2
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,2 @@
+FROM osrf/ros:melodic-desktop-full
+MAINTAINER Guillem Gari
From 02150e649c90384c957e42284b0f83ebb92a5bf8 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:25:53 +0100
Subject: [PATCH 006/165] style cleanup
---
.../launch/summit_xl_one_robot.launch | 20 +++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/summit_xl_gazebo/launch/summit_xl_one_robot.launch b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
index 647ce1a0..27eac689 100644
--- a/summit_xl_gazebo/launch/summit_xl_one_robot.launch
+++ b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
@@ -12,7 +12,7 @@
-
+
@@ -49,13 +49,13 @@
-
@@ -98,7 +98,7 @@
-
+
@@ -138,7 +138,7 @@
-
+
From 7980506c6f3eb5d6254f0453916e6d1eddc65806 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:26:27 +0100
Subject: [PATCH 007/165] Removed startup of robot local control
---
summit_xl_gazebo/launch/summit_xl_one_robot.launch | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/summit_xl_gazebo/launch/summit_xl_one_robot.launch b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
index 27eac689..8c707d30 100644
--- a/summit_xl_gazebo/launch/summit_xl_one_robot.launch
+++ b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
@@ -203,13 +203,13 @@
-
-
+
+
From 677fbdbb2fe50c6cb50b3fe5757c6cdee0ed1dcd Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:27:21 +0100
Subject: [PATCH 008/165] style clean up
---
summit_xl_gazebo/package.xml | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/summit_xl_gazebo/package.xml b/summit_xl_gazebo/package.xml
index f166517e..f55e5571 100644
--- a/summit_xl_gazebo/package.xml
+++ b/summit_xl_gazebo/package.xml
@@ -27,8 +27,6 @@
tf
gazebo_ros
summit_xl_control
- summit_xl_description
- summit_xl_robot_control
summit_xl_description
xacro
hector_gazebo_plugins
@@ -41,7 +39,7 @@
std_msgs
tf
gazebo_ros
- summit_xl_control
+ summit_xl_control
summit_xl_description
gazebo_plugins
summit_xl_robot_control
@@ -52,10 +50,10 @@
velocity_controllers
gazebo_ros_control
ros_control
- ros_controllers
+ ros_controllers
-
+
From 5f7048dca66d6f09a5d998a2ae921e8ebb5d3986 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:27:53 +0100
Subject: [PATCH 009/165] removed robot-local-control dependancy on gazebo
package
---
summit_xl_gazebo/package.xml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/summit_xl_gazebo/package.xml b/summit_xl_gazebo/package.xml
index f55e5571..222e9cee 100644
--- a/summit_xl_gazebo/package.xml
+++ b/summit_xl_gazebo/package.xml
@@ -28,6 +28,8 @@
gazebo_ros
summit_xl_control
summit_xl_description
+
+ summit_xl_description
xacro
hector_gazebo_plugins
joint_state_controller
@@ -42,7 +44,7 @@
summit_xl_control
summit_xl_description
gazebo_plugins
- summit_xl_robot_control
+
xacro
hector_gazebo_plugins
gazebo_plugins
From bd6509d24b1efa6f04d0e406afc73808e11b4886 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:33:34 +0100
Subject: [PATCH 010/165] removed perception on gazebo launch
---
summit_xl_gazebo/launch/summit_xl_one_robot.launch | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/summit_xl_gazebo/launch/summit_xl_one_robot.launch b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
index 8c707d30..72909fa4 100644
--- a/summit_xl_gazebo/launch/summit_xl_one_robot.launch
+++ b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
@@ -190,13 +190,13 @@
-
+
From 9e6adbbbc25ba4f76fe8fd1e90a295bbae1a5218 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:36:30 +0100
Subject: [PATCH 011/165] removed perception dependency on gazebo
---
summit_xl_gazebo/package.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/summit_xl_gazebo/package.xml b/summit_xl_gazebo/package.xml
index 222e9cee..d444e707 100644
--- a/summit_xl_gazebo/package.xml
+++ b/summit_xl_gazebo/package.xml
@@ -29,7 +29,7 @@
summit_xl_control
summit_xl_description
- summit_xl_description
+
xacro
hector_gazebo_plugins
joint_state_controller
From 0775b341614ad549698cd5b9d07201546c81c61c Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 18:55:27 +0100
Subject: [PATCH 012/165] first version of docker image
---
Dockerfile | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/Dockerfile b/Dockerfile
index ec9678c2..4cb029dd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,2 +1,64 @@
FROM osrf/ros:melodic-desktop-full
MAINTAINER Guillem Gari
+
+# Non Root user
+ARG user_name=ros
+ARG user_uid=1000
+ARG user_home=/home/$user_name
+ARG user_shell=/bin/bash
+ARG ck_dir=$user_home/catkin_ws
+ARG ck_src_dir=$ck_dir/src
+ARG ros_brup_pkg=rostful_bringup
+
+RUN useradd -m -d $user_home -s $user_shell -u $user_uid $user_name \
+ && echo "PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u\[\033[00m\]@\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> ~/.bashrc
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update \
+ && apt-get install -q -y \
+ wget \
+ apt-utils \
+ # dialog \
+ sudo \
+ && apt-get clean -q -y \
+ && apt-get autoremove -q -y \
+ && rm -rf /var/lib/apt/lists/* \
+ && echo '%ros ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
+
+RUN apt-get update \
+ && apt upgrade -y \
+ && apt-get clean -q -y \
+ && apt-get autoremove -q -y \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN apt-get update \
+ && apt-get install -q -y \
+ python3-vcstool \
+ && apt-get clean -q -y \
+ && apt-get autoremove -q -y \
+ && rm -rf /var/lib/apt/lists/*
+
+USER $user_name
+
+RUN mkdir -p $ck_src_dir
+WORKDIR $ck_dir
+
+WORKDIR $ck_dir
+
+COPY --chown=$user_name \
+ repos/summit_xl_sim_devel.repos \
+ /tmp
+
+RUN true \
+ && vcs import --input /tmp/summit_xl_sim_devel.repos \
+ && true
+
+RUN true \
+ && rosdep update \
+ && echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections \
+ && sudo apt-get update \
+ && rosdep install --from-paths src --ignore-src -y \
+ && sudo apt-get clean -q -y \
+ && sudo apt-get autoremove -q -y \
+ && sudo rm -rf /var/lib/apt/lists/*
\ No newline at end of file
From 4e2aa670f7e9eec5a35ad0ec91668db2bf09dc0b Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:29:57 +0100
Subject: [PATCH 013/165] added bashrc config
---
Dockerfile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Dockerfile b/Dockerfile
index 4cb029dd..56c42102 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -42,6 +42,10 @@ RUN apt-get update \
USER $user_name
RUN mkdir -p $ck_src_dir
+RUN true \
+ && echo "PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]@\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> ~/.bashrc \
+ && echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc \
+ && echo "source $ck_dir/devel/setup.bash" >> ~/.bashrc
WORKDIR $ck_dir
WORKDIR $ck_dir
From afccf400f5cc4630b05863cc46be7171b08be3d2 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:30:20 +0100
Subject: [PATCH 014/165] style minor fix
---
Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 56c42102..62c63c43 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -58,11 +58,11 @@ RUN true \
&& vcs import --input /tmp/summit_xl_sim_devel.repos \
&& true
-RUN true \
+RUN true \
&& rosdep update \
&& echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections \
&& sudo apt-get update \
&& rosdep install --from-paths src --ignore-src -y \
&& sudo apt-get clean -q -y \
&& sudo apt-get autoremove -q -y \
- && sudo rm -rf /var/lib/apt/lists/*
\ No newline at end of file
+ && sudo rm -rf /var/lib/apt/lists/*
From 0d7332c37be015c3ce14b07211fe4c1cc4dea559 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:30:30 +0100
Subject: [PATCH 015/165] added compile of packages
---
Dockerfile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Dockerfile b/Dockerfile
index 62c63c43..6701ab75 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -66,3 +66,7 @@ RUN true \
&& sudo apt-get clean -q -y \
&& sudo apt-get autoremove -q -y \
&& sudo rm -rf /var/lib/apt/lists/*
+
+RUN true \
+ && . /opt/ros/melodic/setup.sh \
+ && catkin_make
\ No newline at end of file
From f7fe4f1d0f8f5562064487564e6cfb720fc2b1a8 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:30:47 +0100
Subject: [PATCH 016/165] added first attempt of docker-compose
---
docker-compose.yml | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 docker-compose.yml
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..1d1d1a68
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,23 @@
+---
+version: "3.7"
+services:
+ summit_xl_sim:
+ image: .
+ # command: "bash -c 'while true ;do sleep 60 ;done'"
+ command: "sleep 5000"
+ environment:
+ ROS_MASTER_URI: "http://localhost:11311"
+ GAZEBO_MASTER_URI: "http://localhost:11345"
+ # DISPLAY: $DISPLAY
+ # QT_X11_NO_MITSHM: 1
+ # volumes:
+ # - type: bind
+ # source: /tmp/.X11-unix
+ # target: /tmp/.X11-unix
+ # deploy:
+ # resources:
+ # reservations:
+ # devices:
+ # - driver: nvidia
+ # count: 1
+ # capabilities: [gpu, utility]
From e1b4116738f5c90fb97c4fea97645e87307cc81d Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:46:47 +0100
Subject: [PATCH 017/165] first working version of compose
---
docker-compose.yml | 35 ++++++++++++++++++-----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 1d1d1a68..525c0ceb 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,23 +1,24 @@
---
version: "3.7"
services:
- summit_xl_sim:
- image: .
- # command: "bash -c 'while true ;do sleep 60 ;done'"
- command: "sleep 5000"
+ base:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ command: "bash -c 'while true ;do sleep 60 ;done'"
environment:
ROS_MASTER_URI: "http://localhost:11311"
GAZEBO_MASTER_URI: "http://localhost:11345"
- # DISPLAY: $DISPLAY
- # QT_X11_NO_MITSHM: 1
- # volumes:
- # - type: bind
- # source: /tmp/.X11-unix
- # target: /tmp/.X11-unix
- # deploy:
- # resources:
- # reservations:
- # devices:
- # - driver: nvidia
- # count: 1
- # capabilities: [gpu, utility]
+ DISPLAY: $DISPLAY
+ QT_X11_NO_MITSHM: 1
+ volumes:
+ - type: bind
+ source: /tmp/.X11-unix
+ target: /tmp/.X11-unix
+ deploy:
+ resources:
+ reservations:
+ devices:
+ - driver: nvidia
+ count: 1
+ capabilities: [gpu, utility]
From 73d5a7287e2f59ddd705df2c58bc83e447bc25a2 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:47:14 +0100
Subject: [PATCH 018/165] Corrected xml malformed
---
summit_xl_gazebo/launch/summit_xl_one_robot.launch | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/summit_xl_gazebo/launch/summit_xl_one_robot.launch b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
index 72909fa4..53e505df 100644
--- a/summit_xl_gazebo/launch/summit_xl_one_robot.launch
+++ b/summit_xl_gazebo/launch/summit_xl_one_robot.launch
@@ -202,14 +202,14 @@
+
+-->
From 643cf5c219dca68887940cb4eb3fec59f751b90d Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 19:47:33 +0100
Subject: [PATCH 019/165] added imu_complementary_filter run dependecy
---
summit_xl_gazebo/package.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/summit_xl_gazebo/package.xml b/summit_xl_gazebo/package.xml
index d444e707..c8cfea3c 100644
--- a/summit_xl_gazebo/package.xml
+++ b/summit_xl_gazebo/package.xml
@@ -53,6 +53,7 @@
gazebo_ros_control
ros_control
ros_controllers
+ imu_complementary_filter
From ed9b3eff1a0f3972228ce61268143926436675ba Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 20:45:36 +0100
Subject: [PATCH 020/165] added required enviroment for nvidia
---
Dockerfile | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index 6701ab75..221ee9ed 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -69,4 +69,11 @@ RUN true \
RUN true \
&& . /opt/ros/melodic/setup.sh \
- && catkin_make
\ No newline at end of file
+ && catkin_make
+
+ENV NVIDIA_VISIBLE_DEVICES \
+ ${NVIDIA_VISIBLE_DEVICES:-all}
+ENV NVIDIA_DRIVER_CAPABILITIES \
+ ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
+
+
From ad98966708a22f8078d995d2cb7ff9b9079d0232 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 20:46:44 +0100
Subject: [PATCH 021/165] updated docker-compose for >=1.28 but not working
with gui
---
docker-compose.yml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 525c0ceb..ed1d80de 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,16 +5,21 @@ services:
build:
context: .
dockerfile: Dockerfile
- command: "bash -c 'while true ;do sleep 60 ;done'"
+ # command: "bash -c 'while true ;do sleep 60 ;done'"
+ command: "bash -c 'source /opt/ros/melodic/setup.bash &&
+ source /home/ros/catkin_ws/devel/setup.bash &&
+ roslaunch summit_xl_sim_bringup summit_xl_complete.launch'"
environment:
ROS_MASTER_URI: "http://localhost:11311"
GAZEBO_MASTER_URI: "http://localhost:11345"
DISPLAY: $DISPLAY
QT_X11_NO_MITSHM: 1
+ NVIDIA_VISIBLE_DEVICES: 0
volumes:
- type: bind
source: /tmp/.X11-unix
target: /tmp/.X11-unix
+ - /dev/dri:/dev/dri
deploy:
resources:
reservations:
From 4f730ebf61a67bb927018d46d00ec4fa6bbb6a7f Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Mon, 1 Mar 2021 20:47:43 +0100
Subject: [PATCH 022/165] added script for launching simulation
---
simulation-in-container-run.sh | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100755 simulation-in-container-run.sh
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
new file mode 100755
index 00000000..70847acb
--- /dev/null
+++ b/simulation-in-container-run.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+docker build -t summit_xl_sim .
+xhost + local:root
+echo "roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
+docker container rm --force summit_xl_sim
+docker run --gpus all --rm \
+ --env="DISPLAY=$DISPLAY" \
+ --env="QT_X11_NO_MITSHM=1" \
+ --device=/dev/dri \
+ --group-add video \
+ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
+ --env ROS_MASTER_URI="http://localhost:11311" \
+ --env GAZEBO_MASTER_URI="http://localhost:11345" \
+ --env NVIDIA_VISIBLE_DEVICES=0 \
+ --name summit_xl_sim \
+ summit_xl_sim:latest \
+ bash -c "source /opt/ros/melodic/setup.bash &&
+ source /home/ros/catkin_ws/devel/setup.bash &&
+ roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
+xhost - local:root
From 78eafbcf6c8b55a8a108d520d1778752c05c6ee3 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 09:58:04 +0100
Subject: [PATCH 023/165] added a check before removing the docker container
instance
---
simulation-in-container-run.sh | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 70847acb..645add00 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -2,7 +2,9 @@
docker build -t summit_xl_sim .
xhost + local:root
echo "roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
-docker container rm --force summit_xl_sim
+if docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$; then
+ docker container rm --force summit_xl_sim
+fi
docker run --gpus all --rm \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
From 2649f4ed9e8ddae7135c71bb4eee30386284a857 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 09:58:19 +0100
Subject: [PATCH 024/165] added the header on script
---
simulation-in-container-run.sh | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 645add00..7cb06a4b 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -1,4 +1,12 @@
#!/bin/bash
+#
+# Description: Summit XL simulation on docker
+# bring-up script
+#
+# Company: Robotnik Automation S.L.L.
+# Creation Year: 2021
+# Author: Guillem Gari
+
docker build -t summit_xl_sim .
xhost + local:root
echo "roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
From 9677c6114782c60609a7ef366a84040cf24ac29a Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 09:58:40 +0100
Subject: [PATCH 025/165] added changelog
---
CHANGELOG.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e69de29b..bd3a9b24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Changelog
+
+## 2021-03-21
+
+### Added
+- Added Docker image build for nvidia
+- Added test script
\ No newline at end of file
From 45cc9e0a00b30e65abcc39064259beed2be3e2ec Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 09:58:57 +0100
Subject: [PATCH 026/165] added gazebo changelog on markdown format
---
summit_xl_gazebo/CHANGELOG.md | 89 +++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
create mode 100644 summit_xl_gazebo/CHANGELOG.md
diff --git a/summit_xl_gazebo/CHANGELOG.md b/summit_xl_gazebo/CHANGELOG.md
new file mode 100644
index 00000000..d78b322b
--- /dev/null
+++ b/summit_xl_gazebo/CHANGELOG.md
@@ -0,0 +1,89 @@
+# Changelog for package summit\_xl\_gazebo
+
+## 1.1.3 (2018-05-15)
+
+- updated rviz config
+- gazebo: updating deps and maintainers
+- Add parameters to change navigation and localization mode
+- \[summit\_xl\_gazebo\] spawner of controllers moved to
+ summit\_xl\_control package
+- added arg gui to launch gazebo with gui or not
+- added the build depend of hector\_gazebo\_plugin
+- config files of control moved to summit\_xl\_control pkg
+- allow to launch worlds of external pkgs
+- minor changes
+- sim: setting the omni drive configuration for SummitXL Steel
+- gazebo: adding rviz config for summit XLS
+- sim\_bringup: updating launch files and deleting old ones
+- gazebo: remapping params of launch files and new one for gazebo &
+ rviz
+- gazebo: dependency of hector\_gazebo\_plugins
+- gazebo: adding param enable\_odom\_tf to the config
+- gazebo: minor changes
+- urdf model changed to summit\_xl\_std
+- \[summit\_xl\_gazebo\]:map frame now is /robot\_id\_map
+- \[summit\_xl\_gazebo\]:some tabs in launch file
+- \[summit\_xl\_gazebo\]:added gmapping include option
+- \[summit\_xl\_gazebo\]:launch file updated to multirobot\]
+- \[summit\_xl\_gazebo\]: yaml files updated with prefix
+- \[summit\_xl\_gazebo\]:rviz config updated
+- \[summit\_xl\_gazebo\]:rviz config added of office map
+- \[summit\_xl\_gazebo\]:summit\_xl\_multi.launch modified to 3 robots
+- added multirobot config and launch files
+- Merge branch 'kinetic-devel' into kinetic-multirobot-devel
+- Merge branch 'indigo-devel' into kinetic-devel
+- multi-robot launch modified
+- added rviz config
+- added launch for a single robot
+- added diff\_drive plugin controller configuration
+- summit\_xl\_sim multirobot branch
+- summit\_xl modified to multirobot
+- summit\_xl modified to multirobot
+- gazebo: adding flag to enable/disable the fake transform from map to
+ odom
+- gazebo: update of rviz config
+- gazebo: adding pad to multi launch
+- gazebo: adding rviz config
+- adding gazebo launch for multirobots
+- updated simulation with summit\_xl\_robot\_control
+- summit\_xl\_sim: removed temp files
+- 1.0.10
+
+## 1.0.10 (2016-08-24)
+
+## 1.0.9 (2016-07-13)
+
+## 1.0.8 (2016-07-12)
+
+## 1.0.7 (2016-07-12)
+
+## 1.0.6 (2016-07-04)
+
+## 1.0.5 (2016-07-01)
+
+## 1.0.4 (2016-07-01)
+
+- modified dependencies
+- Contributors: carlos3dx
+
+## 1.0.3 (2016-07-01)
+
+- Removed dependencies
+- Contributors: carlos3dx
+
+## 1.0.2 (2016-07-01)
+
+## 1.0.1 (2016-06-28)
+
+- Some spring cleaning
+- modified CMakeLists.txt and added urls and maintainers to package
+ files
+- minor changes
+- added summit\_xl\_hls\_omni.launch file
+- launch pad from gazebo launch
+- Move base launch created. Still not working
+- Mux added. Old files removed.
+- using summit\_xl.urdf.xacro instead of previous standalone, using
+ common pad
+- modified to use summit\_xl\_standalone.urdf.xacro robot file
+- chnaged summit\_xl.ga
\ No newline at end of file
From 494186effff39bd045044a3641565b7b913b2579 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 10:50:34 +0100
Subject: [PATCH 027/165] added changelog.md
---
summit_xl_sim/CHANGELOG.md | 55 ++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 summit_xl_sim/CHANGELOG.md
diff --git a/summit_xl_sim/CHANGELOG.md b/summit_xl_sim/CHANGELOG.md
new file mode 100644
index 00000000..6d2eb7e2
--- /dev/null
+++ b/summit_xl_sim/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog for package summit\_xl\_sim
+
+## 1.1.3 (2018-05-15)
+
+- removed summit\_xl\_control pkg
+- solved package.xml sintax error
+- Merge branch 'kinetic-devel' into kinetic-multirobot-devel
+- Merge branch 'indigo-devel' into kinetic-devel
+- summit\_xl\_sim: removed temp files
+- 1.0.10
+
+## 1.1.1 (2016-08-24)
+
+## >>>>>>> indigo-devel 1.0.10 (2016-08-24)
+
+
+## 1.0.9 (2016-07-13)
+
+## 1.0.8 (2016-07-12)
+
+## 1.0.7 (2016-07-12)
+
+## 1.0.6 (2016-07-04)
+
+## 1.0.5 (2016-07-01)
+
+## 1.0.4 (2016-07-01)
+
+## 1.0.3 (2016-07-01)
+
+## 1.0.2 (2016-07-01)
+
+## 1.0.1 (2016-06-28)
+
+- Modified authors from package.xml
+- Some spring cleaning
+- fixed merge
+- modified CMakeLists.txt and added urls and maintainers to package
+ files
+- Added maintainers
+- Changed maintainer
+- minor changes
+- minor changes
+- added authors, website and bugtracker
+- Added dependencies to summit\_xl\_sim meta package
+- fixing package dependencies
+- 1.0.0
+- Deleting summit\_xl\_joint\_state. Creating summit\_xl\_sim
+ metapackage
+- Contributors: JorgeArino, carlos3dx, mcantero
+- fixing package dependencies
+- 1.0.0
+- Deleting summit\_xl\_joint\_state. Creating summit\_xl\_sim
+ metapackage
+- Contributors: JorgeArino
\ No newline at end of file
From 77bed1ef4be89b82b4b1d26423e8aaa91d488f9e Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:07:15 +0100
Subject: [PATCH 028/165] added changelog.md
---
summit_xl_sim_bringup/CHANGELOG.md | 71 ++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 summit_xl_sim_bringup/CHANGELOG.md
diff --git a/summit_xl_sim_bringup/CHANGELOG.md b/summit_xl_sim_bringup/CHANGELOG.md
new file mode 100644
index 00000000..c1ddb1d6
--- /dev/null
+++ b/summit_xl_sim_bringup/CHANGELOG.md
@@ -0,0 +1,71 @@
+# Changelog for package summit\_xl\_sim\_bringup
+
+## 1.1.3 (2018-05-15)
+
+- added three robots
+- added arguments for the third robot
+- sim\_bringup: Summit Steel and planar plugin not working with
+ robot\_localization.
+- \[summit\_xl\_sim\_bringup\] added map\_file\_b parameter
+- \[summit\_xl\_sim\_bringup\] added launch parameters of robot b
+- removed obsolete omni launcher
+- Modify default gazebo\_world arg to match previous changes and fix
+ errors
+- \[summit\_xl\_sim\_bringup\]:added map as an argument
+- sim: setting the omni drive configuration for SummitXL Steel
+- sim\_bring: new launch file for summit XL STEEL
+- sim\_bringup: updating launch files and deleting old ones
+- \[summit\_xl\_sim\_bringup\]:map\_server moved inside move\_base
+- changed default xacro files
+- \[summit\_xl\_sim\_bringup\]:added some comments
+- \[summit\_xl\_bringup\]:added gmapping arg to launch the gmapping
+ node
+- \[summit\_xl\_sim\_bringup\]:launch multirobot
+- Merge branch 'kinetic-devel' into kinetic-multirobot-devel
+- Merge branch 'indigo-devel' into kinetic-devel
+- removed summit\_xl\_robot control as default controller
+- updated simulation with summit\_xl\_robot\_control
+- summit\_xl\_sim: removed temp files
+- summit\_xl\_sim\_bringup: adding robot\_localization nodes needed
+ for simulation
+- 1.0.10
+
+## 1.1.1 (2016-08-24)
+
+## 1.0.10 (2016-08-24)
+
+## 1.0.9 (2016-07-13)
+
+## 1.0.8 (2016-07-12)
+
+- deleted dependency
+
+## 1.0.7 (2016-07-12)
+
+## 1.0.6 (2016-07-04)
+
+- Modified CMakeLists.txt
+
+## 1.0.5 (2016-07-01)
+
+## 1.0.4 (2016-07-01)
+
+## 1.0.3 (2016-07-01)
+
+## 1.0.2 (2016-07-01)
+
+## 1.0.1 (2016-06-28)
+
+- modified CMakeLists.txt and added urls and maintainers to package
+ files
+- minor changes
+- updated maitainer
+- launch pad from gazebo launch
+- Move base launch created. Still not working
+- Mux added. Old files removed.
+- moved summit\_xl\_bringup to summit\_xl\_sim\_bringup
+- updated maitainer
+- launch pad from gazebo launch
+- Move base launch created. Still not working
+- Mux added. Old files removed.
+- moved summit\_xl\_bringup to summit\_xl\_sim\_bringup
\ No newline at end of file
From 8e491bab9c8bab9caaa4f744133c8add68332a08 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:07:48 +0100
Subject: [PATCH 029/165] removed old changelog.rst on sim_bringup
---
summit_xl_sim_bringup/CHANGELOG.rst | 77 -----------------------------
1 file changed, 77 deletions(-)
delete mode 100644 summit_xl_sim_bringup/CHANGELOG.rst
diff --git a/summit_xl_sim_bringup/CHANGELOG.rst b/summit_xl_sim_bringup/CHANGELOG.rst
deleted file mode 100644
index 81c8a985..00000000
--- a/summit_xl_sim_bringup/CHANGELOG.rst
+++ /dev/null
@@ -1,77 +0,0 @@
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Changelog for package summit_xl_sim_bringup
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1.1.3 (2018-05-15)
-------------------
-* added three robots
-* added arguments for the third robot
-* sim_bringup: Summit Steel and planar plugin not working with robot_localization.
-* [summit_xl_sim_bringup] added map_file_b parameter
-* [summit_xl_sim_bringup] added launch parameters of robot b
-* removed obsolete omni launcher
-* Modify default gazebo_world arg to match previous changes and fix errors
-* [summit_xl_sim_bringup]:added map as an argument
-* sim: setting the omni drive configuration for SummitXL Steel
-* sim_bring: new launch file for summit XL STEEL
-* sim_bringup: updating launch files and deleting old ones
-* [summit_xl_sim_bringup]:map_server moved inside move_base
-* changed default xacro files
-* [summit_xl_sim_bringup]:added some comments
-* [summit_xl_bringup]:added gmapping arg to launch the gmapping node
-* [summit_xl_sim_bringup]:launch multirobot
-* Merge branch 'kinetic-devel' into kinetic-multirobot-devel
-* Merge branch 'indigo-devel' into kinetic-devel
-* removed summit_xl_robot control as default controller
-* updated simulation with summit_xl_robot_control
-* summit_xl_sim: removed temp files
-* summit_xl_sim_bringup: adding robot_localization nodes needed for simulation
-* 1.0.10
-
-1.1.1 (2016-08-24)
-------------------
-
-1.0.10 (2016-08-24)
--------------------
-
-1.0.9 (2016-07-13)
-------------------
-
-1.0.8 (2016-07-12)
-------------------
-* deleted dependency
-
-1.0.7 (2016-07-12)
-------------------
-
-1.0.6 (2016-07-04)
-------------------
-* Modified CMakeLists.txt
-
-1.0.5 (2016-07-01)
-------------------
-
-1.0.4 (2016-07-01)
-------------------
-
-1.0.3 (2016-07-01)
-------------------
-
-1.0.2 (2016-07-01)
-------------------
-
-1.0.1 (2016-06-28)
-------------------
-* modified CMakeLists.txt and added urls and maintainers to package files
-* minor changes
-* updated maitainer
-* launch pad from gazebo launch
-* Move base launch created. Still not working
-* Mux added. Old files removed.
-* moved summit_xl_bringup to summit_xl_sim_bringup
-* updated maitainer
-* launch pad from gazebo launch
-* Move base launch created. Still not working
-* Mux added. Old files removed.
-* moved summit_xl_bringup to summit_xl_sim_bringup
-
From f87b1aba97f7a3da3e8cf20f77a720b4d1494fa5 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:08:14 +0100
Subject: [PATCH 030/165] removed old changelog.rst on sim
---
summit_xl_sim/CHANGELOG.rst | 65 -------------------------------------
1 file changed, 65 deletions(-)
delete mode 100644 summit_xl_sim/CHANGELOG.rst
diff --git a/summit_xl_sim/CHANGELOG.rst b/summit_xl_sim/CHANGELOG.rst
deleted file mode 100644
index 8041e2bc..00000000
--- a/summit_xl_sim/CHANGELOG.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Changelog for package summit_xl_sim
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1.1.3 (2018-05-15)
-------------------
-* removed summit_xl_control pkg
-* solved package.xml sintax error
-* Merge branch 'kinetic-devel' into kinetic-multirobot-devel
-* Merge branch 'indigo-devel' into kinetic-devel
-* summit_xl_sim: removed temp files
-* 1.0.10
-
-1.1.1 (2016-08-24)
-------------------
-
->>>>>>> indigo-devel
-1.0.10 (2016-08-24)
--------------------
-
-1.0.9 (2016-07-13)
-------------------
-
-1.0.8 (2016-07-12)
-------------------
-
-1.0.7 (2016-07-12)
-------------------
-
-1.0.6 (2016-07-04)
-------------------
-
-1.0.5 (2016-07-01)
-------------------
-
-1.0.4 (2016-07-01)
-------------------
-
-1.0.3 (2016-07-01)
-------------------
-
-1.0.2 (2016-07-01)
-------------------
-
-1.0.1 (2016-06-28)
-------------------
-* Modified authors from package.xml
-* Some spring cleaning
-* fixed merge
-* modified CMakeLists.txt and added urls and maintainers to package files
-* Added maintainers
-* Changed maintainer
-* minor changes
-* minor changes
-* added authors, website and bugtracker
-* Added dependencies to summit_xl_sim meta package
-* fixing package dependencies
-* 1.0.0
-* Deleting summit_xl_joint_state. Creating summit_xl_sim metapackage
-* Contributors: JorgeArino, carlos3dx, mcantero
-
-* fixing package dependencies
-* 1.0.0
-* Deleting summit_xl_joint_state. Creating summit_xl_sim metapackage
-* Contributors: JorgeArino
From c433cd4b3eaaa3dbe87cd774b6fdad24d3b84151 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:08:57 +0100
Subject: [PATCH 031/165] removed old changelog.rst on gazebo
---
summit_xl_gazebo/CHANGELOG.rst | 153 ---------------------------------
1 file changed, 153 deletions(-)
delete mode 100644 summit_xl_gazebo/CHANGELOG.rst
diff --git a/summit_xl_gazebo/CHANGELOG.rst b/summit_xl_gazebo/CHANGELOG.rst
deleted file mode 100644
index 82e57ec7..00000000
--- a/summit_xl_gazebo/CHANGELOG.rst
+++ /dev/null
@@ -1,153 +0,0 @@
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Changelog for package summit_xl_gazebo
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1.1.3 (2018-05-15)
-------------------
-* updated rviz config
-* gazebo: updating deps and maintainers
-* Add parameters to change navigation and localization mode
-* [summit_xl_gazebo] spawner of controllers moved to summit_xl_control package
-* added arg gui to launch gazebo with gui or not
-* added the build depend of hector_gazebo_plugin
-* config files of control moved to summit_xl_control pkg
-* allow to launch worlds of external pkgs
-* minor changes
-* sim: setting the omni drive configuration for SummitXL Steel
-* gazebo: adding rviz config for summit XLS
-* sim_bringup: updating launch files and deleting old ones
-* gazebo: remapping params of launch files and new one for gazebo & rviz
-* gazebo: dependency of hector_gazebo_plugins
-* gazebo: adding param enable_odom_tf to the config
-* gazebo: minor changes
-* urdf model changed to summit_xl_std
-* [summit_xl_gazebo]:map frame now is /robot_id_map
-* [summit_xl_gazebo]:some tabs in launch file
-* [summit_xl_gazebo]:added gmapping include option
-* [summit_xl_gazebo]:launch file updated to multirobot]
-* [summit_xl_gazebo]: yaml files updated with prefix
-* [summit_xl_gazebo]:rviz config updated
-* [summit_xl_gazebo]:rviz config added of office map
-* [summit_xl_gazebo]:summit_xl_multi.launch modified to 3 robots
-* added multirobot config and launch files
-* Merge branch 'kinetic-devel' into kinetic-multirobot-devel
-* Merge branch 'indigo-devel' into kinetic-devel
-* multi-robot launch modified
-* added rviz config
-* added launch for a single robot
-* added diff_drive plugin controller configuration
-* summit_xl_sim multirobot branch
-* summit_xl modified to multirobot
-* summit_xl modified to multirobot
-* gazebo: adding flag to enable/disable the fake transform from map to odom
-* gazebo: update of rviz config
-* gazebo: adding pad to multi launch
-* gazebo: adding rviz config
-* adding gazebo launch for multirobots
-* updated simulation with summit_xl_robot_control
-* summit_xl_sim: removed temp files
-* 1.0.10
-
-1.0.10 (2016-08-24)
--------------------
-
-1.0.9 (2016-07-13)
-------------------
-
-1.0.8 (2016-07-12)
-------------------
-
-1.0.7 (2016-07-12)
-------------------
-
-1.0.6 (2016-07-04)
-------------------
-
-1.0.5 (2016-07-01)
-------------------
-
-1.0.4 (2016-07-01)
-------------------
-* modified dependencies
-* Contributors: carlos3dx
-
-1.0.3 (2016-07-01)
-------------------
-* Removed dependencies
-* Contributors: carlos3dx
-
-1.0.2 (2016-07-01)
-------------------
-
-1.0.1 (2016-06-28)
-------------------
-* Some spring cleaning
-* modified CMakeLists.txt and added urls and maintainers to package files
-* minor changes
-* added summit_xl_hls_omni.launch file
-* launch pad from gazebo launch
-* Move base launch created. Still not working
-* Mux added. Old files removed.
-* using summit_xl.urdf.xacro instead of previous standalone, using common pad
-* modified to use summit_xl_standalone.urdf.xacro robot file
-* chnaged summit_xl.gazebo summit_xl_fotonic.gazebo
-* minor changes in gazebo files
-* fixing package dependencies
-* summit_xl_joystick: fixing ptz movement
-* deleting old launch files
-* updating summit_xl.world
-* adding scissor movement
-* summit_xl_description: creating first elements of Summit X robot
-* fixing summit XL omni movement. adding omni plugin for gazebo
-* deleting summit_xl_hq version, default summit_xl will be hq
-* Not anymore multi.
-* First models working on Rviz and Gazebo.
-* Visulization in Gazebo almost done. Chassis origin and STL's corrected.
-* 1.0.0
-* Deleting summit_xl_joint_state. Creating summit_xl_sim metapackage
-* summit_xl_2dnav: updating amcl packages and adding new map of Willow Garage
-* summit_xl_2dnav: Updating config files to work with move base
-* Fixed ptz controller error
-* Allows multiple simulations of summit xl (not omni wheels yet)
-* Added tf_prefix to urdf links
-* Fixed omni movement
-* Fixed more files
-* Updated launch files and gazebo files
-* summit_xl_gazebo. Fixed sintaxis error in summit_xl_multi.launch
-* added first summit_xl_multi.launch
-* initial commit with v305 of svn
-* Contributors: Dani Carbonell, JorgeArino, RobotnikRoman, carlos3dx, dani-carbonell, mcantero, rguzman, trurl
-
-* added summit_xl_hls_omni.launch file
-* launch pad from gazebo launch
-* Move base launch created. Still not working
-* Mux added. Old files removed.
-* using summit_xl.urdf.xacro instead of previous standalone, using common pad
-* modified to use summit_xl_standalone.urdf.xacro robot file
-* chnaged summit_xl.gazebo summit_xl_fotonic.gazebo
-* minor changes in gazebo files
-* fixing package dependencies
-* summit_xl_joystick: fixing ptz movement
-* deleting old launch files
-* updating summit_xl.world
-* adding scissor movement
-* summit_xl_description: creating first elements of Summit X robot
-* fixing summit XL omni movement. adding omni plugin for gazebo
-* deleting summit_xl_hq version, default summit_xl will be hq
-* Not anymore multi.
-* First models working on Rviz and Gazebo.
-* Visulization in Gazebo almost done. Chassis origin and STL's corrected.
-* 1.0.0
-* Deleting summit_xl_joint_state. Creating summit_xl_sim metapackage
-* summit_xl_2dnav: updating amcl packages and adding new map of Willow Garage
-* summit_xl_2dnav: Updating config files to work with move base
-* Fixed ptz controller error
-* Allows multiple simulations of summit xl (not omni wheels yet)
-* Added tf_prefix to urdf links
-* Fixed omni movement
-* Fixed more files
-* Updated launch files and gazebo files
-* summit_xl_gazebo. Fixed sintaxis error in summit_xl_multi.launch
-* added first summit_xl_multi.launch
-* initial commit with v305 of svn
-* Contributors: Dani Carbonell, JorgeArino, RobotnikRoman, dani-carbonell, rguzman, trurl
From bcc5eb37fa24b7afb1fecb951b654e3030f11d29 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:16:09 +0100
Subject: [PATCH 032/165] added changelog on gazebo
---
summit_xl_gazebo/CHANGELOG.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/summit_xl_gazebo/CHANGELOG.md b/summit_xl_gazebo/CHANGELOG.md
index d78b322b..278632af 100644
--- a/summit_xl_gazebo/CHANGELOG.md
+++ b/summit_xl_gazebo/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog for package summit\_xl\_gazebo
+## Melodic devel (2021-03-01)
+- Removed the summit_xl_robot_local_control launch node `summit_xl_one_robot.launch`
+- Removed the summit_xl_perception launch node `summit_xl_one_robot.launch`
+- Removed dependancy on `summit_xl_robot_control`
+- Added run dependancy of `imu_complementary_filter`
+
## 1.1.3 (2018-05-15)
- updated rviz config
From 721c04952bb599d7e0c87d15e9c454282b7e51c2 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 11:20:43 +0100
Subject: [PATCH 033/165] Change of style to more markdown
---
README.md | 70 +++++++++++++++++++++++++++----------------------------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/README.md b/README.md
index eeae1edc..9aa5abc1 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-summit_xl_sim
+# summit_xl_sim
Packages for the simulation of the Summit XL
@@ -12,19 +12,19 @@ Packages for the simulation of the Summit XL
This packages contains:
-summit_xl_gazebo
+# summit_xl_gazebo
Launch files and world files to start the models in gazebo
-summit_xl_sim_bringup
+# summit_xl_sim_bringup
Launch files that launch the complete simulation of the robot/s
-Simulating Summit XL
+# Simulating Summit XL
This simulation has been tested using Gazebo 9 version.
-1. Install the following dependencies:
+## 1. Install the following dependencies:
To facilitate the installation you can use the vcstool:
@@ -32,7 +32,7 @@ This simulation has been tested using Gazebo 9 version.
sudo apt-get install -y python3-vcstool
```
-2. Create a workspace and clone the repository:
+## 2. Create a workspace and clone the repository:
```bash
mkdir catkin_ws
@@ -41,7 +41,7 @@ vcs import --input https://raw.githubusercontent.com/RobotnikAutomation/summit_x
rosdep install --from-paths src --ignore-src -y
```
-3. Compile:
+## 3. Compile:
```bash
catkin build
@@ -56,35 +56,36 @@ sudo apt-get update
sudo apt-get install python-catkin-tools
```
-4. Launch Summit XL simulation (1 robot by default, up to 3 robots):
+## 4. Launch Summit XL simulation (1 robot by default, up to 3 robots):
- Summit XL:
+### Summit XL:
- ```
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch
- ```
+```bash
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch
+```
- or Summit XL Steel:
+### or Summit XL Steel:
- ```
- roslaunch summit_xl_sim_bringup summit_xls_complete.launch
- ```
- Optional general arguments:
+```bash
+roslaunch summit_xl_sim_bringup summit_xls_complete.launch
+```
- ```
-
-
- (only for Summit XL)
-
- ```
+### Optional general arguments:
- By default the Gazebo plugin [Planar Move](http://gazebosim.org/tutorials?tut=ros_gzplugins) to ignore the physics of the wheels + the skid steering kinematics. In case you want to disable this plugin, set the following arguments:
+```xml
+
+
+ (only for Summit XL)
+
+```
- ```
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch ros_planar_move_plugin:=false omni_drive:=false
- ```
+By default the Gazebo plugin [Planar Move](http://gazebosim.org/tutorials?tut=ros_gzplugins) to ignore the physics of the wheels + the skid steering kinematics. In case you want to disable this plugin, set the following arguments:
- Optional robot arguments:
+```bash
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch ros_planar_move_plugin:=false omni_drive:=false
+```
+
+### Optional robot arguments:
```
@@ -102,15 +103,14 @@ sudo apt-get install python-catkin-tools
- Example to launch simulation with 3 Summit XL robots:
- ```
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch launch_robot_b:=true launch_robot_c:=true
- ```
+```bash
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch launch_robot_b:=true launch_robot_c:=true
+```
- Example to launch simulation with 1 Summit XL robot with navigation:
- ```
-
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch move_base_robot_a:=true amcl_and_mapserver_a:=true
- ```
+```bash
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch move_base_robot_a:=true amcl_and_mapserver_a:=true
+```
Enjoy! You can use the topic "${id_robot}/robotnik_base_control/cmd_vel" to control the Summit XL robot or send simple goals using "/${id_robot}/move_base_simple/goal"
From 45b5e6266c4120cf44a955b3797dcd85c96a6ddc Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 12:10:43 +0100
Subject: [PATCH 034/165] improvement of style
---
README.md | 44 +++++++++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 19 deletions(-)
diff --git a/README.md b/README.md
index 9aa5abc1..bff3990e 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,6 @@ Packages for the simulation of the Summit XL
-
This packages contains:
@@ -37,7 +36,8 @@ sudo apt-get install -y python3-vcstool
```bash
mkdir catkin_ws
cd catkin_ws
-vcs import --input https://raw.githubusercontent.com/RobotnikAutomation/summit_xl_sim/melodic-master/doc/summit_xl_sim.repos
+vcs import --input \
+ https://raw.githubusercontent.com/RobotnikAutomation/summit_xl_sim/melodic-master/doc/summit_xl_sim.repos
rosdep install --from-paths src --ignore-src -y
```
@@ -82,35 +82,41 @@ roslaunch summit_xl_sim_bringup summit_xls_complete.launch
By default the Gazebo plugin [Planar Move](http://gazebosim.org/tutorials?tut=ros_gzplugins) to ignore the physics of the wheels + the skid steering kinematics. In case you want to disable this plugin, set the following arguments:
```bash
-roslaunch summit_xl_sim_bringup summit_xl_complete.launch ros_planar_move_plugin:=false omni_drive:=false
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch \
+ ros_planar_move_plugin:=false \
+ omni_drive:=false
```
### Optional robot arguments:
- ```
-
-
-
-
-
-
-
-
-
-
-
- ```
+```xml
+
+
+
+
+
+
+
+
+
+
+
+```
- Example to launch simulation with 3 Summit XL robots:
```bash
-roslaunch summit_xl_sim_bringup summit_xl_complete.launch launch_robot_b:=true launch_robot_c:=true
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch \
+ launch_robot_b:=true \
+ launch_robot_c:=true
```
- Example to launch simulation with 1 Summit XL robot with navigation:
```bash
-roslaunch summit_xl_sim_bringup summit_xl_complete.launch move_base_robot_a:=true amcl_and_mapserver_a:=true
+roslaunch summit_xl_sim_bringup summit_xl_complete.launch \
+ move_base_robot_a:=true \
+ amcl_and_mapserver_a:=true
```
-Enjoy! You can use the topic "${id_robot}/robotnik_base_control/cmd_vel" to control the Summit XL robot or send simple goals using "/${id_robot}/move_base_simple/goal"
+Enjoy! You can use the topic `${id_robot}/robotnik_base_control/cmd_vel` to control the Summit XL robot or send simple goals using `/${id_robot}/move_base_simple/goal`
From 17f124503680da6dc43e816e37cd747d45233ec0 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 12:49:56 +0100
Subject: [PATCH 035/165] Added prototypes of functions
---
simulation-in-container-run.sh | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 7cb06a4b..44326438 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -7,6 +7,34 @@
# Creation Year: 2021
# Author: Guillem Gari
+function build_image() {
+ return 0
+}
+
+function check_docker_instance_already_running() {
+ return 0
+}
+
+function delete_running_docker_instance() {
+ return 0
+}
+
+function allow_screen() {
+ return 0
+}
+
+function disable_screen() {
+ return 0
+}
+
+function run_simulation() {
+ return 0
+}
+
+function simulation_main() {
+ return 0
+}
+
docker build -t summit_xl_sim .
xhost + local:root
echo "roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
From cffdceb227210a489bf7a528b56b618316e98bf8 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 12:52:10 +0100
Subject: [PATCH 036/165] added general functions prototypes
---
simulation-in-container-run.sh | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 44326438..c116def7 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -7,6 +7,26 @@
# Creation Year: 2021
# Author: Guillem Gari
+function print_error() {
+ return 0
+}
+
+function print_info() {
+ return 0
+}
+
+function print_success() {
+ return 0
+}
+
+function tool_check() {
+ return 0
+}
+
+function tools_check() {
+ return 0
+}
+
function build_image() {
return 0
}
From 1d2fa2d7e3c15a99bed0665e694d46c5b3a577fe Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:18:00 +0100
Subject: [PATCH 037/165] added main flow
---
simulation-in-container-run.sh | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index c116def7..00e5afa8 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -51,7 +51,31 @@ function run_simulation() {
return 0
}
+function simulation_flow() {
+ if ! build_image; then
+ return 1
+ fi
+ if ! allow_screen; then
+ return 1
+ fi
+ if check_docker_instance_already_running; then
+ if ! delete_running_docker_instance; then
+ return 1
+ fi
+ fi
+ if ! run_simulation; then
+ return 1
+ fi
+ return 0
+}
+
function simulation_main() {
+ if ! simulation_flow; then
+ return 1
+ fi
+ if ! disable_screen; then
+ return 1
+ fi
return 0
}
From 30910ccd3fca830b5ebe4f520e55357f025b6eef Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:18:13 +0100
Subject: [PATCH 038/165] added current functions
---
simulation-in-container-run.sh | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 00e5afa8..fa2dcde0 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -28,15 +28,18 @@ function tools_check() {
}
function build_image() {
- return 0
+ docker container rm --force summit_xl_sim
+ return $?
}
function check_docker_instance_already_running() {
- return 0
+ docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$
+ return $?
}
function delete_running_docker_instance() {
- return 0
+ docker container rm --force summit_xl_sim
+ return $?
}
function allow_screen() {
@@ -48,7 +51,21 @@ function disable_screen() {
}
function run_simulation() {
- return 0
+ docker run --gpus all --rm \
+ --env="DISPLAY=$DISPLAY" \
+ --env="QT_X11_NO_MITSHM=1" \
+ --device=/dev/dri \
+ --group-add video \
+ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
+ --env ROS_MASTER_URI="http://localhost:11311" \
+ --env GAZEBO_MASTER_URI="http://localhost:11345" \
+ --env NVIDIA_VISIBLE_DEVICES=0 \
+ --name summit_xl_sim \
+ summit_xl_sim:latest \
+ bash -c "source /opt/ros/melodic/setup.bash &&
+ source /home/ros/catkin_ws/devel/setup.bash &&
+ roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
+ return $?
}
function simulation_flow() {
From 4eee818235578eb3d18c6d5462bd716c5d249834 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:22:54 +0100
Subject: [PATCH 039/165] added the body of allow and disallow screen
---
simulation-in-container-run.sh | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index fa2dcde0..53bc0843 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -43,11 +43,13 @@ function delete_running_docker_instance() {
}
function allow_screen() {
- return 0
+ xhost + local:root
+ return $?
}
function disable_screen() {
- return 0
+ xhost - local:root
+ return $?
}
function run_simulation() {
From 4716fd4b6eb6dc3dbb63c47cbdd56b36263dd004 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:32:45 +0100
Subject: [PATCH 040/165] corrected build command
---
simulation-in-container-run.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 53bc0843..b66665fb 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -28,7 +28,7 @@ function tools_check() {
}
function build_image() {
- docker container rm --force summit_xl_sim
+ docker build -t summit_xl_sim .
return $?
}
From 386f9f3d985fe3c38d41e82e17b33153bc6c0dc6 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:33:25 +0100
Subject: [PATCH 041/165] migrated to function execution
---
simulation-in-container-run.sh | 23 ++---------------------
1 file changed, 2 insertions(+), 21 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index b66665fb..2c149981 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -98,24 +98,5 @@ function simulation_main() {
return 0
}
-docker build -t summit_xl_sim .
-xhost + local:root
-echo "roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
-if docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$; then
- docker container rm --force summit_xl_sim
-fi
-docker run --gpus all --rm \
- --env="DISPLAY=$DISPLAY" \
- --env="QT_X11_NO_MITSHM=1" \
- --device=/dev/dri \
- --group-add video \
- --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
- --env ROS_MASTER_URI="http://localhost:11311" \
- --env GAZEBO_MASTER_URI="http://localhost:11345" \
- --env NVIDIA_VISIBLE_DEVICES=0 \
- --name summit_xl_sim \
- summit_xl_sim:latest \
- bash -c "source /opt/ros/melodic/setup.bash &&
- source /home/ros/catkin_ws/devel/setup.bash &&
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
-xhost - local:root
+simulation_main "$@"
+exit $?
From 572fc1e89c5ed996eda5dede89452f4ae241fafa Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:37:06 +0100
Subject: [PATCH 042/165] added print and check functions body
---
simulation-in-container-run.sh | 53 ++++++++++++++++++++++++++++++++--
1 file changed, 50 insertions(+), 3 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 2c149981..4f76f5d6 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -7,23 +7,70 @@
# Creation Year: 2021
# Author: Guillem Gari
+# VARIABLES
+###########
+
+#Colour
+red_colour='\033[0;31m'
+green_colour='\033[0;32m'
+light_purple_colour='\033[1;35m'
+err_colour="${red_colour}"
+nfo_colour="${light_purple_colour}"
+suc_colour="${green_colour}"
+no_colour='\033[0m'
+
+#Success String
+suc_str_tool_check_success='All required tools are available'
+
+#Info Strings
+nfo_str_tool_checking='Checking tools'
+
+#Error Strings
+err_str_required_tool_not_found='Required tool not found: ${tool}'
+
+# FUNCTIONS
+###########
+
function print_error() {
- return 0
+ local message="${1}"
+ eval "echo -e "'"'"${err_colour}ERROR]${no_colour}: ${message}"'"'" 2>&1"
}
function print_info() {
- return 0
+ local message="${1}"
+ eval "echo -e "'"'"${nfo_colour}[INFO]${no_colour}: ${message}"'"'""
}
function print_success() {
+ local message="${1}"
+ eval "echo -e "'"'"${suc_colour}[SUCCESS]${no_colour}: ${message}"'"'""
+}
+
+function set_path() {
+ host_source_path="$(dirname "$(readlink -f "${0}")")"
+ build_path="${host_source_path}"
return 0
}
function tool_check() {
- return 0
+ local binary="${1}"
+ if [[ -z "${binary}" ]];then
+ return 1
+ fi
+ eval "${tool_check_cmd}"
+ return $?
}
function tools_check() {
+ local tools=("${@}")
+ print_info "${nfo_str_tool_checking}"
+ for tool in "${tools[@]}"; do
+ if ! tool_check "${tool}"; then
+ print_error "${err_str_required_tool_not_found}"
+ return 1
+ fi
+ done
+ print_success "${suc_str_tool_check_success}"
return 0
}
From 673dc5f42579b15875c83c51ab2e93e20226dcec Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:41:15 +0100
Subject: [PATCH 043/165] improved main flow
---
simulation-in-container-run.sh | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 4f76f5d6..ccf8a291 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -136,13 +136,14 @@ function simulation_flow() {
}
function simulation_main() {
- if ! simulation_flow; then
- return 1
+ local return_value=1
+ if simulation_flow; then
+ return_value=0
fi
if ! disable_screen; then
- return 1
+ return_value=1
fi
- return 0
+ return "${return_value}"
}
simulation_main "$@"
From da72a737a80bfab896a59ce61ea640bfa0a123b4 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:41:45 +0100
Subject: [PATCH 044/165] added prototype of environment check
---
simulation-in-container-run.sh | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index ccf8a291..4cd32a36 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -117,7 +117,14 @@ function run_simulation() {
return $?
}
+function exec_environment_check() {
+ return 0
+}
+
function simulation_flow() {
+ if ! exec_environment_check; then
+ return 1
+ fi
if ! build_image; then
return 1
fi
From 2318c1ab8455db7ae65858c05389ed09034dc221 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:48:50 +0100
Subject: [PATCH 045/165] added required tools
---
simulation-in-container-run.sh | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 4cd32a36..ecc96863 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -28,6 +28,15 @@ nfo_str_tool_checking='Checking tools'
#Error Strings
err_str_required_tool_not_found='Required tool not found: ${tool}'
+tool_list=(\
+ docker \
+ readlink \
+ dirname \
+ xhost \
+ nvidia_smi \
+)
+
+
# FUNCTIONS
###########
From 1043303bffd1b0be29172c7d2f84efb47c2aadaf Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:51:27 +0100
Subject: [PATCH 046/165] added data and func in order to separate the script
---
simulation-in-container.data | 0
simulation-in-container.func | 127 +++++++++++++++++++++++++++++++++++
2 files changed, 127 insertions(+)
create mode 100644 simulation-in-container.data
create mode 100644 simulation-in-container.func
diff --git a/simulation-in-container.data b/simulation-in-container.data
new file mode 100644
index 00000000..e69de29b
diff --git a/simulation-in-container.func b/simulation-in-container.func
new file mode 100644
index 00000000..385ffd5a
--- /dev/null
+++ b/simulation-in-container.func
@@ -0,0 +1,127 @@
+#!/bin/bash
+#
+# Description: Summit XL simulation on docker
+# bring-up script
+#
+# Company: Robotnik Automation S.L.L.
+# Creation Year: 2021
+# Author: Guillem Gari
+
+# VARIABLES
+###########
+
+#Colour
+red_colour='\033[0;31m'
+green_colour='\033[0;32m'
+light_purple_colour='\033[1;35m'
+err_colour="${red_colour}"
+nfo_colour="${light_purple_colour}"
+suc_colour="${green_colour}"
+no_colour='\033[0m'
+
+#Success String
+suc_str_tool_check_success='All required tools are available'
+
+#Info Strings
+nfo_str_tool_checking='Checking tools'
+
+#Error Strings
+err_str_required_tool_not_found='Required tool not found: ${tool}'
+
+tool_list=(\
+ docker \
+ readlink \
+ dirname \
+ xhost \
+ nvidia_smi \
+)
+
+
+# FUNCTIONS
+###########
+
+function print_error() {
+ local message="${1}"
+ eval "echo -e "'"'"${err_colour}ERROR]${no_colour}: ${message}"'"'" 2>&1"
+}
+
+function print_info() {
+ local message="${1}"
+ eval "echo -e "'"'"${nfo_colour}[INFO]${no_colour}: ${message}"'"'""
+}
+
+function print_success() {
+ local message="${1}"
+ eval "echo -e "'"'"${suc_colour}[SUCCESS]${no_colour}: ${message}"'"'""
+}
+
+function set_path() {
+ host_source_path="$(dirname "$(readlink -f "${0}")")"
+ build_path="${host_source_path}"
+ return 0
+}
+
+function tool_check() {
+ local binary="${1}"
+ if [[ -z "${binary}" ]];then
+ return 1
+ fi
+ eval "${tool_check_cmd}"
+ return $?
+}
+
+function tools_check() {
+ local tools=("${@}")
+ print_info "${nfo_str_tool_checking}"
+ for tool in "${tools[@]}"; do
+ if ! tool_check "${tool}"; then
+ print_error "${err_str_required_tool_not_found}"
+ return 1
+ fi
+ done
+ print_success "${suc_str_tool_check_success}"
+ return 0
+}
+
+function build_image() {
+ docker build -t summit_xl_sim .
+ return $?
+}
+
+function check_docker_instance_already_running() {
+ docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$
+ return $?
+}
+
+function delete_running_docker_instance() {
+ docker container rm --force summit_xl_sim
+ return $?
+}
+
+function allow_screen() {
+ xhost + local:root
+ return $?
+}
+
+function disable_screen() {
+ xhost - local:root
+ return $?
+}
+
+function run_simulation() {
+ docker run --gpus all --rm \
+ --env="DISPLAY=$DISPLAY" \
+ --env="QT_X11_NO_MITSHM=1" \
+ --device=/dev/dri \
+ --group-add video \
+ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
+ --env ROS_MASTER_URI="http://localhost:11311" \
+ --env GAZEBO_MASTER_URI="http://localhost:11345" \
+ --env NVIDIA_VISIBLE_DEVICES=0 \
+ --name summit_xl_sim \
+ summit_xl_sim:latest \
+ bash -c "source /opt/ros/melodic/setup.bash &&
+ source /home/ros/catkin_ws/devel/setup.bash &&
+ roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
+ return $?
+}
\ No newline at end of file
From f7a182f3006c027a4da5013a329ede0dde35513d Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:52:58 +0100
Subject: [PATCH 047/165] added data body
---
simulation-in-container.data | 37 ++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/simulation-in-container.data b/simulation-in-container.data
index e69de29b..8a8c05de 100644
--- a/simulation-in-container.data
+++ b/simulation-in-container.data
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Description: Summit XL simulation on docker
+# bring-up script data
+#
+# Company: Robotnik Automation S.L.L.
+# Creation Year: 2021
+# Author: Guillem Gari
+
+# VARIABLES
+###########
+
+#Colour
+red_colour='\033[0;31m'
+green_colour='\033[0;32m'
+light_purple_colour='\033[1;35m'
+err_colour="${red_colour}"
+nfo_colour="${light_purple_colour}"
+suc_colour="${green_colour}"
+no_colour='\033[0m'
+
+#Success String
+suc_str_tool_check_success='All required tools are available'
+
+#Info Strings
+nfo_str_tool_checking='Checking tools'
+
+#Error Strings
+err_str_required_tool_not_found='Required tool not found: ${tool}'
+
+tool_list=(\
+ docker \
+ readlink \
+ dirname \
+ xhost \
+ nvidia_smi \
+)
\ No newline at end of file
From dc5c53745e5c06cc69f1cf66da9162cf81ea6f68 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 14:53:33 +0100
Subject: [PATCH 048/165] removed variables from functions
---
simulation-in-container.func | 32 +-------------------------------
1 file changed, 1 insertion(+), 31 deletions(-)
diff --git a/simulation-in-container.func b/simulation-in-container.func
index 385ffd5a..d369fbf0 100644
--- a/simulation-in-container.func
+++ b/simulation-in-container.func
@@ -1,42 +1,12 @@
#!/bin/bash
#
# Description: Summit XL simulation on docker
-# bring-up script
+# bring-up script functions
#
# Company: Robotnik Automation S.L.L.
# Creation Year: 2021
# Author: Guillem Gari
-# VARIABLES
-###########
-
-#Colour
-red_colour='\033[0;31m'
-green_colour='\033[0;32m'
-light_purple_colour='\033[1;35m'
-err_colour="${red_colour}"
-nfo_colour="${light_purple_colour}"
-suc_colour="${green_colour}"
-no_colour='\033[0m'
-
-#Success String
-suc_str_tool_check_success='All required tools are available'
-
-#Info Strings
-nfo_str_tool_checking='Checking tools'
-
-#Error Strings
-err_str_required_tool_not_found='Required tool not found: ${tool}'
-
-tool_list=(\
- docker \
- readlink \
- dirname \
- xhost \
- nvidia_smi \
-)
-
-
# FUNCTIONS
###########
From 85ce045e6d96732fca2ab11be9a8b9e329ed66d0 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 15:05:36 +0100
Subject: [PATCH 049/165] added load data and func files
---
simulation-in-container-run.sh | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index ecc96863..2f6fc4e7 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -7,6 +7,38 @@
# Creation Year: 2021
# Author: Guillem Gari
+function load_file() {
+ local file="${1}"
+ if ! test -r "${file}"; then
+ echo "File not present: ${file}. Aborting" 2>&1
+ return 1
+ fi
+ if ! source "${file}"; then
+ echo "Could not load: ${file}. Aborting" 2>&1
+ return 1
+ fi
+ return 0
+}
+
+function load_files() {
+ previous_exec_path="$PWD"
+ host_source_path="$(dirname "$(readlink -f "${0}")")"
+ data_file="${0%.sh}"
+ data_file="${data_file}.data"
+ data_file="${host_source_path}/${data_file}"
+ if ! load_file "${data_file}"; then
+ return 1
+ fi
+ func_file="${0%.sh}"
+ func_file="${func_file}.func"
+ func_file="${host_source_path}/${func_file}"
+ if ! load_file "${func_file}"; then
+ return 1
+ fi
+ cd "$host_source_path"
+ return 0
+}
+
# VARIABLES
###########
From 9d9ab0f25be21c101e52dac4a4644eb10f885dc1 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 15:05:56 +0100
Subject: [PATCH 050/165] improved main and and added load files
---
simulation-in-container-run.sh | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 2f6fc4e7..8be6ec5c 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -185,12 +185,16 @@ function simulation_flow() {
function simulation_main() {
local return_value=1
- if simulation_flow; then
- return_value=0
+ if ! load_files; then
+ cd "${previous_exec_path}"
+ return 1
fi
+ simulation_flow
+ return_value=$?
if ! disable_screen; then
return_value=1
fi
+ cd "${previous_exec_path}"
return "${return_value}"
}
From a5f01e4d0a942e9efb0b4fc5b7e0b00d775c1b68 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 15:09:53 +0100
Subject: [PATCH 051/165] corrected names of data and func files
---
simulation-in-container.data => simulation-in-container-run.data | 0
simulation-in-container.func => simulation-in-container-run.func | 0
2 files changed, 0 insertions(+), 0 deletions(-)
rename simulation-in-container.data => simulation-in-container-run.data (100%)
rename simulation-in-container.func => simulation-in-container-run.func (100%)
diff --git a/simulation-in-container.data b/simulation-in-container-run.data
similarity index 100%
rename from simulation-in-container.data
rename to simulation-in-container-run.data
diff --git a/simulation-in-container.func b/simulation-in-container-run.func
similarity index 100%
rename from simulation-in-container.func
rename to simulation-in-container-run.func
From 8b393b0e0a9fd458b15ca29e97a312091b5152fd Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 15:10:06 +0100
Subject: [PATCH 052/165] Corrected failed load messages
---
simulation-in-container-run.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 8be6ec5c..3baae2e1 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -10,11 +10,11 @@
function load_file() {
local file="${1}"
if ! test -r "${file}"; then
- echo "File not present: ${file}. Aborting" 2>&1
+ echo "File not present: ${file} : Aborting" 2>&1
return 1
fi
if ! source "${file}"; then
- echo "Could not load: ${file}. Aborting" 2>&1
+ echo "Could not load: ${file} : Aborting" 2>&1
return 1
fi
return 0
From 330e01f606c15d615f3c15ba5faadeb6906bb302 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 15:12:20 +0100
Subject: [PATCH 053/165] removed the data and func from main script
---
simulation-in-container-run.sh | 119 ---------------------------------
1 file changed, 119 deletions(-)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index 3baae2e1..e6ddd6e6 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -39,125 +39,6 @@ function load_files() {
return 0
}
-# VARIABLES
-###########
-
-#Colour
-red_colour='\033[0;31m'
-green_colour='\033[0;32m'
-light_purple_colour='\033[1;35m'
-err_colour="${red_colour}"
-nfo_colour="${light_purple_colour}"
-suc_colour="${green_colour}"
-no_colour='\033[0m'
-
-#Success String
-suc_str_tool_check_success='All required tools are available'
-
-#Info Strings
-nfo_str_tool_checking='Checking tools'
-
-#Error Strings
-err_str_required_tool_not_found='Required tool not found: ${tool}'
-
-tool_list=(\
- docker \
- readlink \
- dirname \
- xhost \
- nvidia_smi \
-)
-
-
-# FUNCTIONS
-###########
-
-function print_error() {
- local message="${1}"
- eval "echo -e "'"'"${err_colour}ERROR]${no_colour}: ${message}"'"'" 2>&1"
-}
-
-function print_info() {
- local message="${1}"
- eval "echo -e "'"'"${nfo_colour}[INFO]${no_colour}: ${message}"'"'""
-}
-
-function print_success() {
- local message="${1}"
- eval "echo -e "'"'"${suc_colour}[SUCCESS]${no_colour}: ${message}"'"'""
-}
-
-function set_path() {
- host_source_path="$(dirname "$(readlink -f "${0}")")"
- build_path="${host_source_path}"
- return 0
-}
-
-function tool_check() {
- local binary="${1}"
- if [[ -z "${binary}" ]];then
- return 1
- fi
- eval "${tool_check_cmd}"
- return $?
-}
-
-function tools_check() {
- local tools=("${@}")
- print_info "${nfo_str_tool_checking}"
- for tool in "${tools[@]}"; do
- if ! tool_check "${tool}"; then
- print_error "${err_str_required_tool_not_found}"
- return 1
- fi
- done
- print_success "${suc_str_tool_check_success}"
- return 0
-}
-
-function build_image() {
- docker build -t summit_xl_sim .
- return $?
-}
-
-function check_docker_instance_already_running() {
- docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$
- return $?
-}
-
-function delete_running_docker_instance() {
- docker container rm --force summit_xl_sim
- return $?
-}
-
-function allow_screen() {
- xhost + local:root
- return $?
-}
-
-function disable_screen() {
- xhost - local:root
- return $?
-}
-
-function run_simulation() {
- docker run --gpus all --rm \
- --env="DISPLAY=$DISPLAY" \
- --env="QT_X11_NO_MITSHM=1" \
- --device=/dev/dri \
- --group-add video \
- --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
- --env ROS_MASTER_URI="http://localhost:11311" \
- --env GAZEBO_MASTER_URI="http://localhost:11345" \
- --env NVIDIA_VISIBLE_DEVICES=0 \
- --name summit_xl_sim \
- summit_xl_sim:latest \
- bash -c "source /opt/ros/melodic/setup.bash &&
- source /home/ros/catkin_ws/devel/setup.bash &&
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
- return $?
-}
-
function exec_environment_check() {
return 0
}
From f40dedf36d82adb78d5c90e6a8dd147e1cdd8477 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 16:10:09 +0100
Subject: [PATCH 054/165] added environment verification functions and
variables
---
simulation-in-container-run.data | 11 +++++++++++
simulation-in-container-run.func | 33 +++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/simulation-in-container-run.data b/simulation-in-container-run.data
index 8a8c05de..1fc6f03a 100644
--- a/simulation-in-container-run.data
+++ b/simulation-in-container-run.data
@@ -19,14 +19,25 @@ nfo_colour="${light_purple_colour}"
suc_colour="${green_colour}"
no_colour='\033[0m'
+cuda_version=none
+
#Success String
suc_str_tool_check_success='All required tools are available'
+suc_str_display='Display found'
+suc_str_cuda='Nvidia CUDA version ${cuda_version}'
+suc_str_nvidia_docker='Nvidia docker operative'
#Info Strings
nfo_str_tool_checking='Checking tools'
+nfo_str_display='Checking display'
+nfo_str_cuda='Checking Nvidia CUDA'
+nfo_str_nvidia_docker='Checking Nvidia Docker'
#Error Strings
err_str_required_tool_not_found='Required tool not found: ${tool}'
+err_str_display='Display not found, a graphical interface is required'
+err_str_cuda='Nvidia CUDA not found'
+err_str_nvidia_docker='Nvidia docker not found'
tool_list=(\
docker \
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index d369fbf0..a4ed25e3 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -53,6 +53,37 @@ function tools_check() {
return 0
}
+function check_if_there_is_display() {
+ print_info "${nfo_str_display}"
+ if ! [[ -n $XDG_CURRENT_DESKTOP ]]; then
+ print_error "${err_str_display}"
+ return 1
+ fi
+ print_success "${suc_str_display}"
+ return 0
+}
+
+function get_nvidia_cuda() {
+ print_info "${nfo_str_cuda}"
+ cuda_version="$(nvidia-smi -q | grep "CUDA Version" | sed 's/.*: //')"
+ if ! [[ $cuda_version =~ ^[0-9]+(.[0-9]+)?$ ]]; then
+ print_error "${err_str_cuda}"
+ return 1
+ fi
+ print_success "${suc_str_cuda}"
+ return 0
+}
+
+function test_nvidia_docker() {
+ print_info "${nfo_str_nvidia_docker}"
+ if docker run --rm --gpus all nvidia/cuda:${cuda_version}-base nvidia-smi; then
+ print_error "${err_str_nvidia_docker}"
+ return 1
+ fi
+ print_success "${err_str_nvidia_docker}"
+ return 0
+}
+
function build_image() {
docker build -t summit_xl_sim .
return $?
@@ -94,4 +125,4 @@ function run_simulation() {
source /home/ros/catkin_ws/devel/setup.bash &&
roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
return $?
-}
\ No newline at end of file
+}
From 97ece479f8eddca31f3834f677496b94a6b80528 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 16:10:32 +0100
Subject: [PATCH 055/165] Added the environment check functions
---
simulation-in-container-run.sh | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/simulation-in-container-run.sh b/simulation-in-container-run.sh
index e6ddd6e6..f77912a9 100755
--- a/simulation-in-container-run.sh
+++ b/simulation-in-container-run.sh
@@ -40,6 +40,18 @@ function load_files() {
}
function exec_environment_check() {
+ if ! tools_check "${tool_list[@]}"; then
+ return 1
+ fi
+ if ! check_if_there_is_display; then
+ return 1
+ fi
+ if ! get_nvidia_cuda; then
+ return 1
+ fi
+ if ! test_nvidia_docker; then
+ return 1
+ fi
return 0
}
From 1cf7e7c3a1d5a47ffbffa40e45d0c275fb364f7e Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 16:31:11 +0100
Subject: [PATCH 056/165] Corrected display-check
---
simulation-in-container-run.func | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index a4ed25e3..f80388a6 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -76,7 +76,7 @@ function get_nvidia_cuda() {
function test_nvidia_docker() {
print_info "${nfo_str_nvidia_docker}"
- if docker run --rm --gpus all nvidia/cuda:${cuda_version}-base nvidia-smi; then
+ if ! docker run --rm --gpus all nvidia/cuda:${cuda_version}-base nvidia-smi; then
print_error "${err_str_nvidia_docker}"
return 1
fi
From 9bb7ca17650000aa9507d9d3e5e6c0da2fa0c5f8 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 16:52:32 +0100
Subject: [PATCH 057/165] Added print info and added instances image-name
variables
---
simulation-in-container-run.data | 18 +++++++++++++++++-
simulation-in-container-run.func | 31 +++++++++++++++++++++++--------
2 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/simulation-in-container-run.data b/simulation-in-container-run.data
index 1fc6f03a..ad110a85 100644
--- a/simulation-in-container-run.data
+++ b/simulation-in-container-run.data
@@ -26,18 +26,27 @@ suc_str_tool_check_success='All required tools are available'
suc_str_display='Display found'
suc_str_cuda='Nvidia CUDA version ${cuda_version}'
suc_str_nvidia_docker='Nvidia docker operative'
+suc_str_image_build='Container image ${image_complete_name} builded'
+suc_str_already_running='The system is not running the simulation'
+suc_str_destroy_running_sim='Simulation destroyed'
#Info Strings
nfo_str_tool_checking='Checking tools'
nfo_str_display='Checking display'
nfo_str_cuda='Checking Nvidia CUDA'
nfo_str_nvidia_docker='Checking Nvidia Docker'
+nfo_str_tool_building='Building image ${image_complete_name}'
+nfo_str_check_already_running='Checking if the simulation is already running on the system'
+nfo_str_already_running='There is a simulation already running on the system, destroying it'
#Error Strings
err_str_required_tool_not_found='Required tool not found: ${tool}'
err_str_display='Display not found, a graphical interface is required'
err_str_cuda='Nvidia CUDA not found'
err_str_nvidia_docker='Nvidia docker not found'
+err_str_build_image_failed='Could not build container image'
+err_str_destroy_running_sim='Simulation ${instance_name} could not be destroyed'
+
tool_list=(\
docker \
@@ -45,4 +54,11 @@ tool_list=(\
dirname \
xhost \
nvidia_smi \
-)
\ No newline at end of file
+)
+
+instance_name=summit_xl_sim_instance
+
+image_name_org="robotnik"
+image_name="summit_xl_sim"
+image_version="latest"
+image_complete_name='${image_name_org}/${image_name}:${image_version}'
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index f80388a6..06a2b8ac 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -85,18 +85,33 @@ function test_nvidia_docker() {
}
function build_image() {
- docker build -t summit_xl_sim .
- return $?
+ eval "image_complete_name=${image_complete_name}"
+ print_info "${nfo_str_tool_building}"
+ if ! docker build -t "${image_complete_name}" .; then
+ print_error "${suc_str_image_build}"
+ return 1
+ fi
+ print_success "${suc_str_image_build}"
+ return 0
}
function check_docker_instance_already_running() {
- docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^summit_xl_sim$
- return $?
+ print_info "${nfo_str_check_already_running}"
+ if ! docker container ls -a | sed '1d' | awk '{print $2}' | grep -q ^${instance_name}$; then
+ return 1
+ fi
+ print_success "${suc_str_already_running}"
+ return 0
}
function delete_running_docker_instance() {
- docker container rm --force summit_xl_sim
- return $?
+ print_info "${nfo_str_already_running}"
+ if ! docker container rm --force "${instance_name}"; then
+ print_error "${err_str_destroy_running_sim}"
+ return 1
+ fi
+ print_success "${suc_str_destroy_running_sim}"
+ return 0
}
function allow_screen() {
@@ -119,8 +134,8 @@ function run_simulation() {
--env ROS_MASTER_URI="http://localhost:11311" \
--env GAZEBO_MASTER_URI="http://localhost:11345" \
--env NVIDIA_VISIBLE_DEVICES=0 \
- --name summit_xl_sim \
- summit_xl_sim:latest \
+ --name "${instance_name}" \
+ "${image_complete_name}" \
bash -c "source /opt/ros/melodic/setup.bash &&
source /home/ros/catkin_ws/devel/setup.bash &&
roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
From fbfabc8a684755b9aff9974abb680ffdd6682159 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 16:57:00 +0100
Subject: [PATCH 058/165] added print on running container
---
simulation-in-container-run.data | 1 +
simulation-in-container-run.func | 1 +
2 files changed, 2 insertions(+)
diff --git a/simulation-in-container-run.data b/simulation-in-container-run.data
index ad110a85..152629c4 100644
--- a/simulation-in-container-run.data
+++ b/simulation-in-container-run.data
@@ -38,6 +38,7 @@ nfo_str_nvidia_docker='Checking Nvidia Docker'
nfo_str_tool_building='Building image ${image_complete_name}'
nfo_str_check_already_running='Checking if the simulation is already running on the system'
nfo_str_already_running='There is a simulation already running on the system, destroying it'
+nfo_running_simulation='Running simulation'
#Error Strings
err_str_required_tool_not_found='Required tool not found: ${tool}'
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index 06a2b8ac..a9a2b4af 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -125,6 +125,7 @@ function disable_screen() {
}
function run_simulation() {
+ print_info "${nfo_running_simulation}"
docker run --gpus all --rm \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
From ce8b94d46a8dbe375387187c24a0deab49f5f93c Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 17:02:44 +0100
Subject: [PATCH 059/165] Added x11 access error messages
---
simulation-in-container-run.data | 2 ++
simulation-in-container-run.func | 14 ++++++++++----
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/simulation-in-container-run.data b/simulation-in-container-run.data
index 152629c4..c480db1e 100644
--- a/simulation-in-container-run.data
+++ b/simulation-in-container-run.data
@@ -47,6 +47,8 @@ err_str_cuda='Nvidia CUDA not found'
err_str_nvidia_docker='Nvidia docker not found'
err_str_build_image_failed='Could not build container image'
err_str_destroy_running_sim='Simulation ${instance_name} could not be destroyed'
+str_x11_enable_server_access='Could not allowing X11 access'
+str_x11_disable_server_access='Could not restrict X11 access'
tool_list=(\
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index a9a2b4af..35ec7827 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -115,13 +115,19 @@ function delete_running_docker_instance() {
}
function allow_screen() {
- xhost + local:root
- return $?
+ if ! xhost + local:root &>/dev/null; then
+ print_error "${str_x11_enable_server_access}"
+ return 1
+ fi
+ return 0
}
function disable_screen() {
- xhost - local:root
- return $?
+ if ! xhost - local:root &>/dev/null; then
+ print_error "${str_x11_disable_server_access}"
+ return 1
+ fi
+ return 0
}
function run_simulation() {
From 35fa4cf40b602ab48ba9094406d2958ccbee3d41 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 17:04:17 +0100
Subject: [PATCH 060/165] added argument in order allow to download fresh git
repos
---
Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 221ee9ed..6b9a3b2b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -48,12 +48,12 @@ RUN true \
&& echo "source $ck_dir/devel/setup.bash" >> ~/.bashrc
WORKDIR $ck_dir
-WORKDIR $ck_dir
-
COPY --chown=$user_name \
repos/summit_xl_sim_devel.repos \
/tmp
+ARG fresh_download_of_git_repos=no
+
RUN true \
&& vcs import --input /tmp/summit_xl_sim_devel.repos \
&& true
From a932adf728639ddb316582a471cab58416bcaabd Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 17:26:35 +0100
Subject: [PATCH 061/165] added files to dockerignore
---
.dockerignore | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.dockerignore b/.dockerignore
index e69de29b..f992e63d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -0,0 +1,9 @@
+.dockerignore
+.git/
+CHANGELOG.md
+doc/
+docker-compose.yml
+Dockerfile
+LICENSE
+README.md
+simulation-in-container-run.*
\ No newline at end of file
From 5c07969f7316ffb755c6b6e6cab9dbedabe7e84f Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 17:27:03 +0100
Subject: [PATCH 062/165] added vcs repo dir for docker
---
repos/summit_xl_sim_devel_docker.repos | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 repos/summit_xl_sim_devel_docker.repos
diff --git a/repos/summit_xl_sim_devel_docker.repos b/repos/summit_xl_sim_devel_docker.repos
new file mode 100644
index 00000000..507662c4
--- /dev/null
+++ b/repos/summit_xl_sim_devel_docker.repos
@@ -0,0 +1,17 @@
+repositories:
+ src/costmap_prohibition_layer:
+ type: git
+ url: https://github.com/RobotnikAutomation/costmap_prohibition_layer.git
+ version: kinetic-devel
+ src/robotnik_msgs:
+ type: git
+ url: https://github.com/RobotnikAutomation/robotnik_msgs.git
+ version: master
+ src/robotnik_sensors:
+ type: git
+ url: https://github.com/RobotnikAutomation/robotnik_sensors.git
+ version: melodic-devel
+ src/summit_xl_common:
+ type: git
+ url: https://github.com/RobotnikAutomation/summit_xl_common.git
+ version: melodic-devel
From 731bf544a6a1864cb90a777c72f8a70e94f66188 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 17:27:27 +0100
Subject: [PATCH 063/165] Now use the local summit_xl_sim packages
---
Dockerfile | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 6b9a3b2b..885095d3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -46,19 +46,20 @@ RUN true \
&& echo "PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]@\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> ~/.bashrc \
&& echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc \
&& echo "source $ck_dir/devel/setup.bash" >> ~/.bashrc
+
WORKDIR $ck_dir
COPY --chown=$user_name \
- repos/summit_xl_sim_devel.repos \
- /tmp
+ . \
+ $ck_src_dir/
+ARG repo_file=summit_xl_sim_devel_docker.repos
+ARG repo_file_list_to_use=/$ck_src_dir/repos/$repo_file
ARG fresh_download_of_git_repos=no
RUN true \
- && vcs import --input /tmp/summit_xl_sim_devel.repos \
- && true
-
-RUN true \
+ && vcs import --input $repo_file_list_to_use \
+ && rm -rf ck_src_dir/repos \
&& rosdep update \
&& echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections \
&& sudo apt-get update \
From 4b2ab34cfbbc3a5b23b335beeaf7ff034d1c4916 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 18:19:52 +0100
Subject: [PATCH 064/165] added new entrypoint and corrected the copy of the
packages
---
Dockerfile | 22 ++++++++++++++++++----
ros_entrypoint.sh | 7 +++++++
2 files changed, 25 insertions(+), 4 deletions(-)
create mode 100755 ros_entrypoint.sh
diff --git a/Dockerfile b/Dockerfile
index 885095d3..741e2256 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,6 +39,8 @@ RUN apt-get update \
&& apt-get autoremove -q -y \
&& rm -rf /var/lib/apt/lists/*
+COPY ros_entrypoint.sh /
+
USER $user_name
RUN mkdir -p $ck_src_dir
@@ -50,16 +52,28 @@ RUN true \
WORKDIR $ck_dir
COPY --chown=$user_name \
- . \
- $ck_src_dir/
+ summit_xl_gazebo \
+ $ck_src_dir/summit_xl_gazebo
+
+COPY --chown=$user_name \
+ summit_xl_sim \
+ $ck_src_dir/summit_xl_sim
+
+COPY --chown=$user_name \
+ summit_xl_sim_bringup \
+ $ck_src_dir/summit_xl_sim_bringup
ARG repo_file=summit_xl_sim_devel_docker.repos
-ARG repo_file_list_to_use=/$ck_src_dir/repos/$repo_file
+
+COPY --chown=$user_name \
+ repos/$repo_file \
+ /tmp/
+
+ARG repo_file_list_to_use=/tmp/$repo_file
ARG fresh_download_of_git_repos=no
RUN true \
&& vcs import --input $repo_file_list_to_use \
- && rm -rf ck_src_dir/repos \
&& rosdep update \
&& echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections \
&& sudo apt-get update \
diff --git a/ros_entrypoint.sh b/ros_entrypoint.sh
new file mode 100755
index 00000000..5e15ada5
--- /dev/null
+++ b/ros_entrypoint.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -e
+
+# setup ros environment
+source "/opt/ros/$ROS_DISTRO/setup.bash"
+source "$RBK_CATKIN_PATH/devel/setup.bash"
+exec "$@"
\ No newline at end of file
From 166805b09ee7dbd5cea5e8c75a8e59e6443533ad Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 18:20:43 +0100
Subject: [PATCH 065/165] added use of entrypoint and env for launch file
---
Dockerfile | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Dockerfile b/Dockerfile
index 741e2256..d782677c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -91,4 +91,9 @@ ENV NVIDIA_VISIBLE_DEVICES \
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
+ENV ROS_BU_PKG "summit_xl_sim_bringup"
+ENV ROS_BU_LAUNCH "summit_xl_complete.launch"
+ENV CATKIN_WS $ck_dir
+ENV RBK_CATKIN_PATH $ck_dir
+CMD bash -c "/ros_entrypoint.sh roslaunch ${ROS_BU_PKG} ${ROS_BU_LAUNCH}"
From 435825dfd92e6457a80657ce76e66906b822a64a Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 18:21:40 +0100
Subject: [PATCH 066/165] Added variables for selecting the bringup package and
launch on the script
---
simulation-in-container-run.data | 5 +++++
simulation-in-container-run.func | 11 +++++------
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/simulation-in-container-run.data b/simulation-in-container-run.data
index c480db1e..794d1014 100644
--- a/simulation-in-container-run.data
+++ b/simulation-in-container-run.data
@@ -65,3 +65,8 @@ image_name_org="robotnik"
image_name="summit_xl_sim"
image_version="latest"
image_complete_name='${image_name_org}/${image_name}:${image_version}'
+
+ros_bringup_package="summit_xl_sim_bringup"
+ros_launch_file="summit_xl_complete.launch"
+ros_master_uri="http://localhost:11311"
+gazebo_master_uri="http://localhost:11345"
\ No newline at end of file
diff --git a/simulation-in-container-run.func b/simulation-in-container-run.func
index 35ec7827..22389d07 100644
--- a/simulation-in-container-run.func
+++ b/simulation-in-container-run.func
@@ -138,13 +138,12 @@ function run_simulation() {
--device=/dev/dri \
--group-add video \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
- --env ROS_MASTER_URI="http://localhost:11311" \
- --env GAZEBO_MASTER_URI="http://localhost:11345" \
+ --env ROS_MASTER_URI="${ros_master_uri}" \
+ --env GAZEBO_MASTER_URI="${gazebo_master_uri}" \
+ --env ROS_BU_PKG="${ros_bringup_package}" \
+ --env ROS_BU_LAUNCH="${ros_launch_file}" \
--env NVIDIA_VISIBLE_DEVICES=0 \
--name "${instance_name}" \
- "${image_complete_name}" \
- bash -c "source /opt/ros/melodic/setup.bash &&
- source /home/ros/catkin_ws/devel/setup.bash &&
- roslaunch summit_xl_sim_bringup summit_xl_complete.launch"
+ "${image_complete_name}"
return $?
}
From 081922217998fe7876fa2420dd7568c825ff701c Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Tue, 2 Mar 2021 19:05:27 +0100
Subject: [PATCH 067/165] added environment variable to use gpu on simulation
---
Dockerfile | 2 ++
summit_xl_sim_bringup/launch/summit_xl_complete.launch | 2 +-
summit_xl_sim_bringup/launch/summit_xl_gen_complete.launch | 2 +-
summit_xl_sim_bringup/launch/summit_xls_complete.launch | 2 +-
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index d782677c..d0613377 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -91,6 +91,8 @@ ENV NVIDIA_VISIBLE_DEVICES \
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
+ENV USE_GPU_FOR_SIMULATION true
+
ENV ROS_BU_PKG "summit_xl_sim_bringup"
ENV ROS_BU_LAUNCH "summit_xl_complete.launch"
ENV CATKIN_WS $ck_dir
diff --git a/summit_xl_sim_bringup/launch/summit_xl_complete.launch b/summit_xl_sim_bringup/launch/summit_xl_complete.launch
index 26148bf0..81e77339 100644
--- a/summit_xl_sim_bringup/launch/summit_xl_complete.launch
+++ b/summit_xl_sim_bringup/launch/summit_xl_complete.launch
@@ -10,7 +10,7 @@
-
+
diff --git a/summit_xl_sim_bringup/launch/summit_xl_gen_complete.launch b/summit_xl_sim_bringup/launch/summit_xl_gen_complete.launch
index 6b499fde..2f1cfaf0 100644
--- a/summit_xl_sim_bringup/launch/summit_xl_gen_complete.launch
+++ b/summit_xl_sim_bringup/launch/summit_xl_gen_complete.launch
@@ -10,7 +10,7 @@
-
+
diff --git a/summit_xl_sim_bringup/launch/summit_xls_complete.launch b/summit_xl_sim_bringup/launch/summit_xls_complete.launch
index 29817688..374b08f6 100644
--- a/summit_xl_sim_bringup/launch/summit_xls_complete.launch
+++ b/summit_xl_sim_bringup/launch/summit_xls_complete.launch
@@ -12,7 +12,7 @@
-
+
From ebac8f7383f55c9de5c16949f4c0431ce012af3d Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Wed, 3 Mar 2021 12:49:33 +0100
Subject: [PATCH 068/165] moved docker-files to docker folder
---
Dockerfile | 2 +-
ros_entrypoint.sh => docker/ros_entrypoint.sh | 0
2 files changed, 1 insertion(+), 1 deletion(-)
rename ros_entrypoint.sh => docker/ros_entrypoint.sh (100%)
diff --git a/Dockerfile b/Dockerfile
index d0613377..9fc6d408 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,7 +39,7 @@ RUN apt-get update \
&& apt-get autoremove -q -y \
&& rm -rf /var/lib/apt/lists/*
-COPY ros_entrypoint.sh /
+COPY docker/ros_entrypoint.sh /
USER $user_name
diff --git a/ros_entrypoint.sh b/docker/ros_entrypoint.sh
similarity index 100%
rename from ros_entrypoint.sh
rename to docker/ros_entrypoint.sh
From 54f22684f3c5c016703334c9c70177090bf02610 Mon Sep 17 00:00:00 2001
From: Guillem Gari
Date: Wed, 3 Mar 2021 12:50:12 +0100
Subject: [PATCH 069/165] added willow garage model in order to correct loading
(not internet downloading)
---
.../textures/Carpet_Berber_Pattern_Gray_.png | Bin 0 -> 51264 bytes
.../textures/Stone_Brushed_Khaki_.png | Bin 0 -> 79596 bytes
.../textures/Wood_Bamboo_Medium_.png | Bin 0 -> 48064 bytes
.../textures/Wood_Cherry_Original_.png | Bin 0 -> 85689 bytes
.../textures/__Wood_Bamboo_Medium_1.png | Bin 0 -> 48064 bytes
.../materials/textures/__auto_12.png | Bin 0 -> 440 bytes
.../materials/textures/__auto_2.png | Bin 0 -> 1162 bytes
.../meshes/willowgarage_collision.dae | 5348 +++++++
.../meshes/willowgarage_visual.dae | 12572 ++++++++++++++++
.../models/willowgarage/model-1_2.sdf | 24 +
.../models/willowgarage/model-1_3.sdf | 24 +
.../models/willowgarage/model-1_4.sdf | 24 +
.../models/willowgarage/model.config | 19 +
.../models/willowgarage/model.sdf | 24 +
14 files changed, 18035 insertions(+)
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/Carpet_Berber_Pattern_Gray_.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/Stone_Brushed_Khaki_.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/Wood_Bamboo_Medium_.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/Wood_Cherry_Original_.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/__Wood_Bamboo_Medium_1.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/__auto_12.png
create mode 100644 docker/gazebo-models/models/willowgarage/materials/textures/__auto_2.png
create mode 100755 docker/gazebo-models/models/willowgarage/meshes/willowgarage_collision.dae
create mode 100644 docker/gazebo-models/models/willowgarage/meshes/willowgarage_visual.dae
create mode 100644 docker/gazebo-models/models/willowgarage/model-1_2.sdf
create mode 100644 docker/gazebo-models/models/willowgarage/model-1_3.sdf
create mode 100644 docker/gazebo-models/models/willowgarage/model-1_4.sdf
create mode 100644 docker/gazebo-models/models/willowgarage/model.config
create mode 100644 docker/gazebo-models/models/willowgarage/model.sdf
diff --git a/docker/gazebo-models/models/willowgarage/materials/textures/Carpet_Berber_Pattern_Gray_.png b/docker/gazebo-models/models/willowgarage/materials/textures/Carpet_Berber_Pattern_Gray_.png
new file mode 100644
index 0000000000000000000000000000000000000000..73e59a6199afc71364fa6fc2af5f3cc619cf0125
GIT binary patch
literal 51264
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