Skip to content

Commit

Permalink
[fetch_binary_drivers] new [fetch_drivers] package
Browse files Browse the repository at this point in the history
This is a new package providing the "fetch_drivers" which was previously
built internally and distributed as a binary only debian package.

We will officially announce when the upgrade from Indigo->Melodic is
ready.

18.04 and ROS Melodic on the Fetch Research Platforms is still being
tested.

The process isn't straight foward as there are calibration files
which you will want to back-up before the upgrade.

This `fetch_drivers` package also won't start like it use to because of
the change from `upstart` to `systemd`.
That requires `fetch_system_config` which will be open sourced soon.

This `fetch_binary_drivers` package is part of a plan to distribute
updates and upgrades to Fetch Research Platform customers faster in the future.

This relates to ZebraDevs/fetch_ros#63

1. An officiall announcement will be made when everything is ready.
2. We will update and document the process on:
    https://docs.fetchrobotics.com/
3. We will also announce via our mailing list, ros discourse and post on:
    https://opensource.fetchrobotics.com/
  • Loading branch information
moriarty committed Feb 2, 2019
1 parent 0d547bb commit f2fab5b
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fetch_binary_drivers/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
build
*.tar.gz
*.so
82 changes: 82 additions & 0 deletions fetch_binary_drivers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
cmake_minimum_required(VERSION 3.5)
project(fetch_drivers)

###
#
# This is the public version of fetch_drivers.
#
# This is a binary only release of our dirvers and firmware.
# The drivers and firmware have been compiled for our research robots, inside of Docker containers on our TeamCity build servers.
#
# The resulting output of that build job a tar.gz, where the build job should only copy in what is required for the research robots.
# This public repository, just pulls in that tar.gz and extracts installs it into ROS/catkin paths.
##

find_package(catkin REQUIRED
COMPONENTS
mk
)

## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED
COMPONENTS
filesystem
program_options
python
thread
system
)

