Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
ac8cf7c
update pid values and cartesian error publisher
bhunecke Oct 30, 2025
15e0a2b
refactor action definitions for arm and gripper control, add status c…
bhunecke Nov 20, 2025
2647538
Add deadband parameter to PID controller and update initialization
rinaalo Nov 20, 2025
0cf0957
Add dynamic parameter callback for adjustments
rinaalo Nov 20, 2025
48d0f53
Add section for adjusting PID gains at runtime in README
rinaalo Nov 20, 2025
fc9d2fb
fix missing eddie description dependency
bhunecke Nov 26, 2025
9c5ef6e
refactor arm control action interface to use updated status codes
bhunecke Nov 26, 2025
0e6e96d
refactor test and sim interfaces to use updated status codes
bhunecke Nov 26, 2025
1387cb7
Update robot_setup.md for clarity and redundancy
bhunecke Nov 26, 2025
cfb6b40
Merge pull request #28 from Robots4Sustainability/refactor/action-ser…
rinaalo Nov 28, 2025
1af9be2
refactor: update idle state to run gravity compensation
bhunecke Dec 2, 2025
185dc2d
Undo changes in PID control
rinaalo Dec 4, 2025
7aa0d18
Revert the PID class changes
rinaalo Dec 4, 2025
11aa2de
Implement the deadband in compute_cartesian_ctrl
rinaalo Dec 4, 2025
cdd247c
Implement low-pass filter to smooth the torque commands
rinaalo Dec 4, 2025
f32cfa4
Add publishers to visualize the raw vs. smoothed torques
rinaalo Dec 4, 2025
85a4442
add idle and execute state transitions based on execution flags
bhunecke Dec 7, 2025
ebc44ff
Fix evaluate bilateral constraint return
rinaalo Dec 9, 2025
dc3b0cf
add execute to idle transition and update event handling
bhunecke Dec 9, 2025
f3498f7
Adjust the P-gain for the controller based on deadband
rinaalo Dec 9, 2025
11d3099
Include Zenoh router installation instructions
bhunecke Dec 9, 2025
fa89bc6
Activate smoothing based on dynamic gain change
rinaalo Dec 9, 2025
3838bb0
Change version to 'dev' for eddie-ros and robif2b
bhunecke Dec 10, 2025
4c3f6ed
Revise Cartesian error visualization instructions
bhunecke Dec 10, 2025
aee8c3d
fix goal cancel callback by clearing relative target and reset new ta…
bhunecke Dec 10, 2025
8bc4de5
refactor: rename helper methods for clarity and remove unused parameters
bhunecke Dec 10, 2025
3a1f4f9
update logging
bhunecke Dec 10, 2025
49332dc
update signal handler
bhunecke Dec 10, 2025
95ecfba
Reverted adjusting p-gain changes, since controller already handles that
rinaalo Dec 10, 2025
cf4c8b4
Refactor torque smoothing parameters and publishers for consistency
rinaalo Dec 12, 2025
57a3959
Merge pull request #30 from Robots4Sustainability/fix/return-to-idle
rinaalo Dec 12, 2025
10e321c
Add TorqueInterpolator for smooth torque transitions and update smoot…
rinaalo Dec 12, 2025
14a73da
Refactor PID control to return structured output and add publishers f…
rinaalo Dec 14, 2025
95a5c64
Add a low pass filter function (not being used right now)
rinaalo Dec 16, 2025
40fee23
Change some pid values, clean up ccode
rinaalo Dec 16, 2025
742e199
Publishing pid components with a timer
rinaalo Dec 17, 2025
fa244fd
Add eddie_description link to robot_setup.md
bhunecke Dec 17, 2025
bf5fa40
Merge branch 'release-3' into feature/pid-gains
rinaalo Dec 17, 2025
75f6385
Merge pull request #32 from Robots4Sustainability/feature/pid-gains
bhunecke Dec 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ include_directories(
add_executable(eddie_ros_interface
src/interface.cpp
src/interface-parameters.cpp
src/pid.cpp
)

ament_target_dependencies(eddie_ros_interface
Expand All @@ -68,7 +69,8 @@ target_link_libraries(eddie_ros_interface
# task planner node
add_executable(task_planner_node
src/task-planner.cpp
src/interface-parameters.cpp
#src/interface-parameters.cpp
src/pid.cpp
)
ament_target_dependencies(task_planner_node
rclcpp
Expand All @@ -87,7 +89,8 @@ target_link_libraries(task_planner_node

add_executable(sim_interface_node
src/sim-interface.cpp
src/interface-parameters.cpp
#src/interface-parameters.cpp
#src/pid.cpp
)
ament_target_dependencies(sim_interface_node
rclcpp
Expand All @@ -111,6 +114,7 @@ target_link_libraries(sim_interface_node
add_executable(eddie_ros_interface_test
src/interface-test.cpp
src/interface-parameters.cpp
src/pid.cpp
)

ament_target_dependencies(eddie_ros_interface_test
Expand Down
47 changes: 45 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,52 @@ run rviz:
ros2 launch eddie_ros rviz.launch.py use_sim:=true
```

## Plotting cartesian error with RQT Plot
## Adjusting PID gains on run-time (only for testing!)
*Note: We are only dynamically adjusting the PID gains at the moment for testing. PID gains will not be changed during run-time in the actual deployment of the robot.*

You can visualize the Cartesian error of the end-effectors with `rqt_plot`:
First, make sure to run the `eddie_ros_interface` node as described above.

Then, in a new terminal, source your ROS2 workspace.

Check current PID gain values:

```bash
ros2 param get /eddie_ros_interface pid.right.pos.x.p
```

You can check other values, such as:
```bash
pid_<leftarm/rightarm>.ee.<rot/pos>.<x/y/z>.<p/i/d>
```

e.g.,
- pid.rightarm.ee.pos.x.p
- pid.leftarm.ee.pos.y.i
- pid.rightarm.ee.rot.z.d
Comment on lines +103 to +109
Copy link

Copilot AI Dec 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation shows incorrect parameter naming pattern. The pattern "pid_<leftarm/rightarm>.ee.<rot/pos>" doesn't match the actual parameter structure used in the code, which is "pid.<left/right>.<pos/rot>.<x/y/z>.<p/i/d>" (no "ee" component, and uses "left"/"right" not "leftarm"/"rightarm").

Copilot uses AI. Check for mistakes.

Set a new value for a PID gain:
```bash
ros2 param set /eddie_ros_interface pid.right.pos.x.p 150.0
```
## Plotting PID components with [Visualizer](https://github.com/Robots4Sustainability/cart-error-visualizer)

You can visualize the PID components using pid_component_visualizer.py in our Visualizer repository.
Follow the instructions in the repository on how to install and run the visualizer.

## Plotting torques with [Visualizer](https://github.com/Robots4Sustainability/cart-error-visualizer)

The interface will generate a torque_log.csv file in the root of your workspace.
You can plot this file using plot_torque_log.py in our visualizer repository.
Follow the instructions in the repository on how to install and run the visualizer.

## Plotting cartesian error with [Cartesian Error Visualizer](https://github.com/Robots4Sustainability/cart-error-visualizer)

You can visualize the Cartesian error of the end-effectors with [Cartesian Error Visualizer](https://github.com/Robots4Sustainability/cart-error-visualizer).
Follow the instructions in the repository on how to install and run the visualizer.

### Plotting with `rqt_plot` (not recommended)

You can also visualize the Cartesian error of the end-effectors with `rqt_plot`:

First, make sure to run the `eddie_ros_interface` node as described above.

Expand Down
18 changes: 12 additions & 6 deletions action/ArmControl.action
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Request: Command to control arm
geometry_msgs/Pose target_pose
geometry_msgs/Pose target_pose # Desired end effector pose

---
# Result: Final status of the arm movement
bool success # Success
string message # Result status message
geometry_msgs/Pose final_pose # Final end effector pose achieved
int32 result_code # Result code
int32 SUCCESS = 0
int32 INVALID_GOAL = 1
int32 GOAL_TIMEOUT = 2
int32 CANCELLED = 3

string result_message # Description of the result
geometry_msgs/Pose final_pose # Final end effector pose achieved

---
# Feedback: Progress updates during arm movement
geometry_msgs/Pose current_pose # Current end effector pose
string status_message # Possible status
geometry_msgs/Pose current_pose # Current end effector pose
18 changes: 13 additions & 5 deletions action/GripperControl.action
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
# Request: Command to control gripper
float64 target_position # 0.0 = fully closed, 1.0 = fully open
float64 target_position # 100.0 = fully closed, 0.0 = fully open
Copy link

Copilot AI Dec 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gripper position range documentation updated from "0.0 = fully closed, 1.0 = fully open" to "100.0 = fully closed, 0.0 = fully open". This is a breaking API change that reverses the polarity and changes the scale. Ensure all calling code has been updated accordingly and consider documenting this as a breaking change in release notes.

Copilot uses AI. Check for mistakes.
float64 velocity # Maximum velocity (optional, use default if 0.0)
float64 force # Maximum force/effort (optional, use default if 0.0)

---
# Result: Final status of the gripper operation
bool success # Success
string message # Result status message
int32 result_code # Result code
int32 SUCCESS = 0
int32 INVALID_GOAL = 1
int32 GOAL_TIMEOUT = 2
int32 CANCELLED = 3

string result_message # Description of the result
float64 final_position # Final gripper position achieved

---
# Feedback: Progress updates during gripper movement
float64 current_position # Current gripper position
string status_message # Possible status message
float64 measured_position # Current gripper position
float64 measured_velocity # Current gripper velocity
float64 measured_current # Current gripper current draw
9 changes: 8 additions & 1 deletion include/eddie_ros/eddie_ros.fsm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ START_STATE: @S_START
CURRENT_STATE: @S_START
END_STATE: @S_EXIT

EVENTS: E_CONFIGURE_ENTERED,E_CONFIGURE_EXIT,E_IDLE_ENTERED,E_IDLE_EXIT_EXECUTE,E_IDLE_EXIT_COMPILE,E_COMPILE_ENTERED,E_COMPILE_EXIT,E_EXECUTE_ENTERED,E_STEP
EVENTS: E_CONFIGURE_ENTERED,E_CONFIGURE_EXIT,E_IDLE_ENTERED,E_IDLE_EXIT_EXECUTE,E_IDLE_EXIT_COMPILE,E_COMPILE_ENTERED,E_COMPILE_EXIT,E_EXECUTE_ENTERED,E_EXECUTE_EXIT_IDLE,E_STEP

TRANSITIONS:
T_START_CONFIGURE:
Expand All @@ -30,6 +30,9 @@ TRANSITIONS:
T_EXECUTE_EXECUTE:
FROM: @S_EXECUTE
TO: @S_EXECUTE
T_EXECUTE_IDLE:
FROM: @S_EXECUTE
TO: @S_IDLE

REACTIONS:
R_E_CONFIGURE_EXIT:
Expand All @@ -48,6 +51,10 @@ REACTIONS:
WHEN: @E_COMPILE_EXIT
DO: @T_COMPILE_EXECUTE
FIRES: @E_EXECUTE_ENTERED
R_E_EXECUTE_EXIT_IDLE:
WHEN: @E_EXECUTE_EXIT_IDLE
DO: @T_EXECUTE_IDLE
FIRES: @E_IDLE_ENTERED

R_E_STEP1:
WHEN: @E_STEP
Expand Down
17 changes: 16 additions & 1 deletion include/eddie_ros/eddie_ros.fsm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ enum e_events {
E_COMPILE_ENTERED,
E_COMPILE_EXIT,
E_EXECUTE_ENTERED,
E_EXECUTE_EXIT_IDLE,
E_STEP,
NUM_EVENTS
};
Expand All @@ -86,6 +87,7 @@ enum e_transitions {
T_IDLE_COMPILE,
T_COMPILE_EXECUTE,
T_EXECUTE_EXECUTE,
T_EXECUTE_IDLE,
NUM_TRANSITIONS
};

Expand All @@ -95,6 +97,7 @@ enum e_reactions {
R_E_IDLE_EXIT_EXECUTE,
R_E_IDLE_EXIT_COMPILE,
R_E_COMPILE_EXIT,
R_E_EXECUTE_EXIT_IDLE,
R_E_STEP1,
R_E_STEP2,
R_E_STEP3,
Expand Down Expand Up @@ -140,7 +143,11 @@ inline struct transition transitions[NUM_TRANSITIONS] = {
{
.startStateIndex = S_EXECUTE,
.endStateIndex = S_EXECUTE,
}
},
{
.startStateIndex = S_EXECUTE,
.endStateIndex = S_IDLE,
}
};

// sm reaction table
Expand Down Expand Up @@ -177,6 +184,14 @@ inline struct event_reaction reactions[NUM_REACTIONS] = {
E_EXECUTE_ENTERED
},
},
{
.conditionEventIndex = E_EXECUTE_EXIT_IDLE,
.transitionIndex = T_EXECUTE_IDLE,
.numFiredEvents = 1,
.firedEventIndices = new unsigned int[1]{
E_IDLE_ENTERED
},
},
{
.conditionEventIndex = E_STEP,
.transitionIndex = T_START_CONFIGURE,
Expand Down
Loading