Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
18d206c
feat: add dataset format selection options in InfoPanel component
ola31 Oct 29, 2025
302c9e5
fix: improve error handling in data retrieval methods and update rela…
Woojin-Crive Oct 29, 2025
be9a7df
feat: add StopAndDeleteRecording service to manage recording lifecycle
Woojin-Crive Oct 29, 2025
4257b6b
feat: implement rosbag recording management in PhysicalAIServer
Woojin-Crive Oct 29, 2025
af36382
refactor: Remove joint states recorder and bag reader implementations
Woojin-Crive Oct 29, 2025
dd4cf2a
feat: Add rosbag_to_lerobot package for converting rosbag data to LeR…
Woojin-Crive Oct 29, 2025
e67efd7
feat: Add camera rotation parameters to rosbag converter
Woojin-Crive Oct 29, 2025
1f45494
feat: Enhance rosbag_to_lerobot with parameter and new configuration …
Woojin-Crive Oct 29, 2025
0a85578
feat: Add optimized save mode to rosbag_to_lerobot converter
Woojin-Crive Oct 29, 2025
c342941
fix: Change video encoding check to a loop for completion in optimize…
Woojin-Crive Oct 29, 2025
f6be53c
feat: Update ffw_arm_only_config.yaml and enhance rosbag_reader for i…
Woojin-Crive Oct 29, 2025
49f904c
feat: Add image rotator node and enhance configuration for multiple d…
DongyunRobotis Oct 29, 2025
d2733b0
Merge branch 'feature-rosbag-record-rebase2' into feature-ros-bag
ola31 Oct 29, 2025
0f6911e
refactor: integrated rosbag_recorder_msgs into rosbag_recorder package
ola31 Oct 29, 2025
c7f7598
chore: Update CI workflows and package dependencies
ola31 Oct 29, 2025
33f6528
feat: Separate config setup, preparation, and recording start
ola31 Oct 30, 2025
374b2e6
feat: Refactor rosbag recording process with new service commands and…
ola31 Oct 30, 2025
a1b11ab
feat: Implement SendCommand service for rosbag recording management
ola31 Oct 30, 2025
57311fc
refactor: Enhance rosbag recording handling with improved status tran…
ola31 Oct 31, 2025
e134f8b
chore: Update CMake and package configuration, improve logging messag…
ola31 Oct 31, 2025
9cb9429
feat: Add record_rosbag2 functionality to TaskInfo and update related…
ola31 Oct 31, 2025
05b0282
Revert "feat: Add image rotator node and enhance configuration for mu…
ola31 Nov 1, 2025
92d524e
feat: Add support for rosbag extra topics in communicator and paramet…
ola31 Nov 3, 2025
ed88843
feat: Enable directory selection for local uploads in Huggingface sec…
ola31 Nov 3, 2025
0493911
feat: change rosbag2 folder save directory
ola31 Nov 3, 2025
71e9023
feat: Update InfoPanel to auto-disable recordRosBag2 in Multi-Task mo…
ola31 Nov 3, 2025
f57d318
fix: Update rosbag path error handling to provide a warning instead o…
ola31 Nov 3, 2025
e520085
feat: Add functionality to create README.md for datasets and implemen…
ola31 Nov 4, 2025
017a3b0
feat: Implement methods to create DatasetCard and ModelCard README.md…
ola31 Nov 4, 2025
c8963ff
fix: change to not create ModelCard when uploading a model
ola31 Nov 5, 2025
de4682a
chore: Change spelling of 'RosBag2' to 'Rosbag2' in InfoPanel component
ola31 Nov 5, 2025
756446d
feat: Add functionality to reset tags and update first load state in …
ola31 Nov 5, 2025
3571a7e
chore: Remove rosbag_recorder_demo and rosbag_to_lerobot packages, in…
ola31 Nov 5, 2025
bdcee9d
chore: Update package description in rosbag_recorder
ola31 Nov 5, 2025
e9eaf71
chore: Update changelogs for version 0.7.0 across multiple packages
ola31 Nov 5, 2025
d41f7a9
chore: update version to 0.7.0
ola31 Nov 5, 2025
b9b2390
fix: lint
ola31 Nov 5, 2025
d63392c
fix: lint
ola31 Nov 5, 2025
09b506a
fix: Add RosbagNotReadyException to handle rosbag recording readiness
ola31 Nov 5, 2025
6f00c5a
chore: Add static method to retrieve robot type from info JSON and fi…
ola31 Nov 5, 2025
d0e2c1a
chore: Update changelogs
ola31 Nov 21, 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
1 change: 1 addition & 0 deletions .github/workflows/ros-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,4 @@ jobs:
package-name: |
physical_ai_server
physical_ai_interfaces
rosbag_recorder
2 changes: 1 addition & 1 deletion .github/workflows/ros-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
linter: [flake8, pep257, xmllint, copyright]
linter: [cpplint, cppcheck, uncrustify, lint_cmake, flake8, pep257, xmllint, copyright]
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down
4 changes: 4 additions & 0 deletions physical_ai_interfaces/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
Changelog for package physical_ai_interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0.7.0 (2025-11-21)
------------------
* None

0.6.13 (2025-10-27)
------------------
* None
Expand Down
1 change: 1 addition & 0 deletions physical_ai_interfaces/msg/TaskInfo.msg
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ bool push_to_hub
bool private_mode
bool use_optimized_save_mode
bool record_inference_mode
bool record_rosbag2
2 changes: 1 addition & 1 deletion physical_ai_interfaces/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>physical_ai_interfaces</name>
<version>0.6.13</version>
<version>0.7.0</version>
<description>
ROS 2 interfaces for Physical AI tools
</description>
Expand Down
5 changes: 5 additions & 0 deletions physical_ai_manager/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
Changelog for package physical_ai_manager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0.7.0 (2025-11-21)
------------------
* Added rosbag2 record option to the Record page
* Contributors: Kiwoong Park

0.6.13 (2025-10-27)
------------------
* Changed to skip automatic HF user ID loading on Record page when Push to Hub is disabled
Expand Down
4 changes: 2 additions & 2 deletions physical_ai_manager/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion physical_ai_manager/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "physical_ai_manager",
"version": "0.6.13",
"version": "0.7.0",
"description": "Web UI for Physical AI Platform",
"author": "Kiwoong Park <[email protected]>",
"contributors": [
Expand Down
27 changes: 27 additions & 0 deletions physical_ai_manager/src/components/InfoPanel.js
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ const InfoPanel = () => {
if (useMultiTaskMode && !info.useOptimizedSave) {
dispatch(setTaskInfo({ ...info, useOptimizedSave: true }));
}

if (useMultiTaskMode && info.recordRosBag2) {
dispatch(setTaskInfo({ ...info, recordRosBag2: false }));
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [useMultiTaskMode, info.useOptimizedSave, dispatch]);

Expand Down Expand Up @@ -749,6 +753,29 @@ const InfoPanel = () => {
</div>
</div>

<div className={clsx('flex', 'items-center', 'mb-2')}>
<span className={classLabel}>Record Rosbag2</span>
<div className="flex flex-col">
<div className={clsx('flex', 'items-center')}>
<input
className={clsx(classCheckbox, {
'cursor-not-allowed opacity-50': useMultiTaskMode,
})}
type="checkbox"
checked={!!info.recordRosBag2}
onChange={(e) => handleChange('recordRosBag2', e.target.checked)}
disabled={!isEditable || useMultiTaskMode}
/>
<span className={clsx('ml-2', 'text-sm', 'text-gray-500')}>
{info.recordRosBag2 ? 'Enabled' : 'Disabled'}
</span>
</div>
{useMultiTaskMode && (
<span className="text-xs text-blue-600 ml-1">(Auto-disabled in Multi-Task mode)</span>
)}
</div>
</div>

<div className="mt-4 space-y-2">
<button
className={clsx(
Expand Down
7 changes: 5 additions & 2 deletions physical_ai_manager/src/components/RobotTypeSelector.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ import toast from 'react-hot-toast';
import { MdRefresh } from 'react-icons/md';
import { useRosServiceCaller } from '../hooks/useRosServiceCaller';
import TaskPhase from '../constants/taskPhases';
import { selectRobotType } from '../features/tasks/taskSlice';
import { setRobotTypeList } from '../features/ui/uiSlice';
import { selectRobotType, removeAllTags } from '../features/tasks/taskSlice';
import { setRobotTypeList, setIsFirstLoadTrue } from '../features/ui/uiSlice';

export default function RobotTypeSelector() {
const dispatch = useDispatch();
Expand Down Expand Up @@ -84,6 +84,9 @@ export default function RobotTypeSelector() {
if (result && result.success) {
dispatch(selectRobotType(selectedRobotType));
toast.success(`Robot type set to: ${selectedRobotType}`);

dispatch(setIsFirstLoadTrue('record')); // to reset tags
dispatch(removeAllTags());
} else {
toast.error(`Failed to set robot type: ${result.message || 'Unknown error'}`);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ const HuggingfaceSection = () => {
onFileSelect={handleHfLocalDirSelect}
title="Select Local Directory for Upload"
selectButtonText="Select"
allowDirectorySelect={false}
allowDirectorySelect={true}
targetFolderName={[
TARGET_FOLDERS.DATASET_METADATA,
TARGET_FOLDERS.DATASET_VIDEO,
Expand Down
5 changes: 5 additions & 0 deletions physical_ai_manager/src/features/tasks/taskSlice.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ const initialState = {
pushToHub: true,
privateMode: false,
useOptimizedSave: true,
recordRosBag2: false,
},
taskStatus: {
robotType: '',
Expand Down Expand Up @@ -107,6 +108,9 @@ const taskSlice = createSlice({
removeTag: (state, action) => {
state.taskInfo.tags = state.taskInfo.tags.filter((tag) => tag !== action.payload);
},
removeAllTags: (state) => {
state.taskInfo.tags = [];
},
setHeartbeatStatus: (state, action) => {
state.heartbeatStatus = action.payload;
},
Expand Down Expand Up @@ -134,6 +138,7 @@ export const {
setRecordInferenceMode,
addTag,
removeTag,
removeAllTags,
setHeartbeatStatus,
setLastHeartbeatTime,
setUseMultiTaskMode,
Expand Down
4 changes: 4 additions & 0 deletions physical_ai_manager/src/features/ui/uiSlice.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ const uiSlice = createSlice({
setIsFirstLoadFalse: (state, action) => {
state.isFirstLoad[action.payload] = false;
},
setIsFirstLoadTrue: (state, action) => {
state.isFirstLoad[action.payload] = true;
},
},
});

Expand All @@ -96,6 +99,7 @@ export const {
clearNotifications,
setRobotTypeList,
setIsFirstLoadFalse,
setIsFirstLoadTrue,
} = uiSlice.actions;

export default uiSlice.reducer;
1 change: 1 addition & 0 deletions physical_ai_manager/src/hooks/useRosServiceCaller.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ export function useRosServiceCaller() {
push_to_hub: Boolean(taskInfo.pushToHub),
private_mode: Boolean(taskInfo.privateMode),
use_optimized_save_mode: Boolean(taskInfo.useOptimizedSave),
record_rosbag2: Boolean(taskInfo.recordRosBag2),
},
command: Number(command_enum),
};
Expand Down
1 change: 1 addition & 0 deletions physical_ai_manager/src/hooks/useRosTopicSubscription.js
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ export function useRosTopicSubscription() {
pushToHub: msg.task_info.push_to_hub || false,
privateMode: msg.task_info.private_mode || false,
useOptimizedSave: msg.task_info.use_optimized_save_mode || false,
recordRosBag2: msg.task_info.record_rosbag2 || false,
})
);
}
Expand Down
5 changes: 5 additions & 0 deletions physical_ai_server/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
Changelog for package physical_ai_server
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0.7.0 (2025-11-21)
------------------
* Added rosbag2 recording support when collecting LeRobot datasets
* Contributors: Woojin Wie, Kiwoong Park

0.6.13 (2025-10-27)
------------------
* Fixed physical_ai_server crash when querying user ID without locally registered HuggingFace token
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ def generate_launch_description():
)
)

# Include rosbag_recorder service_bag_recorder node
rosbag_recorder_node = Node(
package='rosbag_recorder',
executable='service_bag_recorder',
name='service_bag_recorder',
output='screen'
)

# web_video_server node
web_video_server_node = Node(
package='web_video_server',
Expand All @@ -57,5 +65,6 @@ def generate_launch_description():
return LaunchDescription([
physical_ai_server_launch,
rosbridge_server_launch,
rosbag_recorder_node,
web_video_server_node
])
3 changes: 2 additions & 1 deletion physical_ai_server/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>physical_ai_server</name>
<version>0.6.13</version>
<version>0.7.0</version>
<description>
ROS 2 package for Open Platform AI Kit integration
</description>
Expand All @@ -17,6 +17,7 @@
<depend>message_filters</depend>
<depend>cv_bridge</depend>
<depend>trajectory_msgs</depend>
<depend>rosbag_recorder</depend>
<exec_depend>web_video_server</exec_depend>
<exec_depend>rosbridge_suite</exec_depend>
<exec_depend>image_transport_plugins</exec_depend>
Expand Down
Loading
Loading