Serial Port fail after upload from source

Every time I make and upload the firmware from source, MavROS no longer has access to that port and I cannot connect. Here’s my order of events:

  • Run roslaunch mavros px4.launch fcu_url:=/dev/ACM0:921600
    • Everything works fine and MavROS is happy
  • Run make px4fmu-v2_default upload
    • The firmware uploads just fine, it does the erase, program, verify thing and then reboots the FCU
  • Run roslaunch mavros px4.launch fcu_url:=/dev/ACM0:921600 again
    • MavROS fails to launch, stating serial0: receive: End of file
    • Full output of roslaunch is at the end of this post

I have tried unplugging/replugging the USB cable, switching USB ports, nothing works. The only thing that solves this problem is a full reboot of my companion computer. In my case during development, the companion computer is my development laptop. Rebooting every time I load new firmware is an extreme inconvenience.

Does anyone have a solution?

Here’s the full output from roslaunch:

SUMMARY
========

CLEAR PARAMETERS
 * /mavros/

PARAMETERS
 * /mavros/cmd/use_comp_id_system_control: False
 * /mavros/conn/heartbeat_rate: 1.0
 * /mavros/conn/system_time_rate: 1.0
 * /mavros/conn/timeout: 10.0
 * /mavros/conn/timesync_rate: 10.0
 * /mavros/distance_sensor/hrlv_ez4_pub/field_of_view: 0.0
 * /mavros/distance_sensor/hrlv_ez4_pub/frame_id: hrlv_ez4_sonar
 * /mavros/distance_sensor/hrlv_ez4_pub/id: 0
 * /mavros/distance_sensor/hrlv_ez4_pub/orientation: ROLL_180
 * /mavros/distance_sensor/hrlv_ez4_pub/send_tf: True
 * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/x: 0.0
 * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/y: 0.0
 * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/z: -0.1
 * /mavros/distance_sensor/laser_1_sub/id: 3
 * /mavros/distance_sensor/laser_1_sub/orientation: ROLL_180
 * /mavros/distance_sensor/laser_1_sub/subscriber: True
 * /mavros/distance_sensor/lidarlite_pub/field_of_view: 0.0
 * /mavros/distance_sensor/lidarlite_pub/frame_id: lidarlite_laser
 * /mavros/distance_sensor/lidarlite_pub/id: 1
 * /mavros/distance_sensor/lidarlite_pub/orientation: ROLL_180
 * /mavros/distance_sensor/lidarlite_pub/send_tf: True
 * /mavros/distance_sensor/lidarlite_pub/sensor_position/x: 0.0
 * /mavros/distance_sensor/lidarlite_pub/sensor_position/y: 0.0
 * /mavros/distance_sensor/lidarlite_pub/sensor_position/z: -0.1
 * /mavros/distance_sensor/sonar_1_sub/id: 2
 * /mavros/distance_sensor/sonar_1_sub/orientation: ROLL_180
 * /mavros/distance_sensor/sonar_1_sub/subscriber: True
 * /mavros/fcu_url: /dev/ttyACM0:921600
 * /mavros/gcs_url: 
 * /mavros/global_position/frame_id: fcu
 * /mavros/global_position/rot_covariance: 99999.0
 * /mavros/global_position/tf/child_frame_id: fcu_utm
 * /mavros/global_position/tf/frame_id: local_origin
 * /mavros/global_position/tf/send: False
 * /mavros/image/frame_id: px4flow
 * /mavros/imu/angular_velocity_stdev: 0.000349065850399
 * /mavros/imu/frame_id: fcu
 * /mavros/imu/linear_acceleration_stdev: 0.0003
 * /mavros/imu/magnetic_stdev: 0.0
 * /mavros/imu/orientation_stdev: 1.0
 * /mavros/local_position/frame_id: fcu
 * /mavros/local_position/tf/child_frame_id: fcu
 * /mavros/local_position/tf/frame_id: local_origin
 * /mavros/local_position/tf/send: False
 * /mavros/local_position/tf/send_fcu: False
 * /mavros/mission/pull_after_gcs: True
 * /mavros/mocap/use_pose: True
 * /mavros/mocap/use_tf: False
 * /mavros/plugin_blacklist: ['*']
 * /mavros/plugin_whitelist: ['command', 'ftp'...
 * /mavros/px4flow/frame_id: px4flow
 * /mavros/px4flow/ranger_fov: 0.0
 * /mavros/px4flow/ranger_max_range: 5.0
 * /mavros/px4flow/ranger_min_range: 0.3
 * /mavros/safety_area/p1/x: 1.0
 * /mavros/safety_area/p1/y: 1.0
 * /mavros/safety_area/p1/z: 1.0
 * /mavros/safety_area/p2/x: -1.0
 * /mavros/safety_area/p2/y: -1.0
 * /mavros/safety_area/p2/z: -1.0
 * /mavros/setpoint_accel/send_force: False
 * /mavros/setpoint_attitude/reverse_throttle: False
 * /mavros/setpoint_attitude/tf/child_frame_id: attitude
 * /mavros/setpoint_attitude/tf/frame_id: local_origin
 * /mavros/setpoint_attitude/tf/listen: False
 * /mavros/setpoint_attitude/tf/rate_limit: 10.0
 * /mavros/setpoint_position/tf/child_frame_id: setpoint
 * /mavros/setpoint_position/tf/frame_id: local_origin
 * /mavros/setpoint_position/tf/listen: False
 * /mavros/setpoint_position/tf/rate_limit: 50.0
 * /mavros/startup_px4_usb_quirk: True
 * /mavros/sys/disable_diag: False
 * /mavros/sys/min_voltage: 10.0
 * /mavros/target_component_id: 1
 * /mavros/target_system_id: 1
 * /mavros/tdr_radio/low_rssi: 40
 * /mavros/time/time_ref_source: fcu
 * /mavros/time/timesync_avg_alpha: 0.6
 * /mavros/vibration/frame_id: vibration
 * /mavros/vision_pose/tf/child_frame_id: vision
 * /mavros/vision_pose/tf/frame_id: local_origin
 * /mavros/vision_pose/tf/listen: False
 * /mavros/vision_pose/tf/rate_limit: 10.0
 * /mavros/vision_speed/listen_twist: False
 * /rosdistro: kinetic
 * /rosversion: 1.12.7

NODES
  /
    mavros (mavros/mavros_node)

auto-starting new master
process[master]: started with pid [387]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 2ee2f944-5b5d-11e7-b22d-f8633f0844c2
process[rosout-1]: started with pid [400]
started core service [/rosout]
process[mavros-2]: started with pid [418]
[ INFO] [1498584144.051950706]: FCU URL: /dev/ttyACM0:921600
[ WARN] [1498584144.052491298]: init: message from ASLUAV, MSG-ID 201 ignored! Table has different entry.
[ WARN] [1498584144.052639694]: init: message from autoquad, MSG-ID 150 ignored! Table has different entry.
[ WARN] [1498584144.052655827]: init: message from autoquad, MSG-ID 152 ignored! Table has different entry.
[ WARN] [1498584144.052788688]: init: message from matrixpilot, MSG-ID 150 ignored! Table has different entry.
[ WARN] [1498584144.052803026]: init: message from matrixpilot, MSG-ID 151 ignored! Table has different entry.
[ WARN] [1498584144.052817163]: init: message from matrixpilot, MSG-ID 152 ignored! Table has different entry.
[ WARN] [1498584144.052830724]: init: message from matrixpilot, MSG-ID 153 ignored! Table has different entry.
[ WARN] [1498584144.052845774]: init: message from matrixpilot, MSG-ID 155 ignored! Table has different entry.
[ WARN] [1498584144.052860499]: init: message from matrixpilot, MSG-ID 156 ignored! Table has different entry.
[ WARN] [1498584144.052874813]: init: message from matrixpilot, MSG-ID 157 ignored! Table has different entry.
[ WARN] [1498584144.052889010]: init: message from matrixpilot, MSG-ID 158 ignored! Table has different entry.
[ WARN] [1498584144.052903171]: init: message from matrixpilot, MSG-ID 170 ignored! Table has different entry.
[ WARN] [1498584144.052917201]: init: message from matrixpilot, MSG-ID 171 ignored! Table has different entry.
[ WARN] [1498584144.052931086]: init: message from matrixpilot, MSG-ID 172 ignored! Table has different entry.
[ WARN] [1498584144.052945440]: init: message from matrixpilot, MSG-ID 173 ignored! Table has different entry.
[ WARN] [1498584144.052959481]: init: message from matrixpilot, MSG-ID 174 ignored! Table has different entry.
[ WARN] [1498584144.052973550]: init: message from matrixpilot, MSG-ID 175 ignored! Table has different entry.
[ WARN] [1498584144.052987344]: init: message from matrixpilot, MSG-ID 176 ignored! Table has different entry.
[ WARN] [1498584144.053001457]: init: message from matrixpilot, MSG-ID 177 ignored! Table has different entry.
[ WARN] [1498584144.053015406]: init: message from matrixpilot, MSG-ID 178 ignored! Table has different entry.
[ WARN] [1498584144.053029426]: init: message from matrixpilot, MSG-ID 179 ignored! Table has different entry.
[ WARN] [1498584144.053043437]: init: message from matrixpilot, MSG-ID 180 ignored! Table has different entry.
[ WARN] [1498584144.053057471]: init: message from matrixpilot, MSG-ID 181 ignored! Table has different entry.
[ WARN] [1498584144.053071436]: init: message from matrixpilot, MSG-ID 182 ignored! Table has different entry.
[ WARN] [1498584144.053085235]: init: message from matrixpilot, MSG-ID 183 ignored! Table has different entry.
[ WARN] [1498584144.053099128]: init: message from matrixpilot, MSG-ID 184 ignored! Table has different entry.
[ WARN] [1498584144.053113187]: init: message from matrixpilot, MSG-ID 185 ignored! Table has different entry.
[ WARN] [1498584144.053127306]: init: message from matrixpilot, MSG-ID 186 ignored! Table has different entry.
[ WARN] [1498584144.053260263]: init: message from paparazzi, MSG-ID 180 ignored! Table has different entry.
[ WARN] [1498584144.053274411]: init: message from paparazzi, MSG-ID 181 ignored! Table has different entry.
[ WARN] [1498584144.053288716]: init: message from paparazzi, MSG-ID 182 ignored! Table has different entry.
[ WARN] [1498584144.053302918]: init: message from paparazzi, MSG-ID 183 ignored! Table has different entry.
[ WARN] [1498584144.053316977]: init: message from paparazzi, MSG-ID 184 ignored! Table has different entry.
[ WARN] [1498584144.053446249]: init: message from slugs, MSG-ID 170 ignored! Table has different entry.
[ WARN] [1498584144.053460450]: init: message from slugs, MSG-ID 172 ignored! Table has different entry.
[ WARN] [1498584144.053474243]: init: message from slugs, MSG-ID 173 ignored! Table has different entry.
[ WARN] [1498584144.053488629]: init: message from slugs, MSG-ID 176 ignored! Table has different entry.
[ WARN] [1498584144.053502528]: init: message from slugs, MSG-ID 177 ignored! Table has different entry.
[ WARN] [1498584144.053516595]: init: message from slugs, MSG-ID 179 ignored! Table has different entry.
[ WARN] [1498584144.053530452]: init: message from slugs, MSG-ID 180 ignored! Table has different entry.
[ WARN] [1498584144.053544750]: init: message from slugs, MSG-ID 181 ignored! Table has different entry.
[ WARN] [1498584144.053558800]: init: message from slugs, MSG-ID 184 ignored! Table has different entry.
[ WARN] [1498584144.053572892]: init: message from slugs, MSG-ID 185 ignored! Table has different entry.
[ WARN] [1498584144.053586809]: init: message from slugs, MSG-ID 186 ignored! Table has different entry.
[ WARN] [1498584144.053600761]: init: message from slugs, MSG-ID 188 ignored! Table has different entry.
[ WARN] [1498584144.053615878]: init: message from slugs, MSG-ID 191 ignored! Table has different entry.
[ WARN] [1498584144.053629736]: init: message from slugs, MSG-ID 192 ignored! Table has different entry.
[ WARN] [1498584144.053643605]: init: message from slugs, MSG-ID 193 ignored! Table has different entry.
[ WARN] [1498584144.053657591]: init: message from slugs, MSG-ID 194 ignored! Table has different entry.
[ INFO] [1498584144.053961696]: serial0: device: /dev/ttyACM0 @ 921600 bps
[ INFO] [1498584144.054313523]: GCS bridge disabled
[ERROR] [1498584144.054367454]: serial0: receive: End of file
[ INFO] [1498584144.057856301]: Plugin 3dr_radio blacklisted
[ INFO] [1498584144.057882841]: Plugin actuator_control blacklisted
[ INFO] [1498584144.057901472]: Plugin altitude blacklisted
[ INFO] [1498584144.057917058]: Plugin cam_imu_sync blacklisted
terminate called after throwing an instance of 'std::system_error'
  what():  Resource deadlock avoided
================================================================================REQUIRED process [mavros-2] has died!
process has died [pid 418, exit code -6, cmd /opt/ros/kinetic/lib/mavros/mavros_node __name:=mavros __log:=/home/$USER/.ros/log/2ee2f944-5b5d-11e7-b22d-f8633f0844c2/mavros-2.log].
log file: /home/$USER/.ros/log/2ee2f944-5b5d-11e7-b22d-f8633f0844c2/mavros-2*.log
Initiating shutdown!
================================================================================
[mavros-2] killing on exit
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done