-
Notifications
You must be signed in to change notification settings - Fork 12
Drive the Trossen station from the leader arm beside it #703
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
Open
DarksaCY
wants to merge
77
commits into
Positronic-Robotics:main
Choose a base branch
from
DarksaCY:trossen-leader
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+4,926
−649
Open
Changes from all commits
Commits
Show all changes
77 commits
Select commit
Hold shift + click to select a range
25f1dee
Add `trossen` and `realsense` extras
DarksaCY 3d4216f
Keep an input source with no gamepad out of the button stream
DarksaCY ddacc32
Add the Trossen WidowX AI arm driver
DarksaCY 4b5af61
Saturate the grip the Trossen arm reports to the range its port carries
DarksaCY cd3aa37
Read the controller clock to tell a dropped link from a quiet one
DarksaCY 7c56d36
Say what a dropped link leaves the Trossen driver in
DarksaCY fbabf3c
Open a new session with the Trossen arm when the link goes down
DarksaCY c48b48a
Take Cartesian commands on the Trossen arm
DarksaCY a86a36e
Measure the Cartesian step cap against the arm, not the last target
DarksaCY 64ea660
Let the Trossen fake answer for the controller's error information
DarksaCY 7474cdd
Interpolate a streamed Trossen setpoint across the tick it spans
DarksaCY 42ad0bc
Stand the Trossen driver down before a joint reaches its own limit
DarksaCY aea24ed
Solve the Trossen arm's kinematics in the driver
DarksaCY 3abc4b5
Keep a Trossen Cartesian target in the shape the arm is already in
DarksaCY 0c4a207
Put the Trossen model on a lit ground plane
DarksaCY 49b6f42
Say when a Trossen joint reads outside the range the controller reports
DarksaCY 5d3d119
Take the arm's own following error out of the Trossen driver's loops
DarksaCY bf51816
Let the Trossen firmware plan the moves somebody waits on
DarksaCY 84cbc03
Collect data on the Trossen arm from a Quest
DarksaCY 8a244c1
Read a RealSense camera
DarksaCY f00db89
Say which controllers a WebXR payload can leave out
DarksaCY efb8fcf
Write the RealSense driver text in Simplified Technical English
DarksaCY 6d48b69
Let a camera frame reach the headset under `spawn`
DarksaCY f180734
Say when teleoperation starts and when the arm holds still
DarksaCY 5143389
Say once that the arm cannot follow the poses it is given
DarksaCY 078efc4
Say nothing from a control system the operator interrupts
DarksaCY c845f15
Let a streamed target ask the arm for the error it holds itself up with
DarksaCY 3fafb3e
Turn the end effector against an arm that sags
DarksaCY c541aad
Say that the Trossen operator stands in front of the arm
DarksaCY ae5ac37
Hold the viewer scene back until the simulator work
DarksaCY 5de6870
Take the camera out of the Trossen station
DarksaCY 5aedd35
Refuse a controller that cannot drive the arm
DarksaCY 798ca04
Name the robot the same way in every driver
DarksaCY 130f15e
Put each Trossen helper beside what uses it
DarksaCY 7b4e67f
Put the streamed goal time back to one tick
DarksaCY f38a7a3
Give a Linux video frame the shape the other cameras give
DarksaCY 13d9faf
Drop a video buffer that arrives short of a frame
DarksaCY 1537579
Name the four cameras of the Trossen station
DarksaCY cc43bfa
Show the Trossen station its cameras again
DarksaCY 2473f5a
Let a vendor that cannot load stand in for one that is absent
DarksaCY 6a42261
Let a connection wrapper change the type it carries
DarksaCY 5a8bafe
Keep the video library's ioctl log out of a debug run
DarksaCY ec97d66
Say that an interrupt tore a queue's connection
DarksaCY c17528b
Let the end effector turn as readily as it moves
DarksaCY 387ef80
Say that the Trossen operator stands behind the arm
DarksaCY d3c60e3
Ask a streamed setpoint for a tenth of each joint's limit again
DarksaCY 979b097
Stop a process that took an interrupt from reading its neighbours' me…
DarksaCY ed67010
Take the hand's own shake out of what the arm follows
DarksaCY 9d56018
Read a Trossen arm the operator holds as a teleoperation source
DarksaCY 05fdae3
Record an episode the leader arm drives
DarksaCY d7d8a63
Take the leader to the start pose with its follower
DarksaCY 9766a67
Drop what the rig reported while it travelled
DarksaCY d61abb9
Ask a device for the setpoint it is streamed now
DarksaCY 9b4a76a
Take the gripper friction off the operator's hand
DarksaCY d18d48d
Give the station's leader the gripper friction it was tuned to
DarksaCY 58bf2de
Let a streamed setpoint ask for three tenths of a joint's speed
DarksaCY 15eecb7
Let a policy drive the Trossen station
DarksaCY 4029f8e
Serve a checkpoint trained on the station's own codec
DarksaCY b56d4c8
Take the station's branch to current main
DarksaCY fe5734f
Take the review of the leader station
DarksaCY e6718c0
Answer the second review round on the leader station
DarksaCY 109d35c
Say why a camera buffer that is not a frame is counted, not raised
DarksaCY 9f2ade0
Let the session commands act, and keep the state at the caller
DarksaCY adcedc2
Drop the buttons a travelling rig was pressed at, and close the leade…
DarksaCY 3b4a3dc
Merge upstream/main into the leader station
DarksaCY 3e50a8d
Follow main's move of the eval and roboarm keys
DarksaCY 9bece6a
Say the interrupt test takes the one receiver it asked for
DarksaCY fe039d2
Take the type errors this branch removed out of the baseline
DarksaCY fef8bc7
Walk out the travel a Cartesian delta asks for
DarksaCY 17719ae
Answer the review round the rebase brought
DarksaCY f3da6d9
Pace the fingers, clip a leader goal, and drop a pose that is not a n…
DarksaCY 7d1d186
Let the anchor go when the arm stands down
DarksaCY fe66bf7
Drop the fake SDK method nothing calls
DarksaCY 23c595f
Let the fake device record itself when it is opened
DarksaCY e2f2f7f
Take what the arm PR settled: the model, the home travel, and taking …
DarksaCY 28f43f0
Name the mesh dictionary once, and pin the two models against each other
DarksaCY 70abd19
Give the panda mesh names a type sorted can order
DarksaCY File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| BSD 3-Clause License | ||
|
|
||
| Copyright (c) 2025, Trossen Robotics | ||
| All rights reserved. | ||
|
|
||
| Redistribution and use in source and binary forms, with or without | ||
| modification, are permitted provided that the following conditions are met: | ||
|
|
||
| 1. Redistributions of source code must retain the above copyright notice, this | ||
| list of conditions and the following disclaimer. | ||
|
|
||
| 2. Redistributions in binary form must reproduce the above copyright notice, | ||
| this list of conditions and the following disclaimer in the documentation | ||
| and/or other materials provided with the distribution. | ||
|
|
||
| 3. Neither the name of the copyright holder nor the names of its | ||
| contributors may be used to endorse or promote products derived from | ||
| this software without specific prior written permission. | ||
|
|
||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # Trossen WidowX AI Description | ||
|
|
||
| Robot description (MJCF) of the Trossen WidowX AI arm, from | ||
| [trossen_arm_mujoco](https://github.com/TrossenRobotics/trossen_arm_mujoco) | ||
| (`trossen_arm_mujoco/assets/wxai/wxai_follower.xml` at revision | ||
| [`8d9389b`](https://github.com/TrossenRobotics/trossen_arm_mujoco/commit/8d9389b46ba02bdbf6d5e086e09d20717ccfed68)), | ||
| BSD 3-Clause, see [LICENSE](./LICENSE). | ||
|
|
||
| `meshdir` names `assets`, the directory beside this file that holds the meshes. | ||
|
|
||
| `ee_site` is the frame the arm controller reports its Cartesian position in: the site sits 0.156 m along | ||
| the flange's x axis, which is the `t_flange_tool` offset the `trossen_arm` SDK carries for the standard | ||
| `wxai_v0` end effector. Forward kinematics on this model and the pose the controller reports agree to | ||
| 0.13 mm and 0.01 degrees, measured on firmware 1.11.1. | ||
|
|
||
| `wxai_follower.urdf` is the same arm as URDF, from | ||
| [trossen_arm_description](https://github.com/TrossenRobotics/trossen_arm_description) | ||
| (`urdf/generated/wxai/wxai_follower.urdf`), BSD 3-Clause, with `meshes/trossen_black.png` beside the STLs | ||
| it already shares with the MJCF. The driver solves against the MJCF and the codecs against the URDF, so | ||
| `ee_gripper_link` of the URDF and `ee_site` of the MJCF must name one place: | ||
| `test_the_trossen_urdf_and_its_mjcf_put_the_control_frame_in_the_same_place` measures that they do. | ||
|
|
||
| The URDF names its meshes the way its own ROS package does; the driver shortens each to the file beside | ||
| this README before it publishes the model. |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Rule hidden-dependency violated:
MultiprocessEmitterandMultiprocessReceiversilently depend on no earlierWorldhaving set this process-global latch. If a caller catches aKeyboardInterruptraised inside a transport and later creates a freshWorldin the same process,_interruptedremains true, so every new multiprocess channel drops emissions and returns no data even though its connections are uncorrupted. Scope the latch to the affected world/transports, or reset it when constructing a new world.AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
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.
Noted, and left. This is the module-global
_interruptedthat #691 owns, and the same finding stands open on that PR (#691). Scoping it to a manager means threading that state into both transports and throughWorld.connect, which is a change aboutWorld, not about ending a run on an interrupt. The process that takes SIGINT is going down; a caller that catches it and builds a freshWorldis the case, and it is worth its own change.