add_custom_target(
binary_driver ALL
COMMAND cmake -E chdir ${PROJECT_SOURCE_DIR} $(MAKE) -f Makefile.tarball
COMMAND cmake -E make_directory ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/${PROJECT_NAME}
COMMAND cmake -E copy_if_different ${PROJECT_SOURCE_DIR}/build/output/lib/libfetch_drivers.so ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/libfetch_drivers.so
COMMAND cmake -E copy_if_different ${PROJECT_SOURCE_DIR}/build/output/lib/libfetch_drivers_odva.so ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/libfetch_drivers_odva.so
COMMAND cmake -E copy ${PROJECT_SOURCE_DIR}/build/output/lib/${PROJECT_NAME}/* ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/${PROJECT_NAME}/
COMMAND cmake -E make_directory ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_SHARE_DESTINATION}/${PROJECT_NAME}
COMMAND cmake -E copy_if_different ${PROJECT_SOURCE_DIR}/build/output/share/${PROJECT_NAME}/firmware.tar.gz ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_SHARE_DESTINATION}/${PROJECT_NAME}/
)

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES fetch_binary_drivers
# CATKIN_DEPENDS other_catkin_pkg
# DEPENDS system_lib
)

###########
## Build ##
###########

#############
## Install ##
#############

install(
FILES build/output/lib/libfetch_drivers.so build/output/lib/libfetch_drivers_odva.so
DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)

install(
DIRECTORY build/output/lib/fetch_drivers
DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
PATTERN "build/output/lib/fetch_drivers/*"
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ
)

install(
FILES build/output/share/${PROJECT_NAME}/firmware.tar.gz build/output/share/${PROJECT_NAME}/laser_filters.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
19 changes: 19 additions & 0 deletions fetch_binary_drivers/Makefile.tarball
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
all: binary_driver

# TODO: There are some more things to automate.
DRIVER_VERSION = 0.8.0
TARBALL = build/fetch-drivers-0.8.0.tar.gz
TARBALL_URL = http://packages.fetchrobotics.com/binaries/fetch-drivers-0.8.0.tar.gz
SOURCE_DIR = build/output
MD5SUM_FILE = fetch-drivers-0.8.0.tar.gz.md5sum
UNPACK_CMD = tar zxvf
include $(shell rospack find mk)/download_unpack_build.mk

binary_driver: $(SOURCE_DIR)/unpacked
echo "binary driver built in: " $(SOURCE_DIR)

clean:
-rm -rf $(SOURCE_DIR)

wipe: clean
-rm -rf build
43 changes: 43 additions & 0 deletions fetch_binary_drivers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Fetch Binary Drivers

This is a public binary version of our drivers and firmware for the Fetch Research Platforms.

https://fetchrobotics.com/robotics-platforms/

We have two Fetch Research Platforms. Commonly known as Fetch and Freight. Fetch is the one with the arm.
The drivers and firmware in this package are for both.

https://docs.fetchrobotics.com/

# Fetch Drivers

The catkin package inside of this folder is called `fetch_drivers`, not `fetch_binary_drivers`.
This is because we've previously been releasing packages which depend on `fetch_drivers`.
We're just changing how we distribute our drivers.

# About

This package should only be needed if you're using one of the Fetch Research Platforms.

Our goal is to better support our our Fetch Research Platform customers through an improved, more automated build and release process. This will get enable us to get updates out faster.

We discussed at [ROSCon 2018](https://roscon.ros.org/2018/) in a talk "Hermetic Robot Deployment Using Multi-Stage Dockers"
by @levavakian & @bluryi some of our internal way of doing build/test/deployment using Docker:
[Video](https://vimeo.com/293626218),
[Slides](https://roscon.ros.org/2018/presentations/ROSCon2018_multistage_docker_for_robot_deployment.pdf).

This public repository, is designed to consume the output of our private `fetch_drivers` repository and enable
Fetch Research Platform users access to the drivers/firmware faster via the official ros packages.

To create the output of our private package, we have a special build job which runs inside of a docker container to ensure we don't accidentally
pull in any private dependencies, and also doesn't output any of the additional commercial robot drivers.

Previously, we built our drivers on a private buildbot, and hosted them on our own packages site.
We also had a manually synced mirror of the ros packages. This allowed us to ensure we tested the versions of dependancies which were on our mirror.
The old process was not as automated as we would like.

We're in the process of testing melodic, and setting up our hosted stable mirror, and documenting the upgrade process to ensure Fetch Research Platform customers have a smooth transition.

We will announce to our customers when we're officially ready and supporting melodic.

See https://docs.fetchrobotics.com for more information.
1 change: 1 addition & 0 deletions fetch_binary_drivers/fetch-drivers-0.8.0.tar.gz.md5sum
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1d283854b2406e1945319a57e660c5ec /tmp/fetch-drivers-0.8.0.tar.gz
47 changes: 47 additions & 0 deletions fetch_binary_drivers/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0"?>
<package format="2">
<name>fetch_drivers</name>
<version>0.0.0</version>
<description>
The public fetch_drivers package is a binary only release.

fetch_drivers contains both the drivers and firmware for the fetch and freight research robots.
There should be no reason to use these drivers unless you're running on a fetch or a frieght research robot.
This package, is a cmake/make only package which installs the binaries for the drivers and firmware.
</description>

<!-- One maintainer tag required, multiple allowed, one person per tag -->
<maintainer email="[email protected]">Alexander Moriarty</maintainer>
<maintainer email="[email protected]">FetchRobotics Open Source Team</maintainer>

<!-- One license tag required, multiple allowed, one license per tag -->
<license>Proprietary</license>


<!-- Url tags are optional, but multiple are allowed, one per tag -->
<url type="website">http://wiki.ros.org/fetch_drivers</url>
<url type="docs">https://docs.fetchrobotics.com</url>
<url type="info">https://fetchrobotics.com/robotics-platforms/</url>


<!-- Author tags are optional, multiple are allowed, one per tag -->
<author email="[email protected]">Alexander Moriarty</author>


<buildtool_depend>catkin</buildtool_depend>
<build_depend>mk</build_depend>
<exec_depend>actionlib</exec_depend>
<exec_depend>boost</exec_depend>
<exec_depend>robot_controllers</exec_depend>
<exec_depend>robot_controllers_interface</exec_depend>
<exec_depend>rosconsole</exec_depend>
<exec_depend>roscpp_serialization</exec_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rostime</exec_depend>
<exec_depend>urdf</exec_depend>

<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>

0 comments on commit f2fab5b

Please sign in to comment.