-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[fetch_binary_drivers] new [fetch_drivers] package #27
Conversation
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/
Ported from internal Fetch Robotics code used for ROS Indigo/Ubuntu 14.04. Updated to support ROS Melodic/Ubuntu 18.04. Some key changes: - Change from using upstart to using systemd (expect version >= 236) - Correspondingly logs such as /var/log/upstart/robot.log are now available in /var/log/ros/robot.log (as well as via journalctl -u robot) - Manually creates udev rules and updates grub boot arguments to ensure consistent network device naming across different hardware. Uses netplan to set static IP for internal robot communications. - Sixad replaced with ps3joy (hopefully a better solution will be found) - Slightly better logrotate rules - Removed former joystick_monitor and soundplay upstarts
TODO: should this be catkinized
All these dependencies are exec_dependencies because this package doesn't compile anything. They're also in the CMakeLists.txt in the catkin_package and find_package to be safe.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will add additional dependencies just to be safe
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couple typos I found
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First pass. Will do a more thorough review soon
|
||
We will announce to our customers when we're officially ready and supporting melodic. | ||
|
||
See https://docs.fetchrobotics.com for more information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Link here
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 --> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are these comments intentionally left in
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They're just left over from the catkin generate package command. I think it was just reminding me to add the maintainers.
@@ -0,0 +1 @@ | |||
9 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You probably want 11?
Package: debhelper (9.20131227ubuntu1)
even for 14.04
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My 14.04 desktop (still on 3.x kernel... nice and safe...) has 9.x debhelper installed. I don't think there's a reason to bump this requirement presently. And it sounds like the plan is we'll move to using bloom for this later anyways.
openssh-server, | ||
ros-melodic-ros | ||
Description: Configuration for Fetch on Melodic | ||
This package will start ROS Melodic at bootup |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does this mean?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very brief vague statement, but nominally accurate. It installs roscore + robot systemd units which run at computer power-on. I'll reword this probably.
# Modify default/grub to not use new-style network device naming | ||
sed -i "s/GRUB_CMDLINE_LINUX=\"\"/GRUB_CMDLINE_LINUX=\"net.ifnames=0 biosdevname=0\"/" /etc/default/grub | ||
update-grub | ||
# Determine which device to map to eth0 and eth1 and update /etc/udev/rules.d/70-persistent-net.rules |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do eth0 and 1 apply on ubuntu 18.04
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is for our robots because I found the computer hardware we use is not 100% guaranteed to have the same e.g. ensp1s0 style names every time it boots. Therefore I implement a "standard" way to disable this newer naming behavior. See the commit message as well. I'll also being including notes about this networking decision in the docs for 14.04->18.04.
cp -n /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.bak | ||
fi | ||
cp -f /etc/udev/rules.d/70-persistent-net.rules /tmp/70-persistent-net.rules | ||
grep -v -E "eth0|eth1" /tmp/70-persistent-net.rules > /etc/udev/rules.d/70-persistent-net.rules | true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
eth0 1?
@@ -0,0 +1,9 @@ | |||
# This script is used by the roscore systemd service unit | |||
echo "waiting for roscore to come up" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Put the echo in the while so we know it hasn't locked up maybe?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm going to leave this the way it was for simplicity right now.
<exec_depend>fetch_auto_dock_msgs</exec_depend> | ||
<exec_depend>nav_msgs</exec_depend> | ||
<exec_depend>power_msgs</exec_depend> | ||
<exec_depend>robot_calibration_msgs</exec_depend> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
todo: ensure that these are the same as the ones we used when building the binary drivers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you won't be able to do that -- the ROS buildfarm / repos only contain the latest debs - once a new version is synced, the old ones go away. Hardcoding the value would make your package uninstallable at best.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mikeferguson: would a nightly build job of our binaries, ensuring we’ve always got the latest dependencies work here?
@cjds and I were hoping to open source the Dockerfile & Python script which builds the output.tar.gz
- it won’t be helpful without pull access on our drivers but it would at least make the process transparent
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@moriarty even having the released deb download a nightly binary build is a challenge -- when a sync to public happens, you'd have a ~24 hour window where the version built against public is no longer right. (and that sync happens every ~ 2 weeks, so that's about 7% downtime). Also how do you make it work on both shadow-fixed (where developers tend to test) and the main ros repo?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😞
@dbking77 & @chadrockey maybe long term we reopen the discussion about refactoring some things to better support public/private drivers to make releasing to research customers easier ❓
We might need a second version setup up and built against shadow-fixed, this still doesn't fix the original problem, and it also wouldn't be clear how to set that up so that the shadow-fixed pulled a fetch-drivers-shadow.tar.gz
and the release pulled fetch-drivers.tar.gz
especially since currently they're pulling: http://packages.fetchrobotics.com/binaries/fetch-drivers-0.8.0.tar.gz
... Fetch3 & my machine are currently setup against shadow-fixed, but these drivers were built against whatever is inside of
FROM ros:melodic-robot-bionic
(As mentioned @cjds will cleanup the creation process and we plan to put them:
https://github.com/fetchrobotics/fetch_firmware_repackager or rename that repository fetch_drivers_repackager
)
And it works now, but that's likely because there hasn't been any API/ABI breaking changes, which is not always guaranteed.
We'll need to check which of the dependencies we have are core dependencies, and which are non-core dependencies.
For the most part, the 7% downtime is a worst case calculation coming from 24hr every 2 weeks. If the dependencies are part of the core ros repositories, I think the API/ABI is stable enough or at least suppose to be... For non-core, and not released by us then it's just a risk that we'll probably need to take.
I don't even know if the melodic sync is triggered every 2 weeks because most of the folks at open robots are developing towards ros2. @jacobperron & @wjwwood?
Our plan, was to setup a mirror of ROS, which we manually trigger a sync on.
So customers with Fetch Research Robots could point to our http://packages.fetchrobotics.com/ and get guaranteed stability. But have the option to get the packages from packages.ros.org either ros or ros-shadow-fixed if they really want to live on the edge and accept some instability.
By pushing this into the public build farm, our internal packages.fetchrobotics.com
will become almost a pure mirror, which should have much maintainable for our DevOps team and @bluryi.
If we sync our mirror manually, after testing to know we're not in the 7% downtime, then we'll get stability and more frequent updates.
For the 7% of possible down time for the packages.ros.org
I think @erelson will need to update the (not yet existing) documentation to include strong warnings about pointing to packages.fetchrobotics.com
or packages.ros.org
The packages.fetchrobotics.com mirror for melodic does not yet exist, we were going to quietly get our packages into melodic, and then setup a mirror once they were in and synced.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@clalancette is the ROS Boss for Melodic, so it's up to him to decide when the syncs happen, though I think they've been trying to keep a regular cadence. Looking at the discourse posts, it's more like once a month, though maybe that will change.
Perhaps you can anticipate the syncs and be prepared with updated packages of your own to sync in order to minimize the period where your debs are out of date. We do usually announce an intention to sync a week or two before doing it, with the intention that people could test it for unintended regressions.
I don't know if this would be relevant as well, but there's this recent announcement by @nuclearsandwich:
https://discourse.ros.org/t/announcing-ros-snapshot-repositories/7705
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My intention is to sync Melodic every two weeks, though I've basically never been able to achieve that due to regressions that I have to fix for every sync. So the cadence has indeed been more like once a month.
I intend to continue to attempt to sync every two weeks unless there is a compelling reason to change that. So if you have reasons you'd like it to change, please let me know and we can consider it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nickswalker and @mikeferguson I wanted to give you a warning: just in case you've been running melodic and testing with Fetch's using ros-shadow-fixed this is now there:
http://repositories.ros.org/status_page/ros_melodic_default.html?q=fetch_
@erelson will do a test on hardware using the ros-shadow-fixed before we make an official announcement with links to upgrade documentation. So: best case, everything works, but it's more likely that the official announcement to the fetch user mailing lists is going to be not the upcoming ros melodic sync, but the one after. If we're really unlucky we could be in one of those 7% downtime scenarios which was mentioned above.
Also: - Fix remaining indigo references - Don't worry about conflicting packages that never existed - String fixes
|
||
# Disable wifi power management in 18.04 | ||
# https://gist.github.com/jcberthon/ea8cfe278998968ba7c5a95344bc8b55 | ||
sed -i "s/wifi.powersave = 3/wifi.powersave = 2/" /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fyi @cjds here's the updated approach 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. This works for a 0.1 release. We'll be improving it over time.
Once ros/rosdistro#20301 is in the rosdep keys for |
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. This is not yet the announcement.
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 ofthe change from
upstart
tosystemd
.That requires
fetch_system_config
which will be open sourced soon.This
fetch_binary_drivers
package is part of a plan to distributeupdates and upgrades to Fetch Research Platform customers faster in the future.
This relates to ZebraDevs/fetch_ros#63
https://docs.fetchrobotics.com/
https://opensource.fetchrobotics.com/