![]() |
NASA Astrobee Robot Software
Astrobee Version:
Flight software for the Astrobee robots operating inside the International Space Station.
|
These are the ground commands to the flight Software:
The Astrobee control station implements the RAPID access control protocol, which includes the following steps:
Parameter | Type | Default |
---|---|---|
Cookie | string | required |
Astrobee's IMU biases slowly drift over time. While Astrobee is actively running its localization system and maintaining a position fix, its EKF automatically corrects for bias drift under the assumption that the local environment is inertially fixed. If the localization system is turned off or loses its fix for an extended period, this command should be used to explicitly calibrate the biases prior to restarting motion. It works by integrating the robot's linear acceleration and angular velocity for about five seconds, and taking the resulting average values as the new zero. During the calibration period, the robot must remain stationary (e.g. docked or perched on a handrail, not held by an astronaut).
Parameter | Type | Default | Notes |
---|---|---|---|
Nodelet Name | string | required | Name of nodelet |
Manager Name | string | "" | Which nodelet manager should load the nodelet. If left blank, the system monitor will default to using the managerName specified in the last heartbeat it received from the requested nodelet. (That should normally work fine, assuming the nodelet sent out at least one valid heartbeat.) |
Type | string | "" | Type of nodelet (namespace/classname). If left blank, the system monitor will default to the type specified in its config file, which should normally work fine. |
Bond Id | string | "" | With the current implementation, you should leave this field blank. Specifying a non-empty string (unique id) will activate bond notifications. Background: ROS nodelets provide a 'bond' mechanism that enables the process requesting a nodelet load (in our case the system monitor) to receive automatic notification if that nodelet crashes. However, our system monitor instead relies on a custom heartbeat message to detect liveness, and it is not currently configured to do anything useful with bond notifications, even if they are activated. |
This command is equivalent to calling Admin.switchLocalization with the "MappedLandmarks" pipeline and then calling Admin.resetEKF. It could be useful as a way to manually recover localization if Astrobee is lost because it is using the wrong localization pipeline (e.g., if docking or perching approach got interrupted, and targets are no longer in view).
This command discards the EKF state and forces the localization system to acquire a new fix. It should not be needed unless the localization system has failure modes where it gets persistently stuck with invalid state information. (Unfortunately, as of 10/2020, that is a frequent occurrence.)
Note that, although Astrobee could logically integrate information from multiple pipelines at the same time (e.g., NavCam sparse map features as well as DockCam AR targets), at present, it only uses data from one of these pipelines at a time. IMU information is always integrated, regardless of which pipeline is used. While switching pipelines from A to B, updates from A stop, then there may be a dropout period of a few seconds before B acquires a fix. During the dropout period, localization relies solely on the IMU.
Parameter | Type | Default | Constraints | Notes | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Mode | string | required |
|
Which pipeline to use:
|
Parameter | Type | Default | Notes |
---|---|---|---|
Nodelet Name | string | required | Name of nodelet |
Manager Name | string | "" | Which nodelet manager should unload the nodelet. If left blank, the system monitor will default to using the managerName specified in the last heartbeat it received from the nodelet. (That should normally work fine, assuming the nodelet sent out at least one valid heartbeat.) |
The Astrobee in question must be docked. Because each wake command is routed through a dock berth, which Astrobee to wake is specified using the berth number.
See also Admin.wakeSafe. The difference between Admin.wake and Admin.wakeSafe is that Admin.wake is intended to automatically start the flight software stack. Since that feature is not implemented, at present, the two commands are equivalent.
Note: For context about how to wake an Astrobee on the ISS, see the procedure IRG-FFTEST207a Astrobee Quick Wakeup and Checkout.
Parameter | Type | Default | Notes |
---|---|---|---|
Berth Number | long | required | Which berth the Astrobee is using. 1=left, 2=right. |
The Astrobee in question must be docked. Because each wake command is routed through a dock berth, which Astrobee to wake is specified using the berth number. See also Admin.wake.
Parameter | Type | Default | Notes |
---|---|---|---|
Berth Number | long | required | Which berth the Astrobee is using. 1=left, 2=right. |
The arm has two joints. The tilt joint is used to deploy/stow the arm and adjust the SciCam tilt angle while perched. The pitch joint is used to adjust the SciCam pan angle while perched.
The (pan, tilt) = (0, 0) reference position is defined to have the arm fully deployed and aligned with the robot's -X axis. If perched on a handrail on an ISS wall, this position should nominally make the SciCam camera axis point directly toward the opposite wall. Increasing the tilt angle tilts the SciCam up, and increasing the pan angle pans the SciCam to the right. The arm's stowed position is (pan, tilt) = (0, 180).
The arm joints will be moved sequentially:
Naturally, if you prefer to tilt first, you can issue a tilt-only move, followed by a pan-only move.
Some mistakes to avoid include:
Parameter | Type | Unit | Default | Constraints | Notes | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pan | float | degrees | required | -90 ≤ val ≤ 90 | The target pan angle. Ignored if which is "Tilt". | ||||||||
Tilt | float | degrees | required | -20 ≤ val ≤ 180 | The target tilt angle. Ignored if which is "Pan". | ||||||||
Which | string | required |
|
Specifies whether the arm needs to pan, tilt, or both. |
See also Arm.armPanAndTilt for more discussion of the arm.
Astrobee's arm has a passively under-actuated gripper with a single motor. Opening the gripper commands the motor to pull on a pair of tendons that open the fingers. Closing the gripper cuts power to the motor; the fingers are spring-loaded to close. The first time the gripper opens, it calibrates the motor encoder position by fully opening until the fingers contact a hard stop, then relaxes slightly to its nominal open position. On later open cycles, it opens directly to the nominal open position. Note that the motor consumes significant power holding the gripper open, so it should be closed when not actively in use. Holding it open for extended periods (minutes) runs the risk of triggering a motor overtemperature fault, which disables the motor.
Parameter | Type | Default | Notes |
---|---|---|---|
Open | boolean | required | Set to true/false to open/close gripper. |
See also Arm.armPanAndTilt for more discussion of the arm.
The configuration is specified in a JSON-formatted file that contains a list of topic entries. For each logged topic, one specifies:
The Astrobee control station implements the protocol for managing onboard telemetry recording:
Parameter | Type | Default | Notes |
---|---|---|---|
Description | string | "" | An optional short description string to include in the filename of the stored telemetry file (ROS bag). Note that the filename always includes a timestamp, which ensures uniqueness. |
For the convenience of the control station operator, each guest science app can define what custom commands it supports in a configuration file read by the control station. See astrobee_ops/gds/ControlStation/PlanEditorGuestScience.config.
See GuestScience.startGuestScience for more on the guest science life cycle.
Parameter | Type | Default | Notes |
---|---|---|---|
Apk Name | string | required | Which guest science APK to send the command to |
Command | string | required | The command to send (usually formatted as a JSON dictionary, enabling an arbitrary number and types of parameters). |
See GuestScience.startGuestScience for more on the guest science life cycle.
Parameter | Type | Default | Notes |
---|---|---|---|
Apk Name | string | required | Which guest science APK to restart |
Wait | long | required | The time in seconds the guest science manager waits in between sending the stop and start commands to the guest science apk. Different apks will need different wait times to allow a complete shutdown before starting again. A 2 second wait time is recommended for simple guest science apks. For the sci_cam_image apk which has to release the science camera hardware resources, we empirically found a conservative wait time of 10 seconds worked reliably. |
Parameter | Type | Default | Notes |
---|---|---|---|
Apk Name | string | required | Which guest science APK to start |
Parameter | Type | Default | Notes |
---|---|---|---|
Apk Name | string | required | Which guest science APK to terminate |
As originally envisioned, this operation could be commanded from anywhere on the ISS, and Astrobee would plan a collision-free path back to the dock. Auto-return could also be invoked as an automatic response to a low-battery fault. To avoid contention for dock berths when multiple Astrobees are in use, each Astrobee should return to the same berth it originally departed from.
However, using this command is not recommended at this time, because (1) it has not been sufficiently tested (including testing of the QP trajectory planner), (2) at present, the proper berth selection logic is not implemented; instead, Astrobee will always return to berth 1 (= left).
Parameter | Type | Default | Notes |
---|---|---|---|
Berth Number | long | required | Which berth Astrobee is using. 1=left, 2=right. |
The nominal docking sequence is as follows:
Parameter | Type | Default | Notes |
---|---|---|---|
Berth Number | long | required | Which berth the Astrobee is using. 1=left, 2=right. |
Astrobee will lose control authority. If it is not grounded in some way (docked or perched), it will drift uncontrolled. Note that the impellers have significant inertia, and may take several seconds to spin down.
This command is usually invoked automatically (e.g., at the end of successful docking or perching). It can also be used as a fault response (e.g., responding to an overspeed fault).
The nominal perching sequence is as follows:
Using the default trapezoidal planner, the move works as follows:
- If holonomic mode is disabled (usual case), the robot will sequentially (1) rotate to face the target position, (2) translate to the target position while facing forward, (3) rotate to the target attitude.
- If holonomic mode is enabled, the robot will simultaneously translate along a straight line to the target position while rotating to the target attitude.
Parameter | Type | Default | Constraints | Notes | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Reference Frame | string | "ISS" |
|
The reference frame for the target pose. - ISS: The target is expressed in the fixed coordinate frame for the current environment (which might be the actual ISS, or a lab). - body: The target is expressed relative to the robot; for example, setting xyz to (0.5, 0, 0) commands 0.5 meters forward motion. |
||||||
Xyz | Point | required | Target position | |||||||
Xyz Tolerance | array[3].double | [0, 0, 0] | Not used! Tolerance is dictated by the flight mode. This legacy parameter was inherited from the RAPID specification. | |||||||
Rot | quaternion | required | Target attitude |
Stopping the mobility system means transitioning to active station keeping (the propulsion system is activated if needed). The arm is stopped as in Arm.stopArm (the joints are commanded to maintain their current position, and the gripper is not affected).
Note that there is special behavior when this command is issued by the system monitor as a fault response: in that case, idled propulsion will not be activated. The special behavior ensures that when responding to multiple faults with different responses configured (stopAllMotion vs. idlePropulsion), the idlePropulsion response takes priority.
The nominal undocking sequence is as follows:
The nominal unperching sequence is as follows:
An Astrobee plan is specified as a JSON-formatted fplan file that contains a list of stations (locations to visit), segments (trajectories for flying between stations), and commands to execute at stations. Plans are generated using the control station plan editor. Sample fplan files can be found in the astrobee/astrobee/plans folder.
The Astrobee control station implements the protocol for managing plans:
Parameter | Type | Unit | Default | Constraints | Notes |
---|---|---|---|---|---|
Duration | float | seconds | required | val ≥ 0 | Seconds to pause |
Parameter | Type | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Which | string | required |
|
Which component. Note: 'Front' means 'Forward'. |
Parameter | Type | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Which | string | required |
|
Which component. Note: 'Front' means 'Forward'. |
The Astrobee camera control life cycle is as follows:
Parameter | Type | Unit | Default | Constraints | Notes | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Camera Name | string | required |
|
Which camera | |||||||||||||||||||||
Camera Mode | string | required |
|
Cameras can both stream and record, potentially with different parameters (typically, you might downlink at lower frame rate and lower resolution). Use this field to specify which mode you want to change parameters for. | |||||||||||||||||||||
Resolution | string | required |
|
The resolution of the images to produce, in pixels W x H. Specifying resolution smaller than the actual sensor resolution causes binning or downsampling. Only selected downsampling ratios are supported. Available resolutions are: - SciCam: 1920x1080, 1280x720, 960x540, 480x270. - NavCam, DockCam: 1280x960, 1024x768, 640x480, 320x240. - HazCam, PerchCam: 224x171 only |
|||||||||||||||||||||
Frame Rate | float | Hz | required | 1 ≤ val ≤ 30 | Frame rate to send. Maximum frame rate varies by camera: - SciCam: 30 Hz - NavCam, DockCam: 15 Hz - HazCam, PerchCam: 5 Hz |
||||||||||||||||||||
Bandwidth | float | kbps | required | val ≥ 0 | Only used for SciCam. Sets target bitrate used in streaming video encoder. Lower bitrate may reduce video quality. |
Note: For the SciCam, this command actually enables independent recording of H.264 compressed video. For other cameras, this command enables publishing image frames to a topic designated for onboard recording together with other telemetry, but you also need to double-check that the Settings.setDataToDisk configuration will actually log that telemetry topic.
See Settings.setCamera for context.
Parameter | Type | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Camera Name | string | required |
|
Which camera | ||||||||||||
Record | boolean | required | Set to true/false to enable/disable camera video onboard recording. |
The SciCam streams H.264 compressed video via RTSP. All other cameras publish independent image frames via DDS.
See Settings.setCamera for context.
Parameter | Type | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Camera Name | string | required |
|
Which camera | ||||||||||||
Stream | boolean | required | Set to true/false to enable/disable streaming live video to the ground. |
Parameter | Type | Default | Notes |
---|---|---|---|
Check Obstacles | boolean | required | Set to true/false to enable/disable obstacle checking. |
Parameter | Type | Default | Notes |
---|---|---|---|
Check Zones | boolean | required | Set to true/false to enable/disable keepout zone checking. |
Parameter | Type | Default | Notes |
---|---|---|---|
Enable Auto Return | boolean | required | Set to true/false to enable/disable auto-return. |
A segment specifies the motion trajectory between stations in the plan. Within the segment, desired pose and velocity are smoothly interpolated functions of time over a time interval [t0, t1]. Plans created by the Astrobee control station plan editor always specify each segment's time values relative to the start of that segment's execution (i.e. t0 = 0). These plans must be executed in immediate mode, so called because when execution reaches a new segment, the executive and choreographer immediately 'start the clock' on executing the timed trajectory. In principle, if you want to synchronize motion of multiple robots, it could be useful to have the interval [t0, t1] specified using absolute timestamps. That is the behavior when immediate mode is disabled. The timestamp t0 is interpreted as absolute time using ROS conventions (usually UNIX epoch when running on real hardware, but could be any arbitrary time scale when running in simulation), and the start of motion on the segment would be delayed until the current time t = t0.
At this time, we cannot recommend disabling immediate mode to achieve synchronization, due to the following concerns: (1) execution with absolute timestamps has never really been tested, and may be buggy, (2) the control station plan editor doesn't provide any way to generate segments with absolute timestamps, (3) since it is seldom possible to predict exactly when ISS conditions will be right to begin a multi-robot activity, it would be awkward in practice to have the exact absolute timing of segments hard-coded into the plans.
As an alternative way to synchronize motion, you can execute with immediate mode enabled as usual, but take special care to minimize any skew in start time. Upload the plans in advance, use the Mobility.prepare command to get the robots ready to move, and then run the plans simultaneously. Astrobee to Astrobee communication is in the works, and may eventually enable synchronizing Astrobees in a better way.
Parameter | Type | Default | Notes |
---|---|---|---|
Enable Immediate | boolean | required | Set to true/false to enable/disable immediate mode motion control. |
Parameter | Type | Default | Notes |
---|---|---|---|
Enable Replan | boolean | required | If true, when Astrobee detects an obstacle too close to its forward trajectory, after the robot comes to a stop, the choreographer will automatically request a new trajectory from the current configured planner. If false, the robot will stop and wait for operator assistance. |
Parameter | Type | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Camera Name | string | required |
|
Which camera | ||||||||||||
Exposure | float | required | The value to set the exposurec to. |
Parameter | Type | Default | Constraints | Notes | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Which | string | required |
|
Which flashlight. Note: 'Back' means 'Aft' and 'Front' means 'Forward'. | ||||||
Brightness | float | required | 0 ≤ val ≤ 1 | Brightness value between 0 (off) and 1 (full brightness). Note that full brightness of an Astrobee flashlight is similar to that of an ordinary pocket flashlight, and may be uncomfortably bright if pointed toward crew eyes. When working with crew, it is advisable to use lower brightness values and/or take steps to avoid pointing the flashlight toward crew. |
Holonomic mode is sometimes called 'blind flying' because it relaxes the constraint to always point the HazCam in the direction of motion while translating in order to enable obstacle detection. When holonomic mode is enabled, the default trapezoidal planner will simultaneously translate to the target position and rotate to the target attitude.
Parameter | Type | Default | Notes |
---|---|---|---|
Enable Holonomic | boolean | required | Set to true/false to enable/disable holonomic mode. |
The default inertial parameters for each robot are stored in an onboard configuration file, and should not need to be changed as long as the Astrobee remains in its baseline configuration (four batteries and no payloads installed). However, the inertial parameters may vary when the robot configuration changes. Examples are when a payload is installed or reconfigured (like deploying the arm). When configuration changes for a planned activity are known in advance, the standard management approach is to specify them in the inertiaConfig field of the relevant fplan. This command provides the same parameter update capability, but with more flexibility as to when it is applied (for example, you can change in the middle of a plan, during teleoperation, or when commanded by a guest science app).
Parameter | Type | Unit | Default | Constraints | Notes |
---|---|---|---|---|---|
Name_ | string | "" | An optional profile name for this inertia profile. The name has no functional effect, but may be reported in status telemetry and operator displays. | ||
Mass | float | kg | required | val ≥ 0 | Mass of the Astrobee assembly |
Center Of Mass | array[3].double | meters | required | Center of mass of the Astrobee assembly. Specified relative to Astrobee's body frame. | |
Matrix | array[9].float | kg m2 | required | The moment of inertia tensor. Must be a symmetric matrix. Specified relative to the center of mass. |
Parameter | Type | Default | Notes |
---|---|---|---|
Map Name | string | required | Full path to the map file to use. 'default' uses the default map loaded on startup. |
Parameter | Type | Unit | Default | Constraints | Notes | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Profile Name | string | "" | An optional profile name for this set of operating limits. The name has no functional effect, but may be reported in status telemetry and operator displays. | ||||||||||||||
Flight Mode | string | required |
|
Setting the flight mode updates the GN&C gains, hard limits, tolerances, etc., as specified in the world config file. See e.g. astrobee/astrobee/config/worlds/iss.config. Note that executing certain operations, such as docking, automatically switches the flight mode as needed. Values:
|
|||||||||||||
Target Linear Velocity | float | m/s | required | val ≥ 0 | The maximum linear velocity to target while translating | ||||||||||||
Target Linear Acceleration | float | m/s2 | required | val ≥ 0 | The maximum linear acceleration to target while translating | ||||||||||||
Target Angular Velocity | float | rad/s | required | val ≥ 0 | The maximum angular velocity to target while rotating | ||||||||||||
Target Angular Acceleration | float | rad/s2 | required | val ≥ 0 | The maximum angular acceleration to target while rotating | ||||||||||||
Collision Distance | float | meters | required | val ≥ 0 | Minimum distance margin to maintain away from obstacles |
Parameter | Type | Default | Constraints | Notes | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Planner | string | required |
|
Which planner to use:
|
Parameter | Type | Unit | Default | Constraints | Notes | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Telemetry Name | string | required |
|
The DDS telemetry topic to manage. Note: As of Oct 2020, the "CommStatus" topic is not implemented. | |||||||||||||||||||
Rate | float | Hz | required | The frequency for publishing the topic. |
The Astrobee control station implements the protocol for managing keepout zones: