A ROS 2 world system for robotics applications featuring new poses.
Overview • Architecture • Installation • Usage • fbot_world message and services • Contributing
fbot_world is a ROS 2 package for managing poses in world map scenarios. It allows loading and saving poses for reuse across different robotic applications.
It was designed for the RoboCup@Home and the robot BORIS competition but is adaptable to various robotics scenarios.
The system consists of three main packages:
fbot_world/
├── 📁 fbot_world/ # Core fbot_world files
| ├── 📁 fbot_world/ # node files
│ ├── 📁 launch/ # launch files
│ ├── 📁 scripts/ # script files
└── 📁 fbot_world_msgs/ # Custom ROS message definitions
- ROS2 Humble
- Python 3.10+
- Ubuntu 22.04
- Dependencies listed in
package.xmlandrequirements.txt
-
Clone the repository into your ROS workspace:
cd ~/fbot_ws/src git clone https://github.com/fbotathome/fbot_world.git
-
Install dependencies:
cd ~/fbot_ws sudo rosdep init # Skip if already initialized rosdep update rosdep install --from-paths src --ignore-src -r -y pip install -r src/fbot_world/requirements.txt
-
Build the workspace:
cd ~/fbot_ws colcon build --packages-select fbot_world fbot_world_msgs source install/setup.bash
Loads a poses/rooms YAML file and serves it through the /fbot_world/* services
(see the table below). It also publishes RViz markers of every room and object
sub-area on /fbot_world/debug_markers, and answers "which room am I in?" queries
via /fbot_world/get_room.
# Launch pose node
ros2 launch fbot_world pose.launch.py config_file_name:=file_name_without_dot_yamlInteractively records the robot's base poses and saves them under the
targets group of a YAML file. Drive/teleop the robot to a spot, give the pose a
name, and the current /amcl_pose is captured (position + orientation). New poses
are appended to the chosen file, so existing entries are preserved.
ros2 run fbot_world pose_writerRecords fixed end-effector "place" poses (e.g. a shelf or bin drop point) under
the place_poses group. It reads the gripper pose from TF (in the map frame) and
disables arm torque so you can hand-guide the arm to the target, name it, and
capture it; torque is re-enabled on exit.
⚠️ The arm goes limp when torque is cut — hold it before confirming the prompt.
Configurable via parameters: reference_frame (default map), ee_frame
(default wx200/ee_gripper_link), group_set (default place_poses),
robot_name (default wx200) and torque_group (default arm).
ros2 run fbot_world place_pose_writerAnnotates room boundaries and object sub-areas by clicking points in RViz, and
writes them to the rooms section of a YAML file — the same structure the Pose
Node loads (used by /fbot_world/get_room). Only the rooms section is written;
any existing poses/targets are left untouched.
Workflow: launch navigation with your map and RViz, run the node, then use the RViz Publish Point tool to click each corner of a room. The in-progress polygon is previewed live; when you close it, the finished area is drawn filled, labelled and coloured. You can then type the pose names that belong to the room and draw any object sub-areas the same way.
In RViz, add a MarkerArray display on /room_writer/preview (fixed frame
map). Terminal commands while drawing: Enter closes the polygon, u undoes the
last point, r resets, a aborts.
ros2 run fbot_world room_writer| Service | Type | Description |
|---|---|---|
/fbot_world/get_pose |
GetPose |
Service callback to return the pose and size for a requested target key |
/fbot_world/get_set |
GetPoseFromSet |
Service callback to return all poses for a requested group name key |
/fbot_world/get_groups_names |
GetSets |
Service callback that returns available pose groups and room metadata (poses/objects) from the YAML file |
/fbot_world/get_room |
GetRoom |
Service that returns the room and object sub-area containing the pose provided in the request (or "None") |
- Create a feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request