TiCare Navigation Architecture
ticare_interfaces
Description: Custom service and message definitions for the TiCare ecosystem.
Service:
SavePose.srv:Request:
string labelResponse:
bool success,string message
Dependencies:
rosidl_default_generators(buildtool_depend),rosidl_default_runtime(exec_depend),rosidl_interface_packages(member_of_group)
ticare_navigation
Description: Implementation of the navigation stack, pose recording, and state management.
Launch:
ticare_navigation.launch.py: Main launch file. Launch rviz andticare_nodes.launch.pyfor real-world operation.ticare_nodes.launch.py: Launches thenav_managerandpose_recordernodes.ticare_sim.launch.py: Launches PAL Robotics packages simulation with specific arguments.navigation_public_sim_ticare.launch.py: Configures Tiago simulation with custom map.
Maps: Each map is defined by a
.pgmand a.yamlfile:final_map: Map used for navigation in the simulation, merge ofmapandmap_juan.map: Map of the entire CAR with some errors.map_juan: Map of the Lab in the CAR.lab: Map of the Lab, first iteration.
Rviz:
rviz_ticare_config.rviz: Custom RViz configuration forticare_sim.launch.py.
Scripts:
modify_poses.py: Shifts the originalcar.worldby modifying the poses of each block.
Worlds:
car: Original world.car_shifted_final_block: Shifted world to match the spawning point with the real world location of TIAGo, using tables as blocks to ensure robust navigation.
There are other iterations of the maps that have been obtained by hand editing or implementing python scripts.
Node:
nav_managerDescription: High-level orchestrator that monitors localization quality (AMCL) and manages state transitions (Search, Navigation, Emergency).
Interfaces:
Publishers:
/nav2vis(std_msgs/msg/String): Sends commands (“start_vis”, “stop_vis”) to theticare_visionpackage to activate or deactivate the camera during the search phase./nav2com(std_msgs/msg/String): Communicates mission status (“home”, “object_point”) to theticare_communicationpackage./cmd_vel(geometry_msgs/msg/Twist): Sends velocity commands to rotate if the initial localization accuracy is insufficient.
Subscribers:
/vis2nav(std_msgs/msg/String): Receives object detection status (“object_detected”) fromticare_visionpackage./com2nav(std_msgs/msg/String): Receives mission start commands (“start_nav”, “return”) fromticare_communicationpackage.
Service Clients:
/save_pose(ticare_interfaces/srv/SavePose): Request to record start or target points.
Action Clients:
/navigate_to_pose(nav2_msgs/action/NavigateToPose): Sends the robot to the target using A* algorithm./follow_waypoints(nav2_msgs/action/FollowWaypoints): Executes coverage path planning.
Entry Point:
ticare_navigation.nav_manager:mainDependencies:
rclpy,ticare_interfaces,geometry_msgs.
Node:
pose_recorderDescription: Persistence node responsible for receiving poses and storing them in YAML format.
Interfaces:
Subscribers:
/amcl_pose(geometry_msgs/msg/PoseWithCovarianceStamped): Catches the current pose for immediate saving.
Service Servers:
/save_pose(ticare_interfaces/srv/SavePose): Receives a label and saves the current pose.
Entry Point:
ticare_navigation.pose_recorder:mainDependencies:
rclpy,ticare_interfaces,geometry_msgs,rosidl_runtime_py.