# migrations

dir: embeddings_queue
filename: 00001-embeddings.sqlite.sql
hash: d3755dfd232be8e8301f4d7fcfb3a486
sql:
CREATE TABLE embeddings_queue (
    seq_id INTEGER PRIMARY KEY,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    operation INTEGER NOT NULL,
    topic TEXT NOT NULL,
    id TEXT NOT NULL,
    vector BLOB,
    encoding TEXT,
    metadata TEXT
);


dir: sysdb
filename: 00001-collections.sqlite.sql
hash: 38352d725ad1c16074fac420b22b4633
sql:
CREATE TABLE collections (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    topic TEXT NOT NULL,
    UNIQUE (name)
);

CREATE TABLE collection_metadata (
    collection_id TEXT REFERENCES collections(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (collection_id, key)
);


dir: sysdb
filename: 00002-segments.sqlite.sql
hash: 2913cb6a503055a95f625448037e8912
sql:
CREATE TABLE segments (
    id TEXT PRIMARY KEY,
    type TEXT NOT NULL,
    scope TEXT NOT NULL,
    topic TEXT,
    collection TEXT REFERENCES collection(id)
);

CREATE TABLE segment_metadata (
    segment_id TEXT  REFERENCES segments(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (segment_id, key)
);


dir: sysdb
filename: 00004-tenants-databases.sqlite.sql
hash: 048867ce8fcdefe4023c7110e4433591
sql:
CREATE TABLE IF NOT EXISTS tenants (
    id TEXT PRIMARY KEY,
    UNIQUE (id)
);

CREATE TABLE IF NOT EXISTS databases (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per tenant
    tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    UNIQUE (tenant_id, name) -- Ensure that a tenant has only one database with a given name
);

CREATE TABLE IF NOT EXISTS collections_tmp (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per database
    topic TEXT NOT NULL,
    dimension INTEGER,
    database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
    UNIQUE (name, database_id)
);

-- Create default tenant and database
INSERT OR REPLACE INTO tenants (id) VALUES ('default_tenant'); -- The default tenant id is 'default_tenant' others are UUIDs
INSERT OR REPLACE INTO databases (id, name, tenant_id) VALUES ('00000000-0000-0000-0000-000000000000', 'default_database', 'default_tenant');

INSERT OR REPLACE INTO collections_tmp (id, name, topic, dimension, database_id)
    SELECT id, name, topic, dimension, '00000000-0000-0000-0000-000000000000' FROM collections;
DROP TABLE collections;
ALTER TABLE collections_tmp RENAME TO collections;


dir: sysdb
filename: 00005-remove-topic.sqlite.sql
hash: b1367c826b8fba5f96f27befdc1d42d2
sql:
-- Remove the topic column from the Collections and Segments tables

ALTER TABLE collections DROP COLUMN topic;
ALTER TABLE segments DROP COLUMN topic;


dir: sysdb
filename: 00006-collection-segment-metadata.sqlite.sql
hash: 4eea7468935bf25d4604a0fed2366116
sql:
-- SQLite does not support adding check with alter table, as a result, adding a check
-- involve creating a new table and copying the data over. It is over kill with adding
-- a boolean type column. The application write to the table needs to ensure the data
-- integrity.
ALTER TABLE collection_metadata ADD COLUMN bool_value INTEGER;
ALTER TABLE segment_metadata ADD COLUMN bool_value INTEGER;


dir: sysdb
filename: 00007-collection-config.sqlite.sql
hash: 1c7e63bba346a42a18b6ab7f1c989bed
sql:
-- Stores collection configuration dictionaries.
ALTER TABLE collections ADD COLUMN config_json_str TEXT;


dir: sysdb
filename: 00008-maintenance-log.sqlite.sql
hash: 0a0e7e93111a01789addf64961c6127c
sql:
-- Records when database maintenance operations are performed.
-- At time of creation, this table is only used to record vacuum operations.
CREATE TABLE maintenance_log (
  id INT PRIMARY KEY,
  timestamp INT NOT NULL,
  operation TEXT NOT NULL
);


dir: sysdb
filename: 00009-segment-collection-not-null.sqlite.sql
hash: 054355aef9e63702bf54ea29e61563f1
sql:
-- This makes segments.collection non-nullable.
CREATE TABLE segments_temp (
    id TEXT PRIMARY KEY,
    type TEXT NOT NULL,
    scope TEXT NOT NULL,
    collection TEXT REFERENCES collection(id) NOT NULL
);

INSERT INTO segments_temp SELECT * FROM segments;
DROP TABLE segments;
ALTER TABLE segments_temp RENAME TO segments;


dir: metadb
filename: 00001-embedding-metadata.sqlite.sql
hash: 2b4cf52c4bb2676e21d6860a4409f856
sql:
CREATE TABLE embeddings (
    id INTEGER PRIMARY KEY,
    segment_id TEXT NOT NULL,
    embedding_id TEXT NOT NULL,
    seq_id BLOB NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE (segment_id, embedding_id)
);

CREATE TABLE embedding_metadata (
    id INTEGER REFERENCES embeddings(id),
    key TEXT NOT NULL,
    string_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (id, key)
);

CREATE TABLE max_seq_id (
    segment_id TEXT PRIMARY KEY,
    seq_id BLOB NOT NULL
);

CREATE VIRTUAL TABLE embedding_fulltext USING fts5(id, string_value);


dir: metadb
filename: 00002-embedding-metadata.sqlite.sql
hash: 12a570f7121b3a8ce750a2a7c36da20f
sql:
-- SQLite does not support adding check with alter table, as a result, adding a check
-- involve creating a new table and copying the data over. It is over kill with adding
-- a boolean type column. The application write to the table needs to ensure the data
-- integrity.
ALTER TABLE embedding_metadata ADD COLUMN bool_value INTEGER


dir: metadb
filename: 00003-full-text-tokenize.sqlite.sql
hash: f97ad6334aeaa8f419f01110b648b97a
sql:
CREATE VIRTUAL TABLE embedding_fulltext_search USING fts5(string_value, tokenize='trigram');
INSERT INTO embedding_fulltext_search (rowid, string_value) SELECT rowid, string_value FROM embedding_metadata;
DROP TABLE embedding_fulltext;


dir: metadb
filename: 00004-metadata-indices.sqlite.sql
hash: fb36603a45ee2cd0254cef3ef86585e8
sql:
CREATE INDEX IF NOT EXISTS embedding_metadata_int_value ON embedding_metadata (key, int_value) WHERE int_value IS NOT NULL;
CREATE INDEX IF NOT EXISTS embedding_metadata_float_value ON embedding_metadata (key, float_value) WHERE float_value IS NOT NULL;
CREATE INDEX IF NOT EXISTS embedding_metadata_string_value ON embedding_metadata (key, string_value) WHERE string_value IS NOT NULL;


# embeddings_queue

created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1372ec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 15310, "chroma:document": "any other word of your liking.Running launch files\uf0c11 Update setup.py\uf0c1Opensetup.pyand add the following lines so that the launch files from thelaunch/folder and configuration file from theconfig/would be installed. Thedata_filesfield should now look like this:importosfromglobimportglobfromsetuptoolsimportsetup...data_files=[...(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','*launch.[pxy][yma]*'))),(os.path.join('share',package_name,'config'),glob(os.path.join('config','*.yaml'))),(os.path.join('share',package_name,'rviz'),glob(os.path.join('config','*.rviz'))),],2 Build and run\uf0c1To finally see the result of our code, build the package and launch the top-level launch file using the following command:ros2 launch launch_tutorial launch_turtlesim_launch.pyYou will now see the two turtlesim simulations started. There are two turtles in the first one and one in the second one. In the first simulation,turtle2is spawned in the bottom-left part of the world. Its aim is to reach thecarrot1frame"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137300-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 16278, "chroma:document": "part of the world. Its aim is to reach thecarrot1frame which is five meters away on the x-axis relative to theturtle1frame.Theturtlesim2/turtle1in the second is designed to mimic the behavior of theturtle2.If you want to control theturtle1, run the teleop node.ros2 run turtlesim turtle_teleop_keyAs a result, you will see a similar picture:In addition to that, the RViz should have started. It will show all turtle frames relative to theworldframe, whose origin is at the bottom-left corner.Summary\uf0c1In this tutorial, you learned about various tips and practices of managing large projects using ROS 2 launch files."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137314-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 16895, "chroma:document": "Code Examples:\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137328-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 16930, "chroma:document": "importosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch.actionsimportIncludeLaunchDescriptionfromlaunch.launch_description_sourcesimportPythonLaunchDescriptionSourcedefgenerate_launch_description():turtlesim_world_1=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/turtlesim_world_1_launch.py']))turtlesim_world_2=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/turtlesim_world_2_launch.py']))broadcaster_listener_nodes=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/broadcaster_listener_launch.py']),launch_arguments={'target_frame':'carrot1'}.items(),)mimic_node=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/mimic_launch.py']))fixed_frame"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13733c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 17889, "chroma:document": "ry('launch_tutorial'),'launch'),'/mimic_launch.py']))fixed_frame_node=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/fixed_broadcaster_launch.py']))rviz_node=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/turtlesim_rviz_launch.py']))returnLaunchDescription([turtlesim_world_1,turtlesim_world_2,broadcaster_listener_nodes,mimic_node,fixed_frame_node,rviz_node])"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13735a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 18413, "chroma:document": "Language: unknown\n\nfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.substitutionsimportLaunchConfiguration,TextSubstitutionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():background_r_launch_arg=DeclareLaunchArgument('background_r',default_value=TextSubstitution(text='0'))background_g_launch_arg=DeclareLaunchArgument('background_g',default_value=TextSubstitution(text='84'))background_b_launch_arg=DeclareLaunchArgument('background_b',default_value=TextSubstitution(text='122'))returnLaunchDescription([background_r_launch_arg,background_g_launch_arg,background_b_launch_arg,Node(package='turtlesim',executable='turtlesim_node',name='sim',parameters=[{'background_r':LaunchConfiguration('background_r'),'background_g':LaunchConfiguration('background_g'),'background_b':LaunchConfiguration('background_b'),}]),])\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13736e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 19285, "chroma:document": "Language: unknown\n\nimportosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():config=os.path.join(get_package_share_directory('launch_tutorial'),'config','turtlesim.yaml')returnLaunchDescription([Node(package='turtlesim',executable='turtlesim_node',namespace='turtlesim2',name='sim',parameters=[config])])\n\nLanguage: unknown\n\n/turtlesim2/sim:ros__parameters:background_b:255background_g:86background_r:150\n\nLanguage: unknown\n\n...Node(package='turtlesim',executable='turtlesim_node',namespace='turtlesim3',name='sim',parameters=[config])\n\nLanguage: unknown\n\n/turtlesim3/sim:background_bbackground_gbackground_r\n\nLanguage: unknown\n\n/*\n\n:ros__parameters:background_b:255background_g:86background_r:150\n\nLanguage: unknown\n\nnamespace='turtlesim2',\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137382-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 20096, "chroma:document": "Language: unknown\n\nnamespace='turtlesim2',\n\nLanguage: unknown\n\nfromlaunch.actionsimportGroupActionfromlaunch_ros.actionsimportPushROSNamespace...turtlesim_world_2=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/turtlesim_world_2_launch.py']))turtlesim_world_2_with_namespace=GroupAction(actions=[PushROSNamespace('turtlesim2'),turtlesim_world_2,])\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137396-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 20525, "chroma:document": "Language: unknown\n\nfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.substitutionsimportLaunchConfigurationfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([DeclareLaunchArgument('target_frame',default_value='turtle1',description='Target frame name.'),Node(package='turtle_tf2_py',executable='turtle_tf2_broadcaster',name='broadcaster1',parameters=[{'turtlename':'turtle1'}]),Node(package='turtle_tf2_py',executable='turtle_tf2_broadcaster',name='broadcaster2',parameters=[{'turtlename':'turtle2'}]),Node(package='turtle_tf2_py',executable='turtle_tf2_listener',name='listener',parameters=[{'target_frame':LaunchConfiguration('target_frame')}]),])\n\nLanguage: unknown\n\nbroadcaster_listener_nodes=IncludeLaunchDescription(PythonLaunchDescriptionSource([os.path.join(get_package_share_directory('launch_tutorial'),'launch'),'/broadcaster_listener_launch.py']),launch_arguments={'target_frame':'carrot1'}.items(),)\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1373b4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 21516, "chroma:document": "Language: unknown\n\nfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([Node(package='turtlesim',executable='mimic',name='mimic',remappings=[('/input/pose','/turtle2/pose'),('/output/cmd_vel','/turtlesim2/turtle1/cmd_vel'),])])\n\nLanguage: unknown\n\nimportosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():rviz_config=os.path.join(get_package_share_directory('turtle_tf2_py'),'rviz','turtle_rviz.rviz')returnLaunchDescription([Node(package='rviz2',executable='rviz2',name='rviz2',arguments=['\n\nd',rviz_config])])\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1373c8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 22192, "chroma:document": "d',rviz_config])])\n\nLanguage: unknown\n\nfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.substitutionsimportEnvironmentVariable,LaunchConfigurationfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([DeclareLaunchArgument('node_prefix',default_value=[EnvironmentVariable('USER'),'_'],description='prefix for node name'),Node(package='turtle_tf2_py',executable='fixed_frame_tf2_broadcaster',name=[LaunchConfiguration('node_prefix'),'fixed_broadcaster'],),])\n\nLanguage: unknown\n\nimportosfromglobimportglobfromsetuptoolsimportsetup...data_files=[...(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','\n\nlaunch.[pxy][yma]\n\n'))),(os.path.join('share',package_name,'config'),glob(os.path.join('config','\n\n.yaml'))),(os.path.join('share',package_name,'rviz'),glob(os.path.join('config','\n\n.rviz'))),],\n\nLanguage: unknown\n\nros2 launch launch_tutorial launch_turtlesim_launch.py\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1373dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Managing_large_projects\uf0c1.txt", "start_index": 23160, "chroma:document": "Language: unknown\n\nros2 run turtlesim turtle_teleop_key"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1373f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Tf2\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Tf2\uf0c1\n\nURL: https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Tf2.html\n\nSection: Installation\n\n--------------------------------------------------------------------------------\n\nTf2\uf0c1Table of ContentsOverviewProperties of tf2TutorialsPaperOverview\uf0c1tf2 is the transform library, which lets the user keep track of multiple coordinate frames over time.\n\ntf2 maintains the relationship between coordinate frames in a tree structure buffered in time and lets the user transform points, vectors, etc. between any two coordinate frames at any desired point in time.Properties of tf2\uf0c1A robotic system typically has many 3D coordinate frames that change over time, such as a world frame, base frame, gripper frame, head frame, etc."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137404-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Tf2\uf0c1.txt", "start_index": 736, "chroma:document": "tf2 keeps track of all these frames over time, and allows you to ask questions like:Where was the head frame relative to the world frame 5 seconds ago?What is the pose of the object in my gripper relative to my base?What is the current pose of the base frame in the map frame?tf2 can operate in a distributed system.\n\nThis means all the information about the coordinate frames of a robot is available to all ROS 2 components on any computer in the system.\n\ntf2 can have every component in your distributed system build its own transform information database or have a central node that gathers and stores all transform information.Tutorials\uf0c1We created a set oftutorialsthat walks you through using tf2, step by step.\n\nYou can get started on theintroduction to tf2tutorial."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137422-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Tf2\uf0c1.txt", "start_index": 1454, "chroma:document": "You can get started on theintroduction to tf2tutorial.\n\nFor a complete list of all tf2 and tf2-related tutorials check out thetutorialspage.There are essentially two main tasks that any user would use tf2 for, listening for transforms and broadcasting transforms.If you want to use tf2 to transform between coordinate frames, your nodes will need to listen for transforms.\n\nWhat you will do is receive and buffer all coordinate frames that are broadcasted in the system, and query for specific transforms between frames.\n\nCheck out the \u201cWriting a listener\u201d tutorial(Python)(C++)to learn more.To extend the capabilities of a robot, you will need to start broadcasting transforms.\n\nBroadcasting transforms means to send out the relative pose of coordinate frames to the rest of the system.\n\nA system can have many broadcasters that each provide information about a different part of the robot."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137436-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Tf2\uf0c1.txt", "start_index": 2347, "chroma:document": "Check out the \u201cWriting a broadcaster\u201d tutorial(Python)(C++)to learn more.In addition to that, tf2 can broadcast static transforms that do not change over time.\n\nThis mainly saves storage and lookup time, but also reduces the publishing overhead.\n\nYou should note that static transforms are published once and assumed to not change, so no history is stored.\n\nIf you want to define static transforms in your tf2 tree, take a look at the \u201cWriting a static broadcaster\u201d(Python)(C++)tutorial.You can also learn how to add fixed and dynamic frames to your tf2 tree in the \u201cAdding a frame\u201d(Python)(C++)tutorial.Once you are finished with the basic tutorials, you can move on to learn about tf2 and time.\n\nThe tf2 and time tutorial(C++)teaches the basic principles of tf2 and time.\n\nThe advanced tutorial about tf2 and time(C++)teaches the principles of time traveling with tf2.Paper\uf0c1There is a paper on tf2 presented at TePRA 2013:tf: The transform library."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13744a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Executors\uf0c1\n\nURL: https://docs.ros.org/en/jazzy/Concepts/Intermediate/About\n\nExecutors.html\n\nSection: Installation\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137468-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 204, "chroma:document": "Executors\uf0c1Table of ContentsOverviewBasic useTypes of ExecutorsCallback groupsScheduling semanticsOutlookFurther informationOverview\uf0c1Execution management in ROS 2 is handled by Executors. An Executor uses one or more threads of the underlying operating system to invoke the callbacks of subscriptions, timers, service servers, action servers, etc. on incoming messages and events. The explicit Executor class (inexecutor.hppin rclcpp, inexecutors.pyin rclpy, or inexecutor.hin rclc) provides more control over execution management than the spin mechanism in ROS 1, although the basic API is very similar.In the following, we focus on the C++ Client Libraryrclcpp.Basic use\uf0c1In the simplest case, the main thread is used for processing the incoming messages and events of a Node by callingrclcpp::spin(..)as follows:intmain(intargc,char*argv[]){// Some initialization.rclcpp::init(argc,argv);...// Instantiate a node.rclcpp::Node::SharedPtrnode=...// Run the executor.rclcpp::spin(node);// Shutdown and exit....return0;}The"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13747c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 1191, "chroma:document": "Shutdown and exit....return0;}The call tospin(node)basically expands to an instantiation and invocation of the Single-Threaded Executor, which is the simplest Executor:rclcpp::executors::SingleThreadedExecutorexecutor;executor.add_node(node);executor.spin();By invokingspin()of the Executor instance, the current thread starts querying the rcl and middleware layers for incoming messages and other events and calls the corresponding callback functions until the node shuts down. In order not to counteract the QoS settings of the middleware, an incoming message is not stored in a queue on the Client Library layer but kept in the middleware until it is taken for processing by a callback function. (This is a crucial difference to ROS 1.) Await setis used to inform the Executor about available messages on the middleware layer, with one binary flag per queue. Thewait setis also used to detect when timers expire.The Single-Threaded Executor is also used by the container process forcomponents, i.e. in all cases where"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137490-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 2148, "chroma:document": "by the container process forcomponents, i.e. in all cases where nodes are created and executed without an explicit main function.Types of Executors\uf0c1Currently, rclcpp provides three Executor types, derived from a shared parent class:TheMulti-Threaded Executorcreates a configurable number of threads to allow for processing multiple messages or events in parallel. TheStatic Single-Threaded Executoroptimizes the runtime costs for scanning the structure of a node in terms of subscriptions, timers, service servers, action servers, etc. It performs this scan only once when the node is added, while the other two executors regularly scan for such changes. Therefore, the Static Single-Threaded Executor should be used only with nodes that create all subscriptions, timers, etc. during initialization.All three executors can be used with multiple nodes by callingadd_node(..)for each"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1374a4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 2967, "chroma:document": "can be used with multiple nodes by callingadd_node(..)for each node.rclcpp::Node::SharedPtrnode1=...rclcpp::Node::SharedPtrnode2=...rclcpp::Node::SharedPtrnode3=...rclcpp::executors::StaticSingleThreadedExecutorexecutor;executor.add_node(node1);executor.add_node(node2);executor.add_node(node3);executor.spin();In the above example, the one thread of a Static Single-Threaded Executor is used to serve three nodes together. In case of a Multi-Threaded Executor, the actual parallelism depends on the callback groups.Callback groups\uf0c1ROS 2 allows organizing the callbacks of a node in groups. In rclcpp, such acallback groupcan be created by thecreate_callback_groupfunction of the Node class. In rclpy, the same is done by calling the constructor of the specific callback group type. The callback group must be stored throughout execution of the node (eg. as a class member), or otherwise the executor won\u2019t be able to trigger the callbacks. Then, this callback group can be specified when creating a subscription, timer,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1374b8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 3928, "chroma:document": "group can be specified when creating a subscription, timer, etc. - for example by the subscription options:C++Pythonmy_callback_group=create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);rclcpp::SubscriptionOptionsoptions;options.callback_group=my_callback_group;my_subscription=create_subscription<Int32>(\"/topic\",rclcpp::SensorDataQoS(),callback,options);my_callback_group=MutuallyExclusiveCallbackGroup()my_subscription=self.create_subscription(Int32,\"/topic\",self.callback,qos_profile=1,callback_group=my_callback_group)All subscriptions, timers, etc. that are created without the indication of a callback group are assigned to thedefault callback group. The default callback group can be queried viaNodeBaseInterface::get_default_callback_group()in rclcpp and byNode.default_callback_groupin rclpy.There are two types of callback groups, where the type has to be specified at instantiation time:Mutually exclusive:Callbacks of this group must not be executed in parallel.Reentrant:Callbacks of this"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1374cc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 4886, "chroma:document": "must not be executed in parallel.Reentrant:Callbacks of this group may be executed in parallel.Callbacks of different callback groups may always be executed in parallel. The Multi-Threaded Executor uses its threads as a pool to process as many callbacks as possible in parallel according to these conditions. For tips on how to use callback groups efficiently, seeUsing Callback Groups.The Executor base class in rclcpp also has the functionadd_callback_group(..), which allows distributing callback groups to different Executors. By configuring the underlying threads using the operating system scheduler, specific callbacks can be prioritized over other callbacks. For example, the subscriptions and timers of a control loop can be prioritized over all other subscriptions and standard services of a node. Theexamples_rclcpp_cbg_executor packageprovides a demo of this mechanism.Scheduling semantics\uf0c1If the processing time of the callbacks is shorter than the period with which messages and events occur, the Executor"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1374ea-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 5844, "chroma:document": "the period with which messages and events occur, the Executor basically processes them in FIFO order. However, if the processing time of some callbacks is longer, messages and events will be queued on the lower layers of the stack. The wait set mechanism reports only very little information about these queues to the Executor. In detail, it only reports whether there are any messages for a certain topic or not. The Executor uses this information to process the messages (including services and actions) in a round-robin fashion - but not in FIFO order. The following flow diagram visualizes this scheduling semantics.This semantics was first described in apaper by Casini et al. at ECRTS 2019. (Note: The paper also explains that timer events are prioritized over all other messages.This prioritization was removed in Eloquent.)Outlook\uf0c1While the three Executors of rclcpp work well for most applications, there are some issues that make them not suitable for real-time applications, which require well-defined execution"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1374fe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 6806, "chroma:document": "real-time applications, which require well-defined execution times, determinism, and custom control over the execution order. Here is a summary of some of these issues:Complex and mixed scheduling semantics. Ideally you want well defined scheduling semantics to perform a formal timing analysis.Callbacks may suffer from priority inversion. Higher priority callbacks may be blocked by lower priority callbacks.No explicit control over the callbacks execution order.No built-in control over triggering for specific topics.Additionally, the executor overhead in terms of CPU and memory usage is considerable. The Static Single-Threaded Executor reduces this overhead greatly but it might not be enough for some applications.These issues have been partially addressed by the following developments:rclcpp WaitSet: TheWaitSetclass of rclcpp allows waiting directly on subscriptions, timers, service servers, action servers, etc. instead of using an Executor. It can be used to implement deterministic, user-defined processing"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137512-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 7764, "chroma:document": "can be used to implement deterministic, user-defined processing sequences, possibly processing multiple messages from different subscriptions together. Theexamples_rclcpp_wait_set packageprovides several examples for the use of this user-level wait set mechanism.rclc Executor: This Executor from the C Client Libraryrclc, developed for micro-ROS, gives the user fine-grained control over the execution order of callbacks and allows for custom trigger conditions to activate callbacks. Furthermore, it implements ideas of the Logical Execution Time (LET) semantics.Further information\uf0c1Michael P\u00f6hnl et al.:\u201cROS 2 Executor: How to make it efficient, real-time and deterministic?\u201d. Workshop at ROS World 2021. Virtual event. 19 October 2021.Ralph Lange:\u201cAdvanced Execution Management with ROS 2\u201d. ROS Industrial Conference. Virtual event. 16 December 2020.Daniel Casini, Tobias Blass, Ingo L\u00fctkebohle, and Bj\u00f6rn Brandenburg:\u201cResponse-Time Analysis of ROS\u00a02 Processing Chains under Reservation-Based Scheduling\u201d, Proc. of 31st"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137526-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 8730, "chroma:document": "Chains under Reservation-Based Scheduling\u201d, Proc. of 31st ECRTS 2019, Stuttgart, Germany, July 2019."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137544-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 8832, "chroma:document": "Code Examples:\n\nLanguage: unknown intmain(intargc,char*argv[]){// Some initialization.rclcpp::init(argc,argv);...// Instantiate a node.rclcpp::Node::SharedPtrnode=...// Run the executor.rclcpp::spin(node);// Shutdown and exit....return0;}\n\nLanguage: unknown\n\nrclcpp::executors::SingleThreadedExecutorexecutor;executor.add_node(node);executor.spin();\n\nLanguage: unknown\n\nrclcpp::Node::SharedPtrnode1=...rclcpp::Node::SharedPtrnode2=...rclcpp::Node::SharedPtrnode3=...rclcpp::executors::StaticSingleThreadedExecutorexecutor;executor.add_node(node1);executor.add_node(node2);executor.add_node(node3);executor.spin();\n\nLanguage: unknown\n\nmy_callback_group=create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);rclcpp::SubscriptionOptionsoptions;options.callback_group=my_callback_group;my_subscription=create_subscription<Int32>(\"/topic\",rclcpp::SensorDataQoS(),callback,options);\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137558-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Executors\uf0c1.txt", "start_index": 9724, "chroma:document": "Language: unknown\n\nmy_callback_group=MutuallyExclusiveCallbackGroup()my_subscription=self.create_subscription(Int32,\"/topic\",self.callback,qos_profile=1,callback_group=my_callback_group)"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13756c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Understanding parameters\uf0c1\n\nURL: https://docs.ros.org/en/jazzy/Tutorials/Beginner\n\nCLI\n\nTools/Understanding\n\nROS2\n\nParameters/Understanding\n\nROS2\n\nParameters.html\n\nSection: Installation\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13758a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 275, "chroma:document": "Understanding parameters\uf0c1Goal:Learn how to get, set, save and reload parameters in ROS 2.Tutorial level:BeginnerTime:5 minutesContentsBackgroundPrerequisitesTasks1 Setup2 ros2 param list3 ros2 param get4 ros2 param set5 ros2 param dump6 ros2 param load7 Load parameter file on node startupSummaryNext stepsBackground\uf0c1A parameter is a configuration value of a node. You can think of parameters as node settings. A node can store parameters as integers, floats, booleans, strings, and lists. In ROS 2, each node maintains its own parameters. For more background on parameters, please seethe concept document.Prerequisites\uf0c1This tutorial uses theturtlesim package.As always, don\u2019t forget to source ROS 2 inevery new terminal you open.Tasks\uf0c11 Setup\uf0c1Start up the two turtlesim nodes,/turtlesimand/teleop_turtle.Open a new terminal and run:ros2 run turtlesim turtlesim_nodeOpen another terminal and run:ros2 run turtlesim turtle_teleop_key2 ros2 param list\uf0c1To see the parameters belonging to your nodes, open a new terminal and"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13759e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 1232, "chroma:document": "the parameters belonging to your nodes, open a new terminal and enter the command:ros2 param listYou will see the node namespaces,/teleop_turtleand/turtlesim, followed by each node\u2019s parameters:/teleop_turtle:qos_overrides./parameter_events.publisher.depthqos_overrides./parameter_events.publisher.durabilityqos_overrides./parameter_events.publisher.historyqos_overrides./parameter_events.publisher.reliabilityscale_angularscale_linearuse_sim_time/turtlesim:background_bbackground_gbackground_rqos_overrides./parameter_events.publisher.depthqos_overrides./parameter_events.publisher.durabilityqos_overrides./parameter_events.publisher.historyqos_overrides./parameter_events.publisher.reliabilityuse_sim_timeEvery node has the parameteruse_sim_time; it\u2019s not unique to turtlesim.Based on their names, it looks like/turtlesim\u2019s parameters determine the background color of the turtlesim window using RGB color values.To determine a parameter\u2019s type, you can useros2paramget.3 ros2 param get\uf0c1To display the type and current"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1375b2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 2206, "chroma:document": "ros2 param get\uf0c1To display the type and current value of a parameter, use the command:ros2 param get <node_name> <parameter_name>Let\u2019s find out the current value of/turtlesim\u2019s parameterbackground_g:ros2 param get /turtlesim background_gWhich will return the value:Integer value is: 86Now you knowbackground_gholds an integer value.If you run the same command onbackground_randbackground_b, you will get the values69and255, respectively.4 ros2 param set\uf0c1To change a parameter\u2019s value at runtime, use the command:ros2 param set <node_name> <parameter_name> <value>Let\u2019s change/turtlesim\u2019s background color:ros2 param set /turtlesim background_r 150Your terminal should return the message:Set parameter successfulAnd the background of your turtlesim window should change colors:Setting parameters with thesetcommand will only change them in your current session, not permanently. However, you can save your settings and reload them the next time you start a node.5 ros2 param dump\uf0c1You can view all of a node\u2019s current"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1375c6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 3159, "chroma:document": "a node.5 ros2 param dump\uf0c1You can view all of a node\u2019s current parameter values by using the command:ros2 param dump <node_name>The command prints to the standard output (stdout) by default but you can also redirect the parameter values into a file to save them for later. To save your current configuration of/turtlesim\u2019s parameters into the fileturtlesim.yaml, enter the command:ros2 param dump /turtlesim > turtlesim.yamlYou will find a new file in the current working directory your shell is running in. If you open this file, you\u2019ll see the following content:/turtlesim:ros__parameters:background_b:255background_g:86background_r:150qos_overrides:/parameter_events:publisher:depth:1000durability:volatilehistory:keep_lastreliability:reliableuse_sim_time:falseDumping parameters comes in handy if you want to reload the node with the same parameters in the future.6 ros2 param load\uf0c1You can load parameters from a file to a currently running node using the command:ros2 param load <node_name> <parameter_file>To load"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1375da-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 4114, "chroma:document": "the command:ros2 param load <node_name> <parameter_file>To load theturtlesim.yamlfile generated withros2paramdumpinto/turtlesimnode\u2019s parameters, enter the command:ros2 param load /turtlesim turtlesim.yamlYour terminal will return the message:Set parameter background_b successfulSet parameter background_g successfulSet parameter background_r successfulSet parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1375ee-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 5125, "chroma:document": "cannot be set because it is read-onlySet parameter use_sim_time successfulNoteRead-only parameters can only be modified at startup and not afterwards, that is why there are some warnings for the \u201cqos_overrides\u201d parameters.7 Load parameter file on node startup\uf0c1To start the same node using your saved parameter values, use:ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>This is the same command you always use to start turtlesim, with the added flags--ros-argsand--params-file, followed by the file you want to load.Stop your running turtlesim node, and try reloading it with your saved parameters, using:ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yamlThe turtlesim window should appear as usual, but with the purple background you set earlier.NoteWhen a parameter file is used at node startup, all parameters, including the read-only ones, will be updated.Summary\uf0c1Nodes have parameters to define their default configuration values. You cangetandsetparameter values"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13760c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 6084, "chroma:document": "default configuration values. You cangetandsetparameter values from the command line. You can also save the parameter settings to a file to reload them in a future session.Next steps\uf0c1Jumping back to ROS 2 communication methods, in the next tutorial you\u2019ll learn aboutactions."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137620-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 6361, "chroma:document": "Code Examples:\n\nLanguage: unknown\n\nros2 run turtlesim turtlesim_node\n\nLanguage: unknown\n\nros2 run turtlesim turtle_teleop_key\n\nLanguage: unknown\n\nros2 param list\n\nLanguage: unknown\n\n/teleop_turtle:qos_overrides./parameter_events.publisher.depthqos_overrides./parameter_events.publisher.durabilityqos_overrides./parameter_events.publisher.historyqos_overrides./parameter_events.publisher.reliabilityscale_angularscale_linearuse_sim_time/turtlesim:background_bbackground_gbackground_rqos_overrides./parameter_events.publisher.depthqos_overrides./parameter_events.publisher.durabilityqos_overrides./parameter_events.publisher.historyqos_overrides./parameter_events.publisher.reliabilityuse_sim_time\n\nLanguage: unknown ros2 param get <node_name> <parameter_name>\n\nLanguage: unknown ros2 param get /turtlesim background_g\n\nLanguage: unknown\n\nInteger value is: 86\n\nLanguage: unknown ros2 param set <node_name> <parameter_name> <value>\n\nLanguage: unknown ros2 param set /turtlesim background_r 150\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137634-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 7353, "chroma:document": "Language: unknown\n\nSet parameter successful\n\nLanguage: unknown\n\nros2 param dump <node_name>\n\nLanguage: unknown ros2 param dump /turtlesim > turtlesim.yaml\n\nLanguage: unknown\n\n/turtlesim:ros__parameters:background_b:255background_g:86background_r:150qos_overrides:/parameter_events:publisher:depth:1000durability:volatilehistory:keep_lastreliability:reliableuse_sim_time:false\n\nLanguage: unknown ros2 param load <node_name> <parameter_file>\n\nLanguage: unknown ros2 param load /turtlesim turtlesim.yaml"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137648-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 7794, "chroma:document": "Language: unknown ros2 param load /turtlesim turtlesim.yaml\n\nLanguage: unknown Set parameter background_b successfulSet parameter background_g successfulSet parameter background_r successfulSet parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-onlySet parameter use_sim_time successful\n\nLanguage: unknown ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137666-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Understanding_parameters\uf0c1.txt", "start_index": 8815, "chroma:document": "Language: unknown ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13767a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Usingrqt_consoleto view logs\uf0c1\n\nURL: https://docs.ros.org/en/jazzy/Tutorials/Beginner\n\nCLI\n\nTools/Using\n\nRqt\n\nConsole/Using\n\nRqt\n\nConsole.html\n\nSection: Installation\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13768e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 255, "chroma:document": "Usingrqt_consoleto view logs\uf0c1Goal:Get to knowrqt_console, a tool for introspecting log messages.Tutorial level:BeginnerTime:5 minutesContentsBackgroundPrerequisitesTasks1 Setup2 Messages on rqt_console3 Logger levelsSummaryNext stepsBackground\uf0c1rqt_consoleis a GUI tool used to introspect log messages in ROS 2. Typically, log messages show up in your terminal. Withrqt_console, you can collect those messages over time, view them closely and in a more organized manner, filter them, save them and even reload the saved files to introspect at a different time.Nodes use logs to output messages concerning events and status in a variety of ways. Their content is usually informational, for the sake of the user.Prerequisites\uf0c1You will needrqt_console and turtlesiminstalled.As always, don\u2019t forget to source ROS 2 inevery new terminal you open.Tasks\uf0c11 Setup\uf0c1Startrqt_consolein a new terminal with the following command:ros2 run rqt_console rqt_consoleTherqt_consolewindow will open:The first section of the console is where"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1376a2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 1224, "chroma:document": "will open:The first section of the console is where log messages from your system will display.In the middle you have the option to filter messages by excluding severity levels. You can also add more exclusion filters using the plus-sign button to the right.The bottom section is for highlighting messages that include a string you input. You can add more filters to this section as well.Now startturtlesimin a new terminal with the following command:ros2 run turtlesim turtlesim_node2 Messages on rqt_console\uf0c1To produce log messages forrqt_consoleto display, let\u2019s have the turtle run into the wall. In a new terminal, enter theros2topicpubcommand (discussed in detail in thetopics tutorial) below:ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}\"Since the above command is publishing the topic at a steady rate, the turtle is continuously running into the wall. Inrqt_consoleyou will see the same message with theWarnseverity level"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1376b6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 2186, "chroma:document": "will see the same message with theWarnseverity level displayed over and over, like so:PressCtrl+Cin the terminal where you ran theros2topicpubcommand to stop your turtle from running into the wall.3 Logger levels\uf0c1ROS 2\u2019s logger levels are ordered by severity:FatalErrorWarnInfoDebugThere is no exact standard for what each level indicates, but it\u2019s safe to assume that:Fatalmessages indicate the system is going to terminate to try to protect itself from detriment.Errormessages indicate significant issues that won\u2019t necessarily damage the system, but are preventing it from functioning properly.Warnmessages indicate unexpected activity or non-ideal results that might represent a deeper issue, but don\u2019t harm functionality outright.Infomessages indicate event and status updates that serve as a visual verification that the system is running as expected.Debugmessages detail the entire step-by-step process of the system execution.The default level isInfo. You will only see messages of the default severity level and"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1376ca-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 3146, "chroma:document": "You will only see messages of the default severity level and more-severe levels.Normally, onlyDebugmessages are hidden because they\u2019re the only level less severe thanInfo. For example, if you set the default level toWarn, you would only see messages of severityWarn,Error, andFatal.3.1 Set the default logger level\uf0c1You can set the default logger level when you first run the/turtlesimnode using remapping. Enter the following command in your terminal:ros2 run turtlesim turtlesim_node --ros-args --log-level WARNNow you won\u2019t see the initialInfolevel messages that came up in the console last time you startedturtlesim. That\u2019s becauseInfomessages are lower priority than the new default severity,Warn.Summary\uf0c1rqt_consolecan be very helpful if you need to closely examine the log messages from your system. You might want to examine log messages for any number of reasons, usually to find out where something went wrong and the series of events leading up to that.Next steps\uf0c1The next tutorial will teach you about starting"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1376e8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 4104, "chroma:document": "that.Next steps\uf0c1The next tutorial will teach you about starting multiple nodes at once withROS 2 Launch."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1376fc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/ros2/Usingrqt_consoleto_view_logs\uf0c1.txt", "start_index": 4210, "chroma:document": "Code Examples:\n\nLanguage: unknown\n\nros2 run rqt_console rqt_console\n\nLanguage: unknown\n\nros2 run turtlesim turtlesim_node\n\nLanguage: unknown ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}\"\n\nLanguage: unknown\n\nFatalErrorWarnInfoDebug\n\nLanguage: unknown ros2 run turtlesim turtlesim_node --ros-args --log-level WARN"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137710-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/GoalUpdated\uf0c1.txt", "start_index": 0, "chroma:document": "Title: GoalUpdated\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/GoalUpdated.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<GoalUpdated/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137724-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ComputePathToPose\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ComputePathToPose\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ComputePathToPose.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: ComputePathToPose\n\n```\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\nserver_name=\n\n\"ComputePathToPose\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137738-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/First-Time Robot Setup Guide\uf0c1.txt", "start_index": 0, "chroma:document": "Title: First\n\nTime Robot Setup Guide\uf0c1\n\nURL: https://docs.nav2.org/setup_guides/index.html#setup\n\nguides\n\nSection: tuning/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137756-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/IsStopped\uf0c1.txt", "start_index": 0, "chroma:document": "Title: IsStopped\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/IsStopped.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Port\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<IsStopped\n\nvelocity_threshold=\n\n\"0.01\"\n\nduration_stopped=\n\n\"1000\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13776a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Migration Guides\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Migration Guides\uf0c1\n\nURL: https://docs.nav2.org/migration/index.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13777e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Setting Up Odometry\uf0c1\n\nURL: https://docs.nav2.org/setup_guides/odom/setup_odom.html#setup-and-prerequisites\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Odometry Introduction\uf0c1\n\nThe odometry system provides a locally accurate estimate of a robot\u2019s pose and velocity based on its motion. The odometry information can be obtained from various sources such as IMU, LIDAR, RADAR, VIO, and wheel encoders. One thing to note is that IMUs drift over time while wheel encoders drift over distance traveled, thus they are often used together to counter each other\u2019s negative characteristics."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137792-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 667, "chroma:document": "Theodomframe and the transformation associated with it use a robot\u2019s odometry system to publish localization information that is continuous but becomes less accurate over time or distance (depending on the sensor modalities and drift). In spite of this, the information can still be used by the robot to navigate its immediate vicinity (e.g collision avoidance). To obtain consistently accurate odometry information over time, themapframe provides globally accurate information that is used to correct theodomframe.\n\nAs discussed in the previous guides and inREP 105, theodomframe is connected to the rest of the system and Nav2 through theodom=>base_linktransform. This transform is published by a tf2 broadcaster or by frameworks such asrobot_localization, which also provide additional functionalities. We will be talking more aboutrobot_localizationin a following section."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1377a6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 1545, "chroma:document": "In addition to the requiredodom=>base_linktransform, Nav2 also requires the publishing ofnav_msgs/Odometrymessage because this message provides the velocity information of the robot. In detail, thenav_msgs/Odometrymessage contains the following information:\n\nThis message tells us the estimates for the pose and velocity of the robot. Theheadermessage provides the timestamped data in a given coordinate frame. Theposemessage provides the position and orientation of the robot relative to the frame specified inheader.frame_id. Thetwistmessage gives the linear and angular velocity relative to the frame defined inchild_frame_id.\n\n## Setting Up Odometry on your Robot\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1377ba-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 2176, "chroma:document": "## Setting Up Odometry on your Robot\uf0c1\n\nSetting up the odometry system for Nav2 for your physical robot depends a lot on which odometry sensors are available with your robot. Due to the large number of configurations your robot may have, specific setup instructions will not be within the scope of this tutorial. Instead, we will provide some basic examples and useful resources to help you configure your robot for Nav2.\n\nTo start, we will use an example of a robot with wheel encoders as its odometry source. Note that wheel encoders are not required for Nav2 but it is common in most setups. The goal in setting up the odometry is to compute the odometry information and publish thenav_msgs/Odometrymessage andodom=>base_linktransform over ROS 2. To calculate this information, you will need to setup some code that will translate wheel encoder information into odometry information, similar to the snippet below:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1377d8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 3093, "chroma:document": "Theright_wheel_est_velandleft_wheel_est_velare the estimated velocities of the right and left wheels respectively, and thewheelseparationis the distance between the wheels. The values ofright_wheel_est_velandleft_wheel_est_velcan be obtained by simply getting the changes in the positions of the wheel joints over time. This information can then be used to publish the Nav2 requirements. A basic example on how to do this can be found in the Navigation documentation on odometrylocated here"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1377ec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 3585, "chroma:document": "An alternative to manually publishing this information that we recommend is through theros2_controlframework. Theros2_controlframework contains various packages for real-time control of robots in ROS 2. For wheel encoders,ros2_controlhas adiff_drive_controller(differential drive controller) under theros2_controllerpackage. Thediff_drive_controllertakes in thegeometry_msgs/Twistmessages published oncmd_veltopic, computes odometry information, and publishesnav_msgs/Odometrymessages onodomtopic. Other packages that deal with different kind of sensors are also available inros2_control.\n\nFor other types of sensors such as IMU, VIO, etc, their respective ROS drivers should have documentation on how publish the odometry information. Keep in mind that Nav2 requires thenav_msgs/Odometrymessage andodom=>base_linktransforms to be published and this should be your goal when setting up your odometry system.\n\n## Simulating an Odometry System using Gazebo\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137800-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 4494, "chroma:document": "## Simulating an Odometry System using Gazebo\uf0c1\n\nIn this section, we will be using Gazebo to simulate the odometry system ofsam_bot, the robot that we built in the previous section of this tutorial series. You may go through that guide first or grab thecomplete source here.\n\nAs an overview for this section, we will first setup Gazebo and the necessary packages required to make it work with ROS 2. Next, we will be adding Gazebo plugins, which simulate an IMU sensor and a differential drive odometry system, in order to publishsensor_msgs/Imuandnav_msgs/Odometrymessages respectively. Lastly, we will spawnsam_botin a Gazebo environment and verify the publishedsensor_msgs/Imuandnav_msgs/Odometrymessages over ROS 2.\n\n## Setup and Prerequisites\uf0c1\n\nGazebois a 3D simulator that allows us to observe how our virtual robot will function in a simulated environment. To start using Gazebo with ROS 2, follow the installation instructions in theGazebo Installation Documentation."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137814-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 5470, "chroma:document": "We also need to install thegazebo_ros_pkgspackage to simulate odometry and control the robot with ROS 2 in Gazebo:\n\nYou can test if you have successfully set up your ROS 2 and Gazebo environments by following the instructionsgiven here.\n\nNote that we describedsam_botusing URDF. However, Gazebo usesSimulation Description Format (SDF)to describe a robot in its simulated environment. Fortunately, Gazebo automatically translates compatible URDF files into SDF. The main requirement for the URDF to be compatible with Gazebo is to have an<inertia>element within each<link>element. This requirement is already satisfied in the URDF file ofsam_bot, so it can already be used in Gazebo.\n\n## Adding Gazebo Plugins to a URDF\uf0c1\n\nWe will now add the IMU sensor and the differential drive plugins of Gazebo to our URDF. For an overview of the different plugins available in Gazebo, have a look atTutorial: Using Gazebo plugins with ROS."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137832-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 6398, "chroma:document": "For our robot, we will be using theGazeboRosImuSensorwhich is a SensorPlugin. A SensorPlugin must be attached to a link, thus we will create animu_linkto which the IMU sensor will be attached. This link will be referenced under the<gazebo>element. Next, we will set/demo/imuas the topic to which the IMU will be publishing its information, and we will comply withREP145by settinginitalOrientationAsReferencetofalse. We will also add some noise to the sensor configuration using Gazebo\u2019ssensor noise model.\n\nNow, we will set up our IMU sensor plugin according to the description above by adding the following lines before the</robot>line in our URDF:\n\nNow, let us add the differential drive ModelPlugin. We will configure the plugin such thatnav_msgs/Odometrymessages are published on the/demo/odomtopic. The joints of the left and right wheels will be set to the wheel joints ofsam_bot. The wheel separation and wheel diameter are set according to the values of the defined values ofwheel_ygapandwheel_radiusrespectively."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137850-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 7421, "chroma:document": "To include this plugin in our URDF, add the following lines after the</gazebo>tag of the IMU plugin:\n\n## Launch and Build Files\uf0c1\n\nWe will now edit our launch file,launch/display.launch.py, to spawnsam_botin Gazebo. Since we will be simulating our robot, we can remove the GUI for the joint state publisher by deleting the following lines inside thegenerate_launch_description():\n\nRemove the followingguiparam:\n\nRemove the condition and parameters. Add arguments to thejoint_state_publisher_node:\n\nNext, openpackage.xmland delete the line:\n\nTo launch Gazebo, add the following before thejoint_state_publisher_node,line indisplay.launch.py\n\nWe will now add a node that spawnssam_botin Gazebo. Openlaunch/display.launch.pyagain and paste the following lines before thereturnlaunch.LaunchDescription([line.\n\nThen add the linespawn_entity,before therviz_nodeline, as shown below.\n\n## Build, Run and Verification\uf0c1\n\nLet us run our package to check if the/demo/imuand/demo/odomtopics are active in the system."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13786e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 8424, "chroma:document": "Navigate to the root of the project and execute the following lines:\n\nGazebo should launch and you should see a 3D model ofsam_bot:\n\nTo see the active topics in the system, open a new terminal and execute:\n\nYou should see/demo/imuand/demo/odomin the list of topics.\n\nTo see more information about the topics, execute:\n\nYou should see an output similar to below:\n\nObserve that the/demo/imutopic publishessensor_msgs/Imutype messages while the/demo/odomtopic publishesnav_msgs/Odometrytype messages. The information being published on these topics come from the gazebo simulation of the IMU sensor and the differential drive respectively. Also note that both topics currently have no subscribers. In the next section, we will create arobot_localizationnode that will subscribe to these two topics. It will then use the messages published on both topics to provide a fused, locally accurate and smooth odometry information for Nav2.\n\n## Robot Localization Demo\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137882-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 9355, "chroma:document": "## Robot Localization Demo\uf0c1\n\nTherobot_localizationpackage is used to provide a fused and locally accurate smooth odometry information from the data provided byNodometry sensor inputs. These information can be provided to the package throughnav_msgs/Odometry,sensor_msgs/Imu,geometry_msgs/PoseWithCovarianceStamped, andgeometry_msgs/TwistWithCovarianceStampedmessages.\n\nA usual robot setup consists of at least the wheel encoders and IMU as its odometry sensor sources. When multiple sources are provided torobot_localization, it is able to fuse the odometry information given by the sensors through the use of state estimation nodes. These nodes make use of either an Extended Kalman filter (ekf_node) or an Unscented Kalman Filter (ukf_node) to implement this fusion. In addition, the package also implements anavsat_transform_nodewhich transforms geographic coordinates into the robot\u2019s world frame when working with GPS."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137896-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 10280, "chroma:document": "Fused sensor data is published by therobot_localizationpackage through theodometry/filteredand theaccel/filteredtopics, if enabled in its configuration. In addition, it can also publish theodom=>base_linktransform on the/tftopic.\n\nIf your robot is only able to provide one odometry source, the use ofrobot_localizationwould have minimal effects aside from smoothing. In this case, an alternative approach is to publish transforms through a tf2 broadcaster in your single source of odometry node. Nevertheless, you can still opt to userobot_localizationto publish the transforms and some smoothing properties may still be observed in the output.\n\nFor the rest of this section, we will show how to userobot_localizationto fuse the sensors ofsam_bot. It will use thesensor_msgs/Imumessages published on/demo/Imuand thenav_msgs/Odometrymessage published on/demo/odomand then it will publish data onodometry/filtered,accel/filtered, and/tftopics.\n\n## Configuring Robot Localization\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1378aa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 11223, "chroma:document": "## Configuring Robot Localization\uf0c1\n\nLet us now configure therobot_localizationpackage to use an Extended Kalman Filter (ekf_node) to fuse odometry information and publish theodom=>base_linktransform.\n\nFirst, install therobot_localizationpackage using your machines package manager or by executing the following command:\n\nNext, we specify the parameters of theekf_nodeusing a YAML file. Create a directory namedconfigat the root of your project and create a file namedekf.yaml. Copy the following lines of code into yourekf.yamlfile.\n\nIn this configuration, we defined the parameter values offrequency,two_d_mode,publish_acceleration,publish_tf,map_frame,odom_frame,base_link_frame, andworld_frame. For more information on the other parameters you can modify, seeParameters of state estimation nodes, and a sampleefk.yamlcan be foundhere."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1378c8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 12062, "chroma:document": "To add a sensor input to theekf_filter_node, add the next number in the sequence to its base name (odom, imu, pose, twist). In our case, we have onenav_msgs/Odometryand onesensor_msgs/Imuas inputs to the filter, thus we useodom0andimu0. We set the value ofodom0todemo/odom, which is the topic that publishes thenav_msgs/Odometry. Similarly, we set the value ofimu0to the topic that publishessensor_msgs/Imu, which isdemo/imu.\n\nYou can specify which values from a sensor are to be used by the filter using the_configparameter. The order of the values of this parameter is x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. In our example, we set everything inodom0_configtofalseexcept the 1st, 2nd, 3rd, and 12th entries, which means the filter will only use the x, y, z, and the vyaw values ofodom0."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1378dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 12884, "chroma:document": "In theimu0_configmatrix, you\u2019ll notice that only roll, pitch, and yaw are used. Typical mobile robot-grade IMUs will also provide angular velocities and linear accelerations. Forrobot_localizationto work properly, you should not fuse in multiple fields that are derivative of each other. Since angular velocity is fused internally to the IMU to provide the roll, pitch and yaw estimates, we should not fuse in the angular velocities used to derive that information. We also do not fuse in angular velocity due to the noisy characteristics it has when not using exceptionally high quality (and expensive) IMUs.\n\n## Launch and Build Files\uf0c1\n\nNow, let us add theekf_nodeinto the launch file. Openlaunch/display.launch.pyand paste the following lines before thereturnlaunch.LaunchDescription([line.\n\nNext, add the following launch arguments within thereturnlaunch.LaunchDescription([block.\n\nLastly, addrobot_localization_node,above therviz_nodeline to launch the robot localization node."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1378f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 13868, "chroma:document": "Next, we need to add therobot_localizationdependency to our package definition. Openpackage.xmland add the following line below the last<exec_depend>tag.\n\nLastly, openCMakeLists.txtand append theconfigdirectory inside theinstall(DIRECTORY...), as shown in the snippet below.\n\n## Build, Run and Verification\uf0c1\n\nLet us now build and run our package. Navigate to the root of the project and execute the following lines:\n\nGazebo and RVIZ should launch. In the RVIZ window, you should see the model and TF frames ofsam_bot:\n\nNext, let us verify that theodometry/filtered,accel/filtered, and/tftopics are active in the system. Open a new terminal and execute:\n\nYou should seeodometry/filtered,accel/filtered, and/tfin the list of the topics.\n\nYou can also check the subscriber count of these topics again by executing:\n\nYou should see that/demo/imuand/demo/odomnow both have 1 subscriber each.\n\nTo verify that theekf_filter_nodeare the subscribers of these topics, execute:\n\nYou should see an output as shown below."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137904-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 14836, "chroma:document": "You should see an output as shown below.\n\nFrom the output above, we can see that theekf_filter_nodeis subscribed to/demo/imuand/demo/odom. We can also see that theekf_filter_nodepublishes on theodometry/filtered,accel/filtered, and/tftopics.\n\nYou may also verify thatrobot_localizationis publishing theodom=>base_linktransform by using the tf2_echo utility. Run the following command in a separate command line terminal:\n\nYou should see a continuous output similar to what is shown below.\n\n## Conclusion\uf0c1\n\nIn this guide, we have discussed the messages and transforms that are expected by Nav2 from the odometry system. We have seen how to set up an odometry system and how to verify the published messages. We also have discussed how multiple odometry sensors can be used to provide a filtered and smoothed odometry usingrobot_localization. We have also checked if theodom=>base_linktransform is being published correctly byrobot_localization.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: nav_msgs/Odometry\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137918-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 15797, "chroma:document": "Language: unknown\n\nFile: nav_msgs/Odometry\n\n```\n\n# This represents estimates of position and velocity in free space.\n\n# The pose in this message should be specified in the coordinate frame given by header.frame_id\n\n# The twist in this message should be specified in the coordinate frame given by the child_frame_id\n\n# Includes the frame id of the pose parent.\n\nstd_msgs/Header\n\nheader\n\n# Frame id the pose is pointing at. The twist is in this coordinate frame.\n\nstring\n\nchild_frame_id\n\n# Estimated pose that is typically relative to a fixed world frame.\n\ngeometry_msgs/PoseWithCovariance\n\npose\n\n# Estimated linear and angular velocity relative to child_frame_id.\n\ngeometry_msgs/TwistWithCovariance\n\ntwist\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\nlinear\n\n=\n\n(\n\nright_wheel_est_vel\n\n+\n\nleft_wheel_est_vel\n\n)\n\n/\n\n2\n\nangular\n\n=\n\n(\n\nright_wheel_est_vel\n\nleft_wheel_est_vel\n\n)\n\n/\n\nwheel_separation\n\n;\n\n```\n\nLanguage: unknown\n\nFile: gazebo_ros_pkgs\n\n```\n\nsudo\n\napt\n\ninstall\n\nros-<ros2-distro>-gazebo-ros-pkgs\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13792c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 16751, "chroma:document": "sudo\n\napt\n\ninstall\n\nros-<ros2-distro>-gazebo-ros-pkgs\n\n```\n\nLanguage: unknown\n\nFile: </robot>\n\n```\n\n132\n\n<link\n\nname=\n\n\"imu_link\"\n\n>\n\n133\n\n<visual>\n\n134\n\n<geometry>\n\n135\n\n<box\n\nsize=\n\n\"0.1 0.1 0.1\"\n\n/>\n\n136\n\n</geometry>\n\n137\n\n</visual>\n\n138\n\n139\n\n<collision>\n\n140\n\n<geometry>\n\n141\n\n<box\n\nsize=\n\n\"0.1 0.1 0.1\"\n\n/>\n\n142\n\n</geometry>\n\n143\n\n</collision>\n\n144\n\n145\n\n<xacro:box_inertia\n\nm=\n\n\"0.1\"\n\nw=\n\n\"0.1\"\n\nd=\n\n\"0.1\"\n\nh=\n\n\"0.1\"\n\n/>\n\n146\n\n</link>\n\n147\n\n148\n\n<joint\n\nname=\n\n\"imu_joint\"\n\ntype=\n\n\"fixed\"\n\n>\n\n149\n\n<parent\n\nlink=\n\n\"base_link\"\n\n/>\n\n150\n\n<child\n\nlink=\n\n\"imu_link\"\n\n/>\n\n151\n\n<origin\n\nxyz=\n\n\"0 0 0.01\"\n\n/>\n\n152\n\n</joint>\n\n153\n\n154\n\n<gazebo\n\nreference=\n\n\"imu_link\"\n\n>\n\n155\n\n<sensor\n\nname=\n\n\"imu_sensor\"\n\ntype=\n\n\"imu\"\n\n>\n\n156\n\n<plugin\n\nfilename=\n\n\"libgazebo_ros_imu_sensor.so\"\n\nname=\n\n\"imu_plugin\"\n\n>\n\n157\n\n<ros>\n\n158\n\n<namespace>\n\n/demo\n\n</namespace>\n\n159\n\n<remapping>\n\n~/out:=imu\n\n</remapping>\n\n160\n\n</ros>\n\n161\n\n<initial_orientation_as_reference>\n\nfalse\n\n</initial_orientation_as_reference>\n\n162\n\n</plugin>\n\n163"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13794a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 17710, "chroma:document": "</initial_orientation_as_reference>\n\n162\n\n</plugin>\n\n163\n\n<always_on>\n\ntrue\n\n</always_on>\n\n164\n\n<update_rate>\n\n100\n\n</update_rate>\n\n165\n\n<visualize>\n\ntrue\n\n</visualize>\n\n166\n\n<imu>\n\n167\n\n<angular_velocity>\n\n168\n\n<x>\n\n169\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n170\n\n<mean>\n\n0.0\n\n</mean>\n\n171\n\n<stddev>\n\n2e-4\n\n</stddev>\n\n172\n\n<bias_mean>\n\n0.0000075\n\n</bias_mean>\n\n173\n\n<bias_stddev>\n\n0.0000008\n\n</bias_stddev>\n\n174\n\n</noise>\n\n175\n\n</x>\n\n176\n\n<y>\n\n177\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n178\n\n<mean>\n\n0.0\n\n</mean>\n\n179\n\n<stddev>\n\n2e-4\n\n</stddev>\n\n180\n\n<bias_mean>\n\n0.0000075\n\n</bias_mean>\n\n181\n\n<bias_stddev>\n\n0.0000008\n\n</bias_stddev>\n\n182\n\n</noise>\n\n183\n\n</y>\n\n184\n\n<z>\n\n185\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n186\n\n<mean>\n\n0.0\n\n</mean>\n\n187\n\n<stddev>\n\n2e-4\n\n</stddev>\n\n188\n\n<bias_mean>\n\n0.0000075\n\n</bias_mean>\n\n189\n\n<bias_stddev>\n\n0.0000008\n\n</bias_stddev>\n\n190\n\n</noise>\n\n191\n\n</z>\n\n192\n\n</angular_velocity>\n\n193\n\n<linear_acceleration>\n\n194\n\n<x>\n\n195\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n196\n\n<mean>\n\n0.0\n\n</mean>\n\n197\n\n<stddev>\n\n1.7e-2"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13795e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 18673, "chroma:document": ">\n\n196\n\n<mean>\n\n0.0\n\n</mean>\n\n197\n\n<stddev>\n\n1.7e-2\n\n</stddev>\n\n198\n\n<bias_mean>\n\n0.1\n\n</bias_mean>\n\n199\n\n<bias_stddev>\n\n0.001\n\n</bias_stddev>\n\n200\n\n</noise>\n\n201\n\n</x>\n\n202\n\n<y>\n\n203\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n204\n\n<mean>\n\n0.0\n\n</mean>\n\n205\n\n<stddev>\n\n1.7e-2\n\n</stddev>\n\n206\n\n<bias_mean>\n\n0.1\n\n</bias_mean>\n\n207\n\n<bias_stddev>\n\n0.001\n\n</bias_stddev>\n\n208\n\n</noise>\n\n209\n\n</y>\n\n210\n\n<z>\n\n211\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n212\n\n<mean>\n\n0.0\n\n</mean>\n\n213\n\n<stddev>\n\n1.7e-2\n\n</stddev>\n\n214\n\n<bias_mean>\n\n0.1\n\n</bias_mean>\n\n215\n\n<bias_stddev>\n\n0.001\n\n</bias_stddev>\n\n216\n\n</noise>\n\n217\n\n</z>\n\n218\n\n</linear_acceleration>\n\n219\n\n</imu>\n\n220\n\n</sensor>\n\n221\n\n</gazebo>\n\n```\n\nLanguage: unknown\n\nFile: </gazebo>\n\n```\n\n223\n\n<gazebo>\n\n224\n\n<plugin\n\nname=\n\n'diff_drive'\n\nfilename=\n\n'libgazebo_ros_diff_drive.so'\n\n>\n\n225\n\n<ros>\n\n226\n\n<namespace>\n\n/demo\n\n</namespace>\n\n227\n\n</ros>\n\n228\n\n229\n\n<!-- wheels -->\n\n230\n\n<left_joint>\n\ndrivewhl_l_joint\n\n</left_joint>\n\n231\n\n<right_joint>\n\ndrivewhl_r_joint\n\n</right_joint>\n\n232\n\n233"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137972-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 19625, "chroma:document": "231\n\n<right_joint>\n\ndrivewhl_r_joint\n\n</right_joint>\n\n232\n\n233\n\n<!-- kinematics -->\n\n234\n\n<wheel_separation>\n\n0.4\n\n</wheel_separation>\n\n235\n\n<wheel_diameter>\n\n0.2\n\n</wheel_diameter>\n\n236\n\n237\n\n<!-- limits -->\n\n238\n\n<max_wheel_torque>\n\n20\n\n</max_wheel_torque>\n\n239\n\n<max_wheel_acceleration>\n\n1.0\n\n</max_wheel_acceleration>\n\n240\n\n241\n\n<!-- output -->\n\n242\n\n<publish_odom>\n\ntrue\n\n</publish_odom>\n\n243\n\n<publish_odom_tf>\n\nfalse\n\n</publish_odom_tf>\n\n244\n\n<publish_wheel_tf>\n\ntrue\n\n</publish_wheel_tf>\n\n245\n\n246\n\n<odometry_frame>\n\nodom\n\n</odometry_frame>\n\n247\n\n<robot_base_frame>\n\nbase_link\n\n</robot_base_frame>\n\n248\n\n</plugin>\n\n249\n\n</gazebo>\n\n```\n\nLanguage: unknown\n\nFile: generate_launch_description()\n\n```\n\njoint_state_publisher_gui_node\n\n=\n\nlaunch_ros.actions.Node\n\n(\n\npackage\n\n=\n\n'joint_state_publisher_gui'\n\n,\n\nexecutable\n\n=\n\n'joint_state_publisher_gui'\n\n,\n\nname\n\n=\n\n'joint_state_publisher_gui'\n\n,\n\ncondition\n\n=\n\nlaunch.conditions.IfCondition\n\n(\n\nLaunchConfiguration\n\n(\n\n'gui'\n\n))\n\n)\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137986-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 20573, "chroma:document": "LaunchConfiguration\n\n(\n\n'gui'\n\n))\n\n)\n\n```\n\nLanguage: unknown\n\nFile: generate_launch_description()\n\n```\n\nDeclareLaunchArgument\n\n(\n\nname\n\n=\n\n'gui'\n\n,\n\ndefault_value\n\n=\n\n'True'\n\n,\n\ndescription\n\n=\n\n'Flag to enable joint_state_publisher_gui'\n\n)\n\n```\n\nLanguage: unknown\n\nFile: generate_launch_description()\n\n```\n\njoint_state_publisher_node\n\n=\n\nlaunch_ros.actions.Node\n\n(\n\npackage\n\n=\n\n'joint_state_publisher'\n\n,\n\nexecutable\n\n=\n\n'joint_state_publisher'\n\n,\n\nname\n\n=\n\n'joint_state_publisher'\n\n,\n\narguments\n\n=[\n\ndefault_model_path\n\n]\n\n,\n\n#Add this line\n\nparameters\n\n=[{\n\n'robot_description'\n\n:\n\nCommand\n\n([\n\n'xarcro '\n\n,\n\ndefault_model_path\n\n])}]\n\n,\n\n#Remove this line\n\ncondition\n\n=\n\nlaunch.conditions.UnlessCondition\n\n(\n\nLaunchConfiguration\n\n(\n\n'gui'\n\n))\n\n# Remove this line\n\n)\n\n```\n\nLanguage: unknown\n\nFile: generate_launch_description()\n\n```\n\n<exec_depend>joint_state_publisher_gui</exec_depend>\n\n```\n\nLanguage: unknown\n\nFile: display.launch.py\n\n```\n\nlaunch.actions.ExecuteProcess\n\n(\n\ncmd\n\n=[\n\n'gazebo'\n\n,\n\n'--verbose'\n\n,\n\n'-s'\n\n,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13799a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 21547, "chroma:document": "(\n\ncmd\n\n=[\n\n'gazebo'\n\n,\n\n'--verbose'\n\n,\n\n'-s'\n\n,\n\n'libgazebo_ros_init.so'\n\n,\n\n'-s'\n\n,\n\n'libgazebo_ros_factory.so'\n\n]\n\n,\n\noutput\n\n=\n\n'screen'\n\n)\n\n,\n\n```\n\nLanguage: unknown\n\nFile: returnlaunch.LaunchDescription([\n\n```\n\nspawn_entity\n\n=\n\nlaunch_ros.actions.Node\n\n(\n\npackage\n\n=\n\n'gazebo_ros'\n\n,\n\nexecutable\n\n=\n\n'spawn_entity.py'\n\n,\n\narguments\n\n=[\n\n'-entity'\n\n,\n\n'sam_bot'\n\n,\n\n'-topic'\n\n,\n\n'robot_description'\n\n]\n\n,\n\noutput\n\n=\n\n'screen'\n\n)\n\n```\n\nLanguage: unknown\n\nFile: rviz_node\n\n```\n\nrobot_state_publisher_node,\n\nspawn_entity,\n\nrviz_node\n\n])\n\n```\n\nLanguage: unknown\n\nFile: /demo/odom\n\n```\n\ncolcon\n\nbuild\n\n.\n\ninstall/setup.bash\n\nros2\n\nlaunch\n\nsam_bot_description\n\ndisplay.launch.py\n\n```\n\nLanguage: unknown\n\nFile: sam_bot\n\n```\n\nros2\n\ntopic\n\nlist\n\n```\n\nLanguage: unknown\n\nFile: /demo/odom\n\n```\n\nros2\n\ntopic\n\ninfo\n\n/demo/imu\n\nros2\n\ntopic\n\ninfo\n\n/demo/odom\n\n```\n\nLanguage: unknown\n\nFile: /demo/odom\n\n```\n\nType:\n\nsensor_msgs/msg/Imu\n\nPublisher\n\ncount:\n\n1\n\nSubscription\n\ncount:\n\n0\n\n```\n\nLanguage: unknown\n\nFile: /demo/odom\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1379ae-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 22508, "chroma:document": "count:\n\n0\n\n```\n\nLanguage: unknown\n\nFile: /demo/odom\n\n```\n\nType:\n\nnav_msgs/msg/Odometry\n\nPublisher\n\ncount:\n\n1\n\nSubscription\n\ncount:\n\n0\n\n```\n\nLanguage: unknown\n\nFile: robot_localization\n\n```\n\nsudo\n\napt\n\ninstall\n\nros-<ros2-distro>-robot-localization\n\n```\n\nLanguage: unknown\n\nFile: ekf.yaml\n\n```\n\n### ekf config file ###\n\nekf_filter_node\n\n:\n\nros__parameters\n\n:\n\n# The frequency, in Hz, at which the filter will output a position estimate. Note that the filter will not begin\n\n# computation until it receives at least one message from one of theinputs. It will then run continuously at the\n\n# frequency specified here, regardless of whether it receives more measurements. Defaults to 30 if unspecified.\n\nfrequency\n\n:\n\n30.0\n\n# ekf_localization_node and ukf_localization_node both use a 3D omnidirectional motion model. If this parameter is\n\n# set to true, no 3D information will be used in your state estimate. Use this if you are operating in a planar"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1379cc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 23456, "chroma:document": "# environment and want to ignore the effect of small variations in the ground plane that might otherwise be detected\n\n# by, for example, an IMU. Defaults to false if unspecified.\n\ntwo_d_mode\n\n:\n\nfalse\n\n# Whether to publish the acceleration state. Defaults to false if unspecified.\n\npublish_acceleration\n\n:\n\ntrue\n\n# Whether to broadcast the transformation over the /tf topic. Defaultsto true if unspecified.\n\npublish_tf\n\n:\n\ntrue\n\n# 1. Set the map_frame, odom_frame, and base_link frames to the appropriate frame names for your system.\n\n#     1a. If your system does not have a map_frame, just remove it, and make sure \"world_frame\" is set to the value of odom_frame.\n\n# 2. If you are fusing continuous position data such as wheel encoder odometry, visual odometry, or IMU data, set \"world_frame\"\n\n#    to your odom_frame value. This is the default behavior for robot_localization's state estimation nodes."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1379e0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 24362, "chroma:document": "# 3. If you are fusing global absolute position data that is subject to discrete jumps (e.g., GPS or position updates from landmark\n\n#    observations) then:\n\n#     3a. Set your \"world_frame\" to your map_frame value\n\n#     3b. MAKE SURE something else is generating the odom->base_link transform. Note that this can even be another state estimation node\n\n#         from robot_localization! However, that instance should *not* fuse the global data.\n\nmap_frame\n\n:\n\nmap\n\n# Defaults to \"map\" if unspecified\n\nodom_frame\n\n:\n\nodom\n\n# Defaults to \"odom\" if unspecified\n\nbase_link_frame\n\n:\n\nbase_link\n\n# Defaults to \"base_link\" ifunspecified\n\nworld_frame\n\n:\n\nodom\n\n# Defaults to the value ofodom_frame if unspecified\n\nodom0\n\n:\n\ndemo/odom\n\nodom0_config\n\n:\n\n[\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\nimu0\n\n:\n\ndemo/imu\n\nimu0_config\n\n:\n\n[\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1379f4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 25323, "chroma:document": ",\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\n```\n\nLanguage: unknown\n\nFile: returnlaunch.LaunchDescription([\n\n```\n\nrobot_localization_node\n\n=\n\nlaunch_ros.actions.Node\n\n(\n\npackage\n\n=\n\n'robot_localization'\n\n,\n\nexecutable\n\n=\n\n'ekf_node'\n\n,\n\nname\n\n=\n\n'ekf_filter_node'\n\n,\n\noutput\n\n=\n\n'screen'\n\n,\n\nparameters\n\n=[\n\nos.path.join\n\n(\n\npkg_share,\n\n'config/ekf.yaml'\n\n)\n\n,\n\n{\n\n'use_sim_time'\n\n:\n\nLaunchConfiguration\n\n(\n\n'use_sim_time'\n\n)}]\n\n)\n\n```\n\nLanguage: unknown\n\nFile: returnlaunch.LaunchDescription([\n\n```\n\nlaunch.actions.DeclareLaunchArgument\n\n(\n\nname\n\n=\n\n'use_sim_time'\n\n,\n\ndefault_value\n\n=\n\n'True'\n\n,\n\ndescription\n\n=\n\n'Flag to enable use_sim_time'\n\n)\n\n,\n\n```\n\nLanguage: unknown\n\nFile: rviz_node\n\n```\n\nrobot_state_publisher_node,\n\nspawn_entity,\n\nrobot_localization_node,\n\nrviz_node\n\n])\n\n```\n\nLanguage: unknown\n\nFile: <exec_depend>\n\n```\n\n<exec_depend>robot_localization</exec_depend>\n\n```\n\nLanguage: unknown\n\nFile: install(DIRECTORY...)\n\n```\n\ninstall"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a08-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 26283, "chroma:document": "Language: unknown\n\nFile: install(DIRECTORY...)\n\n```\n\ninstall\n\n(\n\nDIRECTORY\n\nsrc\n\nlaunch\n\nrviz\n\nconfig\n\nDESTINATION\n\nshare/\n\n${\n\nPROJECT_NAME\n\n}\n\n)\n\n```\n\nLanguage: unknown\n\nFile: install(DIRECTORY...)\n\n```\n\ncolcon\n\nbuild\n\n.\n\ninstall/setup.bash\n\nros2\n\nlaunch\n\nsam_bot_description\n\ndisplay.launch.py\n\n```\n\nLanguage: unknown\n\nFile: /tf\n\n```\n\nros2\n\ntopic\n\nlist\n\n```\n\nLanguage: unknown\n\nFile: /tf\n\n```\n\nros2\n\ntopic\n\ninfo\n\n/demo/imu\n\nros2\n\ntopic\n\ninfo\n\n/demo/odom\n\n```\n\nLanguage: unknown\n\nFile: ekf_filter_node\n\n```\n\nros2\n\nnode\n\ninfo\n\n/ekf_filter_node\n\n```\n\nLanguage: unknown\n\nFile: ekf_filter_node\n\n```\n\n/ekf_filter_node\n\nSubscribers:\n\n/demo/imu:\n\nsensor_msgs/msg/Imu\n\n/demo/odom:\n\nnav_msgs/msg/Odometry\n\n/parameter_events:\n\nrcl_interfaces/msg/ParameterEvent\n\n/set_pose:\n\ngeometry_msgs/msg/PoseWithCovarianceStamped\n\nPublishers:\n\n/accel/filtered:\n\ngeometry_msgs/msg/AccelWithCovarianceStamped\n\n/diagnostics:\n\ndiagnostic_msgs/msg/DiagnosticArray\n\n/odometry/filtered:\n\nnav_msgs/msg/Odometry\n\n/parameter_events:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a26-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Odometry\uf0c1.txt", "start_index": 27223, "chroma:document": "/odometry/filtered:\n\nnav_msgs/msg/Odometry\n\n/parameter_events:\n\nrcl_interfaces/msg/ParameterEvent\n\n/rosout:\n\nrcl_interfaces/msg/Log\n\n/tf:\n\ntf2_msgs/msg/TFMessage\n\nService\n\nServers:\n\n...\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\nros2\n\nrun\n\ntf2_ros\n\ntf2_echo\n\nodom\n\nbase_link\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\nAt\n\ntime\n\n8\n\n.842000000\n\nTranslation:\n\n[\n\n0\n\n.003,\n\n0.000,\n\n0\n\n.127\n\n]\n\nRotation:\n\nin\n\nQuaternion\n\n[\n\n0.000,\n\n0\n\n.092,\n\n0\n\n.003,\n\n0\n\n.996\n\n]\n\nAt\n\ntime\n\n9\n\n.842000000\n\nTranslation:\n\n[\n\n0\n\n.002,\n\n0.000,\n\n0\n\n.127\n\n]\n\nRotation:\n\nin\n\nQuaternion\n\n[\n\n0.000,\n\n0\n\n.092,\n\n0\n\n.003,\n\n0\n\n.996\n\n]\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a3a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Build and Install\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Build and Install\uf0c1\n\nURL: https://docs.nav2.org/development_guides/build_docs/index.html#generate\n\ndoxygen\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Install\uf0c1 Nav2 and its dependencies are released as binaries. You may install it via the following to get the latest stable released version:\n\n## For Iron and Older\uf0c1\n\n## For Jazzy and Newer\uf0c1\n\n## Build\uf0c1 There are a few ways to build Nav2 using:\n\n## Released Distribution Binaries\uf0c1 To build Nav2, you\u2019ll first need to build or install ROS 2 and related development tools, including:colcon,rosdepandvcstool. Once your environment is setup, clone the repo, install all dependencies, and build the workspace: You can thensource~/nav2_ws/install/setup.bashto get ready for demonstrations!"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a4e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Build and Install\uf0c1.txt", "start_index": 819, "chroma:document": "## Rolling Development Source\uf0c1 Building Nav2 using rolling development source is similar to building Nav2 from released distribution binaries, where instead you build dependencies from source using the main development branches for all ROS based packages. Nav2 does not currently release binaries on rolling, so it must be build from source. Once your environment is setup, clone the repo and build the workspace: You can thensource~/nav2_ws/install/setup.bashto get ready for demonstrations! It is safe to ignore the rosdep error of from the missingslam_toolboxkey."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a62-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Build and Install\uf0c1.txt", "start_index": 1387, "chroma:document": "## Docker Container Images\uf0c1 Building Nav2 using Docker container images provides a repeatable and reproducible environment to automate and self document the entire setup process. Instead of manually invoking the development tools as documented above, you can leverage the project\u2019s Dockerfiles to build and install Nav2 for various distributions. Once your system is setup, you can build the Nav2 Dockerfile from the root of the repo: Thedocker buildcommand above creates a tagged image using theDockerfilefrom the context specified using the path to the repo, where build-time variables are set using additional arguments, e.g. passing a set ofcolcon mixinsto configure the workspace build. Check theARGdirectives in theDockerfileto discover all build-time variables available. The command also specifies anexternal cache sourceto pull the latest cached image from Nav2\u2019sContainer Registryto speed up the build process."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a76-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Build and Install\uf0c1.txt", "start_index": 2309, "chroma:document": "## Generate Doxygen\uf0c1 Rundoxygenin the root of the Nav2 repository. It will generate a/doc/*directory containing the documentation. The documentation entrypoint in a browser is index.html.\n\n## Help\uf0c1\n\nBuild Troubleshooting Guide\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsource\n\n/opt/ros/<distro>/setup.bash\n\nsudo\n\napt\n\ninstall\n\n\\\n\nros\n\n$ROS_DISTRO\n\nnavigation2\n\n\\\n\nros\n\n$ROS_DISTRO\n\nnav2\n\nbringup\n\n\\\n\nros\n\n$ROS_DISTRO\n\nturtlebot3*\n\n```\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsource\n\n/opt/ros/<distro>/setup.bash\n\nsudo\n\napt\n\ninstall\n\n\\\n\nros\n\n$ROS_DISTRO\n\nnavigation2\n\n\\\n\nros\n\n$ROS_DISTRO\n\nnav2\n\nbringup\n\n\\\n\nros\n\n$ROS_DISTRO\n\nnav2\n\nminimal\n\ntb*\n\n```\n\nLanguage: unknown\n\nFile: main\n\n```\n\nsource\n\n/opt/ros/<distro>/setup.bash\n\nmkdir\n\np\n\n~/nav2_ws/src\n\n&&\n\ncd\n\n~/nav2_ws\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/navigation2.git\n\nbranch\n\n$ROS_DISTRO\n\n./src/navigation2\n\nrosdep\n\ninstall\n\ny\n\n\\\n\nfrom\n\npaths\n\n./src\n\n\\\n\nignore\n\nsrc\n\ncolcon\n\nbuild\n\n\\\n\nsymlink\n\ninstall\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137a94-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Build and Install\uf0c1.txt", "start_index": 3262, "chroma:document": "./src\n\n\\\n\nignore\n\nsrc\n\ncolcon\n\nbuild\n\n\\\n\nsymlink\n\ninstall\n\n```\n\nLanguage: unknown\n\nFile: source~/nav2_ws/install/setup.bash\n\n```\n\nsource\n\n<ros_ws>/install/setup.bash\n\nmkdir\n\np\n\n~/nav2_ws/src\n\n&&\n\ncd\n\n~/nav2_ws\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/navigation2.git\n\nbranch\n\nmain\n\n./src/navigation2\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/nav2_minimal_turtlebot_simulation.git\n\nbranch\n\nmain\n\n./src/nav2_minimal_turtlebot_simulation\n\nrosdep\n\ninstall\n\nr\n\ny\n\n\\\n\nfrom\n\npaths\n\n./src\n\n\\\n\nignore\n\nsrc\n\ncolcon\n\nbuild\n\n\\\n\nsymlink\n\ninstall\n\n```\n\nLanguage: unknown\n\nFile: slam_toolbox\n\n```\n\nexport\n\nROS_DISTRO\n\n=\n\nrolling\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/navigation2.git\n\nbranch\n\nmain\n\ndocker\n\nbuild\n\ntag\n\nnavigation2:\n\n$ROS_DISTRO\n\n\\\n\nbuild\n\narg\n\nFROM_IMAGE\n\n=\n\nros:\n\n$ROS_DISTRO\n\n\\\n\nbuild\n\narg\n\nOVERLAY_MIXINS\n\n=\n\n\"release ccache lld\"\n\n\\\n\ncache\n\nfrom\n\nghcr.io/ros\n\nnavigation/navigation2:main\n\n\\\n\n./navigation2\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137aa8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Getting Involved\uf0c1\n\nURL: https://docs.nav2.org/development_guides/involvement_docs/index.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137abc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 220, "chroma:document": "## Getting Involved\uf0c1 If you\u2019re interested in getting involved in Navigation 2, first of all, welcome! We encourage everyone to get involved from students, to junior developers, to senior developers, and executives. There\u2019s something to do for everyone from bug fixes, to feature development, new algorithms, and refactoring. All ROS 2 TSC Working Groups have their meetings on theworking group calendar. Here, you can find the date and time of the Navigation2 working group meeting. Make sure you\u2019re checking in your local timezone. From this calendar, you can add yourself to the event so it will appear on your google calendar and get the event link to the call through Google Hangouts. We encourage everyone interested to come to the meeting to introduce yourself, your project, and see what everyone is working on. Further,ROS Discourseis a good place to follow larger discussions happening in the community and announcements. This isnotthe correct place to post questions or ask for assistance. Please visitROS"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ad0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 1173, "chroma:document": "place to post questions or ask for assistance. Please visitROS Answersfor Q&A. Lastly, we have aCommunity Slackwhere we chat in real-time about topics in public channels or sidebar maintainers on individual projects via PMs. If you\u2019re interested in contributing to Nav2, this is a great place to join! If you\u2019re looking to contribute code or bugs, please see the Process section below. Over time, for developers that have an interest and have shown technical competence in an area of the stack, we elevate developers to a maintainers status. That allows push rights to our protected branches, first-reviewers rights, and getting your name onAbout and Contact. There currently is not a clear process for getting to be a maintainer, but if you\u2019ve been involved and contributing over a duration of several months, you may be a good candidate and should email the project lead listed onAbout and Contact."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ae4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 2075, "chroma:document": "## Process\uf0c1 After you\u2019ve introduced yourself in a working group meeting (recommended, not required), you\u2019re ready to get started! We recommend a typical open-source project flow and value detail and transparency. If you commit to something and need to pull back, say so. We all know priorities change and appreciate the heads up so that task can go into the open queue of tasks. The process is simple and is as follow: Note: We take code quality seriously and strive for high-quality and consistent code. We make use of the linting and static analysis tools provided in ROS 2 (ament_cpplint,ament_uncrustify,ament_cppcheck, etc). All PRs are built in CI with the appropriate ROS distributions and run through a set of unit and system level tests including static analysis. You can see the results of these tests in the pull request. It is expected for feature development for tests to cover this work to be added. If any documentation must be updated due to your changes, that should be included in your pull request."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137af8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 3094, "chroma:document": "## Licensing\uf0c1 Licensing is very important to open source projects. It helps ensure the software continues to be available under the terms that the author desired. Because much of the source code is ported from other ROS 1 projects, each package has it\u2019s own license. Contributions should be made under the predominant license of that package. Entirely new packages should be made available under theApache 2.0 license. A license tells you what rights you have as a developer, as provided by the copyright holder. It is important that the contributor fully understands the licensing rights and agrees to them. Sometimes the copyright holder isn\u2019t the contributor, such as when the contributor is doing work on behalf of a company. If for some reason Apache 2.0 or BSD licenses are not appropriate for your work, please get in contact with a project maintainer and discuss your concerns or requirements. We may consider special exceptions for exceptional work, within reason (we will not accept any licenses that makes it"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b16-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 4053, "chroma:document": "within reason (we will not accept any licenses that makes it unsuitable for commercial use)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b2a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 4147, "chroma:document": "## Developer Certification of Origin (DCO)\uf0c1 To make a good faith effort to ensure licensing criteria are met, Nav2 encourages the Developer Certificate of Origin (DCO) process to be followed. The DCO is an attestation attached to every contribution made by a developer. In the commit message of the contribution, (described more fully later in this document), the developer simply adds aSigned-off-bystatement and thereby agrees to the DCO. In practice, its easier to justgitcommit-s-m\"commitmessage.\". Where-sadds this automatically. If you forgot to add this to a commit, it is easy to append via:gitcommit--amend-s. When a developer submits a patch, it is a commitment that the contributor has the right to submit the patch per the license.  The DCO agreement is shown below and athttp://developercertificate.org/.\n\nCode Examples:\n\nLanguage: unknown File: gitcommit--amend-s ``` Developer's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b3e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 5068, "chroma:document": "By making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as Indicated in the file; or\n\n(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b52-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Involved\uf0c1.txt", "start_index": 5791, "chroma:document": "(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b66-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Collision Monitor Node\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/collision_monitor/configuring-collision-monitor-node.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Features\uf0c1\n\nThe Collision Monitor uses polygons relative the robot\u2019s base frame origin to define \u201czones\u201d.\n\nData that fall into these zones trigger an operation depending on the model being used.\n\nA given instance of the Collision Monitor can have many zones with different models at the same time.\n\nWhen multiple zones trigger at once, the most aggressive one is used (e.g. stop > slow 50% > slow 10%).\n\nThe following models of safety behaviors are employed by Collision Monitor:\n\nThe zones around the robot can take the following shapes:\n\nAll shapes (Polygon,CircleandVelocityPolygon) are derived from basePolygonclass, so without loss of generality they would be called as \u201cpolygons\u201d."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b7a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 950, "chroma:document": "Subscribed footprint is also having the same properties as other polygons, but it is being obtained a footprint topic for the Approach Model.\n\nThe data may be obtained from different data sources:\n\n## Parameters\uf0c1\n\n## Polygons parameters\uf0c1\n\n<polygonname>is the corresponding polygon name ID selected for this type.\n\n## VelocityPolygon parameters\uf0c1\n\nAll previous Polygon parameters apply, in addition to the following unique parameters for VelocityPolygon.\n\n## Observation sources parameters\uf0c1\n\n<sourcename>is the corresponding data source name ID selected for this type.\n\n## Example\uf0c1\n\nHere is an example illustrating the common configurations for holonomic robots that cover multiple directions of the resultant velocity:\n\nHere is an example of configuration YAML for the Collision Monitor.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: source_timeout:0.0\n\n```\n\ncollision_monitor\n\n:\n\nros__parameters\n\n:\n\nbase_frame_id\n\n:\n\n\"base_footprint\"\n\nodom_frame_id\n\n:\n\n\"odom\"\n\ncmd_vel_in_topic\n\n:\n\n\"cmd_vel_smoothed\"\n\ncmd_vel_out_topic\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137b98-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 1908, "chroma:document": "cmd_vel_in_topic\n\n:\n\n\"cmd_vel_smoothed\"\n\ncmd_vel_out_topic\n\n:\n\n\"cmd_vel\"\n\nstate_topic\n\n:\n\n\"collision_monitor_state\"\n\ntransform_tolerance\n\n:\n\n0.5\n\nsource_timeout\n\n:\n\n5.0\n\nbase_shift_correction\n\n:\n\nTrue\n\nstop_pub_timeout\n\n:\n\n2.0\n\nenable_stamped_cmd_vel\n\n:\n\nTrue\n\n# False for Jazzy or older\n\nuse_realtime_priority\n\n:\n\nfalse\n\npolygons\n\n:\n\n[\n\n\"PolygonStop\"\n\n,\n\n\"PolygonSlow\"\n\n,\n\n\"FootprintApproach\"\n\n]\n\nPolygonStop\n\n:\n\ntype\n\n:\n\n\"circle\"\n\nradius\n\n:\n\n0.3\n\naction_type\n\n:\n\n\"stop\"\n\nmin_points\n\n:\n\n4\n\n# max_points: 3 for Humble\n\nvisualize\n\n:\n\nTrue\n\npolygon_pub_topic\n\n:\n\n\"polygon_stop\"\n\nenabled\n\n:\n\nTrue\n\nPolygonSlow\n\n:\n\ntype\n\n:\n\n\"polygon\"\n\npoints\n\n:\n\n\"[[1.0,\n\n1.0],\n\n[1.0,\n\n1.0],\n\n[-0.5,\n\n1.0],\n\n[-0.5,\n\n1.0]]\"\n\naction_type\n\n:\n\n\"slowdown\"\n\nmin_points\n\n:\n\n4\n\n# max_points: 3 for Humble\n\nslowdown_ratio\n\n:\n\n0.3\n\nvisualize\n\n:\n\nTrue\n\npolygon_pub_topic\n\n:\n\n\"polygon_slowdown\"\n\nenabled\n\n:\n\nTrue\n\nPolygonLimit\n\n:\n\ntype\n\n:\n\n\"polygon\"\n\npoints\n\n:\n\n\"[[0.5,\n\n0.5],\n\n[0.5,\n\n0.5],\n\n[-0.5,\n\n0.5],\n\n[-0.5,\n\n0.5]]\"\n\naction_type\n\n:\n\n\"limit\""}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137bac-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 2860, "chroma:document": "0.5],\n\n[-0.5,\n\n0.5],\n\n[-0.5,\n\n0.5]]\"\n\naction_type\n\n:\n\n\"limit\"\n\nmin_points\n\n:\n\n4\n\n# max_points: 3 for Humble\n\nlinear_limit\n\n:\n\n0.4\n\nangular_limit\n\n:\n\n0.5\n\nvisualize\n\n:\n\nTrue\n\npolygon_pub_topic\n\n:\n\n\"polygon_limit\"\n\nenabled\n\n:\n\nTrue\n\nFootprintApproach\n\n:\n\ntype\n\n:\n\n\"polygon\"\n\naction_type\n\n:\n\n\"approach\"\n\nfootprint_topic\n\n:\n\n\"/local_costmap/published_footprint\"\n\ntime_before_collision\n\n:\n\n2.0\n\nsimulation_time_step\n\n:\n\n0.02\n\nmin_points\n\n:\n\n6\n\n# max_points: 5 for Humble\n\nvisualize\n\n:\n\nFalse\n\nenabled\n\n:\n\nTrue\n\nVelocityPolygonStop\n\n:\n\ntype\n\n:\n\n\"velocity_polygon\"\n\naction_type\n\n:\n\n\"stop\"\n\nmin_points\n\n:\n\n6\n\nvisualize\n\n:\n\nTrue\n\nenabled\n\n:\n\nTrue\n\npolygon_pub_topic\n\n:\n\n\"velocity_polygon_stop\"\n\nvelocity_polygons\n\n:\n\n[\n\n\"rotation\"\n\n,\n\n\"translation_forward\"\n\n,\n\n\"translation_backward\"\n\n,\n\n\"stopped\"\n\n]\n\nholonomic\n\n:\n\nfalse\n\nrotation\n\n:\n\npoints\n\n:\n\n\"[[0.3,\n\n0.3],\n\n[0.3,\n\n0.3],\n\n[-0.3,\n\n0.3],\n\n[-0.3,\n\n0.3]]\"\n\nlinear_min\n\n:\n\n0.0\n\nlinear_max\n\n:\n\n0.05\n\ntheta_min\n\n:\n\n1.0\n\ntheta_max\n\n:\n\n1.0\n\ntranslation_forward\n\n:\n\npoints\n\n:\n\n\"[[0.35,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137bc0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 3819, "chroma:document": "theta_max\n\n:\n\n1.0\n\ntranslation_forward\n\n:\n\npoints\n\n:\n\n\"[[0.35,\n\n0.3],\n\n[0.35,\n\n0.3],\n\n[-0.2,\n\n0.3],\n\n[-0.2,\n\n0.3]]\"\n\nlinear_min\n\n:\n\n0.0\n\nlinear_max\n\n:\n\n1.0\n\ntheta_min\n\n:\n\n1.0\n\ntheta_max\n\n:\n\n1.0\n\ntranslation_backward\n\n:\n\npoints\n\n:\n\n\"[[0.2,\n\n0.3],\n\n[0.2,\n\n0.3],\n\n[-0.35,\n\n0.3],\n\n[-0.35,\n\n0.3]]\"\n\nlinear_min\n\n:\n\n1.0\n\nlinear_max\n\n:\n\n0.0\n\ntheta_min\n\n:\n\n1.0\n\ntheta_max\n\n:\n\n1.0\n\n# This is the last polygon to be checked, it should cover the entire range of robot's velocities\n\n# It is used as the stopped polygon when the robot is not moving and as a fallback if the velocity\n\n# is not covered by any of the other sub-polygons\n\nstopped\n\n:\n\npoints\n\n:\n\n\"[[0.25,\n\n0.25],\n\n[0.25,\n\n0.25],\n\n[-0.25,\n\n0.25],\n\n[-0.25,\n\n0.25]]\"\n\nlinear_min\n\n:\n\n1.0\n\nlinear_max\n\n:\n\n1.0\n\ntheta_min\n\n:\n\n1.0\n\ntheta_max\n\n:\n\n1.0\n\nobservation_sources\n\n:\n\n[\n\n\"scan\"\n\n,\n\n\"pointcloud\"\n\n]\n\nscan\n\n:\n\nsource_timeout\n\n:\n\n0.2\n\ntype\n\n:\n\n\"scan\"\n\ntopic\n\n:\n\n\"/scan\"\n\nenabled\n\n:\n\nTrue\n\npointcloud\n\n:\n\ntype\n\n:\n\n\"pointcloud\"\n\ntopic\n\n:\n\n\"/intel_realsense_r200_depth/points\""}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137bd4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Collision Monitor Node\uf0c1.txt", "start_index": 4776, "chroma:document": "\"pointcloud\"\n\ntopic\n\n:\n\n\"/intel_realsense_r200_depth/points\"\n\nmin_height\n\n:\n\n0.1\n\nmax_height\n\n:\n\n0.5\n\nenabled\n\n:\n\nTrue\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137be8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Speed Filter Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Speed Filter Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/speed_filter.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: <filtername>\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\n...\n\nplugins\n\n:\n\n[\n\n\"static_layer\"\n\n,\n\n\"obstacle_layer\"\n\n,\n\n\"inflation_layer\"\n\n]\n\nfilters\n\n:\n\n[\n\n\"speed_filter\"\n\n]\n\n...\n\nspeed_filter\n\n:\n\nplugin\n\n:\n\n\"nav2_costmap_2d::SpeedFilter\"\n\nenabled\n\n:\n\nTrue\n\nfilter_info_topic\n\n:\n\n\"/costmap_filter_info\"\n\nspeed_limit_topic\n\n:\n\n\"/speed_limit\"\n\ntransform_tolerance\n\n:\n\n0.1\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137bfc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/UndockRobot\uf0c1.txt", "start_index": 0, "chroma:document": "Title: UndockRobot\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/UndockRobot.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: UndockRobot\n\n```\n\n<UndockRobot\n\ndock_type=\n\n\"{dock_type}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c1a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/IsBatteryLow\uf0c1.txt", "start_index": 0, "chroma:document": "Title: IsBatteryLow\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/IsBatteryLow.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: is_voltage\n\n```\n\n<IsBatteryLow\n\nmin_battery=\n\n\"0.5\"\n\nbattery_topic=\n\n\"/battery_status\"\n\nis_voltage=\n\n\"false\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c2e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/GoalCheckerSelector\uf0c1.txt", "start_index": 0, "chroma:document": "Title: GoalCheckerSelector\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/GoalCheckerSelector.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: transientlocal\n\n```\n\n<GoalCheckerSelector\n\nselected_goal_checker=\n\n\"{selected_goal_checker}\"\n\ndefault_goal_checker=\n\n\"precise_goal_checker\"\n\ntopic_name=\n\n\"goal_checker_selector\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c42-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Behavior Tree XML Nodes\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Behavior Tree XML Nodes\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-bt-xml.html#decorator-plugins\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Action Plugins\uf0c1\n\n## Condition Plugins\uf0c1\n\n## Control Plugins\uf0c1\n\n## Decorator Plugins\uf0c1\n\n## Example\uf0c1\n\nThis Behavior Tree replans the global path periodically at 1 Hz and it also has\n\nrecovery actions.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"ComputePathToPoseRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c60-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Behavior Tree XML Nodes\uf0c1.txt", "start_index": 971, "chroma:document": ">\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</RateController>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"FollowPath\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"FollowPathRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</PipelineSequence>\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<Sequence\n\nname=\n\n\"ClearingActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c74-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Behavior Tree XML Nodes\uf0c1.txt", "start_index": 1946, "chroma:document": "/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5\"\n\n/>\n\n<BackUp\n\nbackup_dist=\n\n\"0.15\"\n\nbackup_speed=\n\n\"0.025\"\n\n/>\n\n</RoundRobin>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c88-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/CancelDriveOnHeading\uf0c1.txt", "start_index": 0, "chroma:document": "Title: CancelDriveOnHeading\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/CancelDriveOnHeading.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: drive_on_heading\n\n```\n\n<CancelDriveOnHeading\n\nserver_name=\n\n\"drive_on_heading\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137c9c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Started\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Getting Started\uf0c1\n\nURL: https://docs.nav2.org/getting_started/index.html\n\nSection: development_guides/index.html\n\n--------------------------------------------------------------------------------\n\n## Installation\uf0c1 Jazzy introduced the new Gazebo modern simulator, replacing Gazebo Classic. Thus, for Jazzy and newer, the installation packages and instructions are slightly different to pull in the appropriate packages. ForJazzy and newer, install the Turtlebot 3 & 4 packages for Gazebo Modern. It should be automatically installed withnav2_bringup: ForIron and older, install Turtlebot 3 packages for gazebo classic:\n\n## Running the Example\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137cb0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Started\uf0c1.txt", "start_index": 650, "chroma:document": "## Navigating\uf0c1 After starting, the robot initially has no idea where it is. By default, Nav2 waits for you to give it an approximate starting position. Take a look at where the robot is in the Gazebo world, and find that spot on the map. Set the initial pose by clicking the \u201c2D Pose Estimate\u201d button in RViz, and then down clicking on the map in that location. You set the orientation by dragging forward from the down click. If you are using the defaults so far, the robot should look roughly like this. If you don\u2019t get the location exactly right, that\u2019s fine. Nav2 will refine the position as it navigates. You can also, click the \u201c2D Pose Estimate\u201d button and try again, if you prefer. Once you\u2019ve set the initial pose, the transform tree will be complete and Nav2 will be fully active and ready to go. You should see the robot and particle cloud now. Next, click the \u201cNavigaton2 Goal\u201d button and choose a destination. This will call the BT navigator to go to that goal through an action server. You can pause (cancel)"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137cce-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Started\uf0c1.txt", "start_index": 1612, "chroma:document": "to that goal through an action server. You can pause (cancel) or reset the action through the Nav2 rviz plugin shown. Now watch the robot go!"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ce2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Getting Started\uf0c1.txt", "start_index": 1755, "chroma:document": "Code Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsudo\n\napt\n\ninstall\n\nros\n\n<ros2\n\ndistro>\n\nnavigation2\n\nsudo\n\napt\n\ninstall\n\nros\n\n<ros2\n\ndistro>\n\nnav2\n\nbringup\n\n```\n\nLanguage: unknown\n\nFile: nav2_bringup\n\n```\n\nsudo\n\napt\n\ninstall\n\nros\n\n<ros2\n\ndistro>\n\nnav2\n\nminimal\n\ntb*\n\n```\n\nLanguage: unknown\n\nFile: nav2_bringup\n\n```\n\nsudo\n\napt\n\ninstall\n\nros\n\n<ros2\n\ndistro>\n\nturtlebot3\n\ngazebo\n\n```\n\nLanguage: unknown\n\nFile: nav2_bringup\n\n```\n\nsource\n\n/opt/ros/<ros2\n\ndistro>/setup.bash\n\nexport TURTLEBOT3_MODEL = waffle # Iron and older only with Gazebo Classic export GAZEBO_MODEL_PATH = $GAZEBO_MODEL_PATH :/opt/ros/<ros2-distro>/share/turtlebot3_gazebo/models # Iron and older only with Gazebo Classic ```\n\nLanguage: unknown\n\nFile: nav2_bringup\n\n```\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\nheadless:\n\n=\n\nFalse\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137cf6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigation Concepts\uf0c1\n\nURL: https://docs.nav2.org/concepts/index.html\n\nSection: concepts/index.html\n\n--------------------------------------------------------------------------------\n\n## ROS 2\uf0c1 ROS 2 is the core middleware used for Nav2. If you are unfamiliar with this, please visitthe ROS 2 documentationbefore continuing."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d0a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 331, "chroma:document": "## Action Server\uf0c1 Just as in ROS, action servers are a common way to control long running tasks like navigation. This stack makes more extensive use of actions, and in some cases, without an easy topic interface. It is more important to understand action servers as a developer in ROS 2. Some simple CLI examples can be found in theROS 2 documentation. Action servers are similar to a canonical service server. A client will request some task to be completed, except, this task may take a long time. An example would be moving the shovel up from a bulldozer or ask a robot to travel 10 meters to the right. In this situation, action servers and clients allow us to call a long-running task in another process or thread and return a future to its result. It is permissible at this point to block until the action is complete, however, you may want to occasionally check if the action is complete and continue to process work in the client thread. Since it is long-running, action servers will also provide feedback to their"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d28-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 1303, "chroma:document": "action servers will also provide feedback to their clients. This feedback can be anything and is defined in the ROS.actionalong with the request and result types. In the bulldozer example, a request may be an angle, a feedback may be the angle remaining to be moved, and the result is a success or fail boolean with the end angle. In the navigation example, a request may be a position, a feedback may be the time its been navigating for and the distance to the goal, and the result a boolean for success. Feedback and results can be gathered synchronously by registering callbacks with the action client. They may also be gathered by asynchronously requesting information from the shared future objects. Both require spinning the client node to process callback groups. Action servers are used in this stack to communicate with the highest level Behavior Tree (BT) navigator through aNavigateToPoseaction message. They are also used for the BT navigator to communicate with the subsequent smaller action servers to compute"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d3c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 2273, "chroma:document": "with the subsequent smaller action servers to compute plans, control efforts, and recoveries. Each will have their own unique.actiontype innav2_msgsfor interacting with the servers."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d50-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 2456, "chroma:document": "## Lifecycle Nodes and Bond\uf0c1 Lifecycle (or Managed, more correctly) nodes are unique to ROS 2. More information can befound here. They are nodes that contain state machine transitions for bringup and teardown of ROS 2 servers. This helps in deterministic behavior of ROS systems in startup and shutdown. It also helps users structure their programs in reasonable ways for commercial uses and debugging. When a node is started, it is in the unconfigured state, only processing the node\u2019s constructor which shouldnotcontain any ROS networking setup or parameter reading. By the launch system, or the supplied lifecycle manager, the nodes need to be transitioned to inactive by configuring. After, it is possible to activate the node by transitioning through the activating stage. This state will allow the node to process information and be fully setup to run. The configuration stage, triggering theon_configure()method, will setup all parameters, ROS networking interfaces, and for safety systems, all dynamically allocated"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d64-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 3418, "chroma:document": "interfaces, and for safety systems, all dynamically allocated memory. The activation stage, triggering theon_activate()method, will active the ROS networking interfaces and set any states in the program to start processing information. To shutdown, we transition into deactivating, cleaning up, shutting down and end in the finalized state. The networking interfaces are deactivated and stop processing, deallocate memory, exit cleanly, in those stages, respectively. The lifecycle node framework is used extensively through out this project and all servers utilize it. It is best convention for all ROS systems to use lifecycle nodes if it is possible. Within Nav2, we use a wrapper of LifecycleNodes,nav2_utilLifecycleNode. This wrapper wraps much of the complexities of LifecycleNodes for typical applications. It also includes abondconnection for the lifecycle manager to ensure that after a server transitions up, it also remains active. If a server crashes, it lets the lifecycle manager know and transition down the"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d78-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 4382, "chroma:document": "it lets the lifecycle manager know and transition down the system to prevent a critical failure. SeeEloquent to Foxyfor details."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137d96-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 4512, "chroma:document": "## Behavior Trees\uf0c1 Behavior trees (BT) are becoming increasingly common in complex robotics tasks. They are a tree structure of tasks to be completed. It creates a more scalable and human-understandable framework for defining multi-step or many state applications. This is opposed to a finite state machine (FSM) which may have dozens of states and hundreds of transitions. An example would be a soccer-playing robot. Embedding the logic of soccer game play into a FSM would be challenging and error prone with many possible states and rules. Additionally, modeling choices like to shoot at the goal from the left, right, or center, is particularly unclear. With a BT, basic primitives, like \u201ckick\u201d, \u201cwalk\u201d, \u201cgo to ball\u201d, can be created and reused for many behaviors. More information can be foundin this book. Istronglyrecommend reading chapters 1-3 to get a good understanding of the nomenclature and workflow. It should only take about 30 minutes. Behavior Trees provide a formal structure for navigation logic which can"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137daa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 5472, "chroma:document": "Trees provide a formal structure for navigation logic which can be both used to create complex systems but also be verifiable and validated as provenly correct using advanced tools. Having the application logic centralized in the behavior tree and with independent task servers (which only communicate data over the tree) allows for formal analysis. For this project, we useBehaviorTree CPP V4as the behavior tree library. We create node plugins which can be constructed into a tree, inside theBTNavigator. The node plugins are loaded into the BT and when the XML file of the tree is parsed, the registered names are associated. At this point, we can march through the behavior tree to navigate. One reason this library is used is its ability to load subtrees. This means that the Nav2 behavior tree can be loaded into another higher-level BT to use this project as node plugin. An example would be in soccer play, using the Nav2 behavior tree as the \u201cgo to ball\u201d node with a ball detection as part of a larger task."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137dbe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 6427, "chroma:document": "to ball\u201d node with a ball detection as part of a larger task. Additionally, we supply aNavigateToPoseActionplugin (among others) for BT so the Nav2 stack can be called from a client application through the usual action interface. Other systems could be used to design complex autonomous behavior, namely Hierarchical FSMs (HFSM). Behavior Trees were selected due to popularity across the robotics and related industries and by largely user demand. However, due to the independent task server nature of Nav2, it is not difficult to offer anav2_hfsm_navigatorpackage in the future, pending interest and contribution."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137dd2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 7043, "chroma:document": "## Navigation Servers\uf0c1 Planners and controllers are at the heart of a navigation task. Recoveries are used to get the robot out of a bad situation or attempt to deal with various forms of issues to make the system fault-tolerant. Smoothers can be used for additional quality improvements of the planned path. In this section, the general concepts around them and their uses in this project are analyzed."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137df0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 7448, "chroma:document": "## Planner, Controller, Smoother and Recovery Servers\uf0c1 Four of the action servers in this project are the planner, behavior, smoother and controller servers. These action servers are used to host a map of algorithm plugins to complete various tasks. They also host the environmental representation used by the algorithm plugins to compute their outputs. The planner, smoother and controller servers will be configured at runtime with the names (aliases) and types of algorithms to use. These types are the pluginlib names that have been registered and the names are the aliases for the task. An example would be the DWB controller used with nameFollowPath, as it follows a reference path. In this case, then all parameters for DWB would be placed in that namespace, e.g.FollowPath.<param>. These three servers then expose an action interface corresponding to their task. When the behavior tree ticks the corresponding BT node, it will call the action server to process its task. The action server callback inside the server"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e04-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 8409, "chroma:document": "process its task. The action server callback inside the server will call the chosen algorithm by its name (e.g.FollowPath) that maps to a specific algorithm. This allows a user to abstract the algorithm used in the behavior tree to classes of algorithms. For instance, you can haveNplugin controllers to follow paths, dock with charger, avoid dynamic obstacles, or interface with a tool. Having all of these plugins in the same server allows the user to make use of a single environmental representation object, which is costly to duplicate. For the behavior server, each of the behaviors also contains their own name, however, each plugin will also expose its own special action server. This is done because of the wide variety of behavior actions that may be created which cannot have a single simple interface to share. The behavior server also contains a costmap subscriber to the local costmap, receiving real-time updates from the controller server, to compute its tasks. We do this to avoid having multiple instances"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e18-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 9376, "chroma:document": "its tasks. We do this to avoid having multiple instances of the local costmap which are computationally expensive to duplicate. Alternatively, since the BT nodes are trivial plugins calling an action, new BT nodes can be created to call other action servers with other action types. It is advisable to use the provided servers if possible at all times. If, due to the plugin or action interfaces, a new server is needed, that can be sustained with the framework. The new server should use the new type and plugin interface, similar to the provided servers. A new BT node plugin will need to be created to call the new action server \u2013 however no forking or modification is required in the Nav2 repo itself by making extensive use of servers and plugins. If you find that you require a new interface to the pluginlib definition or action type, please file a ticket and see if we can rectify that in the same interfaces."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e2c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 10295, "chroma:document": "## Planners\uf0c1 The task of a planner is to compute a path to complete some objective function. The path can also be known as a route, depending on the nomenclature and algorithm selected. Two canonical examples are computing a plan to a goal (e.g. from current position to a goal) or complete coverage (e.g. plan to cover all free space). The planner will have access to a global environmental representation and sensor data buffered into it. Planners can be written to: The general task in Nav2 for the planner is to compute a valid, and potentially optimal, path from the current pose to a goal pose. However, many classes of plans and routes exist which are supported."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e40-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 10966, "chroma:document": "## Controllers\uf0c1 Controllers, also known as local planners in ROS 1, are the way we follow the globally computed path or complete a local task. The controller will have access to a local environment representation to attempt to compute feasible control efforts for the base to follow. Many controller will project the robot forward in space and compute a locally feasible path at each update iteration. Controllers can be written to: The general task in Nav2 for a controller is to compute a valid control effort to follow the global plan. However, many classes of controllers and local planners exist. It is the goal of this project that all controller algorithms can be plugins in this server for common research and industrial tasks."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e5e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 11703, "chroma:document": "## Behaviors\uf0c1 Recovery behaviors are a mainstay of fault-tolerant systems. The goal of recoveries are to deal with unknown or failure conditions of the system and autonomously handle them. Examples may include faults in the perception system resulting in the environmental representation being full of fake obstacles. The clear costmap recovery would then be triggered to allow the robot to move. Another example would be if the robot was stuck due to dynamic obstacles or poor control. Backing up or spinning in place, if permissible, allow the robot to move from a poor location into free space it may navigate successfully. Finally, in the case of a total failure, a recovery may be implemented to call an operator\u2019s attention for help. This can be done via email, SMS, Slack, Matrix, etc. It is important to note that the behavior server can hold any behavior to share access to expensive resources like costmaps or TF buffers, not just recovery behaviors. Each may have its own API."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e72-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 12692, "chroma:document": "## Smoothers\uf0c1 As criteria for optimality of the path searched by a planner are usually reduced compared to reality, additional path refinement is often beneficial. Smoothers have been introduced for this purpose, typically responsible for reducing path raggedness and smoothing abrupt rotations, but also for increasing distance from obstacles and high-cost areas as the smoothers have access to a global environmental representation. Use of a separate smoother over one that is included as part of a planner is advantageous when combining different planners with different smoothers or when a specific control over smoothing is required, e.g. smoothing only a specific part of the path. The general task in Nav2 for a smoother is to receive a path and return its improved version. However, for different input paths, criteria of the improvements and methods of acquiring them exist, creating space for a multitude of smoothers that can be registered in this server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e86-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 13660, "chroma:document": "## Robot Footprints\uf0c1 It is worth remarking that in the cost maps, we set a robot\u2019s footprint either as a circle of radiusrobot_radiusor as a vector of pointsfootprintrepresenting an arbitrary polygon if the robot is non-circular. This can also be adjusted over time using the costmap\u2019s~/footprinttopic, which will update the polygon over time as needed due to changes in the robot\u2019s state, such as movement of an attached manipulator, picking up a pallet, or other actions that adjust a robot\u2019s shape. That polygon will then automatically be used by the planners and controllers."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137e9a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 14241, "chroma:document": "## Waypoint Following\uf0c1 Waypoint following is a basic feature of a navigation system. It tells our system how to use navigation to get to multiple destinations. Thenav2_waypoint_followercontains a waypoint following program with a plugin interface for specific task executors. This is useful if you need to go to a given location and complete a specific task like take a picture, pick up a box, or wait for user input. It is a nice demo application for how to use Nav2 in a sample application. However, it could be used for more than just a sample application. There are 2 schools of thoughts for fleet managers / dispatchers: In the first, thenav2_waypoint_followeris fully sufficient to create a production-grade on-robot solution. Since the autonomy system / dispatcher is taking into account things like the robot\u2019s pose, battery level, current task, and more when assigning tasks, the application on the robot just needs to worry about the task at hand and not the other complexities of the system to complete the"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137eae-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 15198, "chroma:document": "and not the other complexities of the system to complete the requested task. In this situation, you should think of a request to the waypoint follower as 1 unit of work (e.g. 1 pick in a warehouse, 1 security patrole loop, 1 aisle, etc) to do a task and then return to the dispatcher for the next task or request to recharge. In this school of thought, the waypoint following application is just one step above navigation and below the system autonomy application. In the second, thenav2_waypoint_followeris a nice sample application / proof of concept, but you really need your waypoint following / autonomy system on the robot to carry more weight in making a robust solution. In this case, you should use thenav2_behavior_treepackage to create a custom application-level behavior tree using navigation to complete the task. This can include subtrees like checking for the charge status mid-task for returning to dock or handling more than 1 unit of work in a more complex task. Soon, there will be"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ec2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 16135, "chroma:document": "than 1 unit of work in a more complex task. Soon, there will be anav2_bt_waypoint_follower(name subject to adjustment) that will allow you to create this application more easily. In this school of thought, the waypoint following application is more closely tied to the system autonomy, or in many cases, is the system autonomy. Neither is better than the other, it highly depends on the tasks your robot(s) are completing, in what type of environment, and with what cloud resources available. Often this distinction is very clear for a given business case. nav2_waypoint_followeralso supports GPS waypoint following when global localization is provided byrobot_localizationusing thenavsat_transformnode - but also may be provided by Fuse or any number of other sources. There is an action server named/follow_gps_waypointswithinnav2_waypoint_followerthat can directly take in goals expressed in GPS coordinates, convert them to cartesian goals in the global frame, and execute them as cartesian waypoints."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ee0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 17142, "chroma:document": "## State Estimation\uf0c1 Within the navigation project, there are 2 major transformations that need to be provided, according to community standards. Themaptoodomtransform is provided by a positioning system (localization, mapping, SLAM) andodomtobase_linkby an odometry system."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137ef4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 17418, "chroma:document": "## Standards\uf0c1 REP 105defines the frames and conventions required for navigation and the larger ROS ecosystem. These conventions should be followed at all times to make use of the rich positioning, odometry, and SLAM projects available in the community. In a nutshell, REP-105 says that you must, at minimum, build a TF tree that contains a fullmap->odom->base_link->[sensorframes]for your robot. TF2 is the time-variant transformation library in ROS 2 we use to represent and obtain time synchronized transformations. It is the job of the global positioning system (GPS, SLAM, Motion Capture) to, at minimum, provide themap->odomtransformation. It is then the role of the odometry system to provide theodom->base_linktransformation. The remainder of the transformations relative tobase_linkshould be static and defined in yourURDF."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f08-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 18251, "chroma:document": "## Global Positioning: Localization and SLAM\uf0c1 It is the job of the global positioning system (GPS, SLAM, Motion Capture) to, at minimum, provide themap->odomtransformation. We provideamclwhich is an Adaptive Monte-Carlo Localization technique based on a particle filter for localization in a static map. We also provide SLAM Toolbox as the default SLAM algorithm for use to position and generate a static map. These methods may also produce other output including position topics, maps, or other metadata, but they must provide that transformation to be valid. Multiple positioning methods can be fused together using robot localization, discussed more below."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f1c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 18912, "chroma:document": "## Odometry\uf0c1 It is the role of the odometry system to provide theodom->base_linktransformation. Odometry can come from many sources including LIDAR, RADAR, wheel encoders, VIO, and IMUs. The goal of the odometry is to provide a smooth and continuous local frame based on robot motion. The global positioning system will update the transformation relative to the global frame to account for the odometric drift. Robot Localizationis typically used for this fusion. It will take inNsensors of various types and provide a continuous and smooth odometry to TF and to a topic. A typical mobile robotics setup may have odometry from wheel encoders, IMUs, and vision fused in this manner. The smooth output can be used then for dead-reckoning for precise motion and updating the position of the robot accurately between global position updates."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f30-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 19751, "chroma:document": "## Environmental Representation\uf0c1 The environmental representation is the way the robot perceives its environment. It also acts as the central localization for various algorithms and data sources to combine their information into a single space. This space is then used by the controllers, planners, and recoveries to compute their tasks safely and efficiently."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f44-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 20113, "chroma:document": "## Costmaps and Layers\uf0c1 The current environmental representation is a costmap. A costmap is a regular 2D grid of cells containing a cost from unknown, free, occupied, or inflated cost. This costmap is then searched to compute a global plan or sampled to compute local control efforts. Various costmap layers are implemented as pluginlib plugins to buffer information into the costmap. This includes information from LIDAR, RADAR, sonar, depth images, etc. It may be wise to process sensor data before inputting it into the costmap layer, but that is up to the developer. Costmap layers can be created to detect and track obstacles in the scene for collision avoidance using camera or depth sensors. Additionally, layers can be created to algorithmically change the underlying costmap based on some rule or heuristic. Finally, they may be used to buffer live data into the 2D or 3D world for binary obstacle marking."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f58-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 21030, "chroma:document": "## Costmap Filters\uf0c1 Imagine, you\u2019re annotating a map file (or any image file) in order to have a specific action occur based on the location in the annotated map. Examples of marking/annotating might be keep out zones to avoid planning inside, or have pixels belong to maximum speeds in marked areas. This annotated map is called \u201cfilter mask\u201d. Just like a mask overlaid on a surface, it can or cannot be same size, pose and scale as a main map. The main goal of filter mask - is to provide the ability of marking areas on maps with some additional features or behavioral changes. Costmap filters are a costmap layer-based approach of applying spatial-dependent behavioral changes, annotated in filter masks, into the Nav2 stack. Costmap filters are implemented as costmap plugins. These plugins are called \u201cfilters\u201d as they are filtering a costmap by spatial annotations marked on filter masks. In order to make a filtered costmap and change a robot\u2019s behavior in annotated areas, the filter plugin reads the data coming"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f6c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 21992, "chroma:document": "in annotated areas, the filter plugin reads the data coming from the filter mask. This data is being linearly transformed into a feature map in a filter space. Having this transformed feature map along with a map/costmap, any sensor data and current robot coordinate filters can update the underlying costmap and change the behavior of the robot depending on where it is. For example, the following functionality could be made by use of costmap filters:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f80-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Concepts\uf0c1.txt", "start_index": 22447, "chroma:document": "## Other Forms\uf0c1 Various other forms of environmental representations exist. These include:\n\n## Nav2 Academic Overview\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137f9e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/RotateToGoalCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: RotateToGoalCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/rotate_to_goal.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: RotateToGoalCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137fb2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ClearCostmapAroundRobot\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ClearCostmapAroundRobot\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ClearCostmapAroundRobot.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<ClearCostmapAroundRobot\n\nname=\n\n\"ClearLocalCostmap\n\nSubtree\"\n\nservice_name=\n\n\"local_costmap/clear_around_local_costmap\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137fc6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac State Lattice Planner\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Smac State Lattice Planner\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/smac/configuring-smac-lattice.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: >=1\n\n```\n\nplanner_server\n\n:\n\nros__parameters\n\n:\n\nplanner_plugins\n\n:\n\n[\n\n\"GridBased\"\n\n]\n\nuse_sim_time\n\n:\n\nTrue\n\nGridBased\n\n:\n\nplugin\n\n:\n\n\"nav2_smac_planner::SmacPlannerLattice\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nallow_unknown\n\n:\n\ntrue\n\n# Allow traveling in unknown space\n\ntolerance\n\n:\n\n0.25\n\n# dist-to-goal heuristic cost (distance) for valid tolerance endpoints if exact goal cannot be found.\n\nmax_iterations\n\n:\n\n1000000\n\n# Maximum total iterations to search for before failing (in case unreachable), set to -1 to disable\n\nmax_on_approach_iterations\n\n:\n\n1000\n\n# Maximum number of iterations after within tolerances to continue to try to find exact solution\n\nmax_planning_time\n\n:\n\n5.0"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137fda-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac State Lattice Planner\uf0c1.txt", "start_index": 995, "chroma:document": "max_planning_time\n\n:\n\n5.0\n\n# Max time in s for planner to plan, smooth\n\nanalytic_expansion_ratio\n\n:\n\n3.5\n\n# The ratio to attempt analytic expansions during search for final approach.\n\nanalytic_expansion_max_length\n\n:\n\n3.0\n\n# For Hybrid/Lattice nodes The maximum length of the analytic expansion to be considered valid to prevent unsafe shortcutting\n\nanalytic_expansion_max_cost\n\n:\n\n200.0\n\n# The maximum single cost for any part of an analytic expansion to contain and be valid, except when necessary on approach to goal\n\nanalytic_expansion_max_cost_override\n\n:\n\nfalse\n\n#  Whether or not to override the maximum cost setting if within critical distance to goal (ie probably required)\n\nreverse_penalty\n\n:\n\n2.0\n\n# Penalty to apply if motion is reversing, must be => 1\n\nchange_penalty\n\n:\n\n0.05\n\n# Penalty to apply if motion is changing directions (L to R), must be >= 0\n\nnon_straight_penalty\n\n:\n\n1.05\n\n# Penalty to apply if motion is non-straight, must be => 1\n\ncost_penalty\n\n:\n\n2.0"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb137fee-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac State Lattice Planner\uf0c1.txt", "start_index": 1953, "chroma:document": "cost_penalty\n\n:\n\n2.0\n\n# Penalty to apply to higher cost areas when adding into the obstacle map dynamic programming distance expansion heuristic. This drives the robot more towards the center of passages. A value between 1.3 - 3.5 is reasonable.\n\nrotation_penalty\n\n:\n\n5.0\n\n# Penalty to apply to in-place rotations, if minimum control set contains them\n\nretrospective_penalty\n\n:\n\n0.015\n\nlattice_filepath\n\n:\n\n\"\"\n\n# The filepath to the state lattice graph\n\nlookup_table_size\n\n:\n\n20.0\n\n# Size of the dubin/reeds-sheep distance window to cache, in meters.\n\ncache_obstacle_heuristic\n\n:\n\nfalse\n\n# Cache the obstacle map dynamic programming distance expansion heuristic between subsequent replannings of the same goal location. Dramatically speeds up replanning performance (40x) if costmap is largely static.\n\nallow_reverse_expansion\n\n:\n\nfalse\n\n# If true, allows the robot to use the primitives to expand in the mirrored opposite direction of the current robot's orientation (to reverse).\n\nsmooth_path\n\n:\n\nTrue"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138002-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac State Lattice Planner\uf0c1.txt", "start_index": 2936, "chroma:document": "smooth_path\n\n:\n\nTrue\n\n# If true, does a simple and quick smoothing post-processing to the path\n\nsmoother\n\n:\n\nmax_iterations\n\n:\n\n1000\n\nw_smooth\n\n:\n\n0.3\n\nw_data\n\n:\n\n0.2\n\ntolerance\n\n:\n\n1.0e-10\n\ndo_refinement\n\n:\n\ntrue\n\nrefinement_num\n\n:\n\n2\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138016-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Simple Smoother\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Simple Smoother\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nsimple\n\nsmoother.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Simple Smoother Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: >=1\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\ncostmap_topic\n\n:\n\nglobal_costmap/costmap_raw\n\nfootprint_topic\n\n:\n\nglobal_costmap/published_footprint\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nsmoother_plugins\n\n:\n\n[\n\n\"simple_smoother\"\n\n]\n\nsimple_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_smoother::SimpleSmoother\"\n\ntolerance\n\n:\n\n1.0e\n\n10\n\ndo_refinement\n\n:\n\nTrue\n\nrefinement_num\n\n:\n\n2\n\nmax_its\n\n:\n\n1000\n\nw_data\n\n:\n\n0.2\n\nw_smooth\n\n:\n\n0.3\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13802a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SingleTrigger\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SingleTrigger\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/decorators/SingleTrigger.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<SingleTrigger>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</SingleTrigger>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13803e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Adding a Smoother to a BT\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/adding_smoother.html#requirements\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to add a smoother to your behavior tree to smooth output paths from a path planner.\n\nBefore completing this tutorials, completingGetting Startedis highly recommended especially if you are new to ROS and Nav2.\n\n## Requirements\uf0c1\n\nYou must install Nav2, Turtlebot3.\n\nIf you don\u2019t have them installed, please followGetting Started.\n\nYou must also have a working behavior tree, such as those provided by the Nav2 BT Navigator package, for editing.\n\nYou should also have a copy of thenav2_params.yamlfile for your system to edit as well.\n\n## Tutorial Steps\uf0c1\n\n## 0- Familiarization with the Smoother BT Node\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138052-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 822, "chroma:document": "## 0- Familiarization with the Smoother BT Node\uf0c1\n\nTheSmoothPathBT node is a behavior tree node that interacts with the smoother task server similar to that which you may expect to find for the planner or controller servers. It contains the action client to call the server and specifies its arguments and return types as BT ports. It too calls the server via an action interface that may be separately interacted with via other servers and client library languages.\n\nPlease see the BT node\u2019s configuration page to familiarize yourself with all aspects, but the core ports to note are theunsmoothed_pathinput port and thesmoothed_pathoutput port. The first takes in a raw path from a planning algorithm and the latter will set the value of the smoothed output path post-smoothing. Other ports are available that fully implements the Smoother Server\u2019s action API.\n\n## 1- Specifying a Smoother Plugin\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138070-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 1685, "chroma:document": "## 1- Specifying a Smoother Plugin\uf0c1\n\nIn order to use a smoother in your BT node, you must first configure the smoother server itself to contain the smoother plugins of interest. These plugins implement the specific algorithms that you would like to use.\n\nFor each smoother plugin you would like to use, a name must be given to it (e.g.simple_smoother,curvature_smoother). This name is itssmoother_idfor other servers to interact with this algorithm from a request to the Smoother Server\u2019s action interface.\n\nUnder each name, the parameters for that particular algorithm must be specified along with thepluginname for pluginlib to load a given algorithm\u2019s library. An example configuration of 2 smoother plugins is shown below that could be used in thenav2_params.yamlfor your robot.\n\n## 2- Modifying your BT XML\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138084-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 2469, "chroma:document": "## 2- Modifying your BT XML\uf0c1\n\nNow that you have selected and configured the smoother server for your given plugin(s), it is time to use those smoother(s) in your behavior tree for navigation behavior. While there are many places / ways to use this in a BT, what is shown below is probably the most likely situation you would want to use the smoother in (to smooth a path returned by the path planner and then using that smoothed path for path tracking).\n\nNote: If you use only a single type of smoothing algorithm, there is no need to specify thesmoother_idin the BT XML entry. Since there is only a single option, that will be used for any request that does not specifically request a smoother plugin. However, if you leverage multiple smoother plugins, youmustpopulate thesmoother_idXML port.\n\nA given behavior tree will have a line:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138098-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 3265, "chroma:document": "A given behavior tree will have a line:\n\nThis line calls the planner server and return a path to thepathblackboard variable in the behavior tree. We are  going to replace that line with the following to compute the path, smooth the path, and finally replace thepathblackboard variable with the new smoothed path that the system will now interact with:\n\nIf you wish to have recoveries for the smoother error codes, such as triggering the system recoveries branch of a behavior tree:\n\nAnd its as simple as that! You can now compile or use this behavior tree in your system and see that the plans are now smoothed and the controllers are now tracking this smoothed path. The image at the top of the tutorial shows the unsmoothed path from NavFn (red) and the smoothed path (black). Note the smoother approach to goal, turns, and transitions in the straight-line segments."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1380ac-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 4135, "chroma:document": "If you wish to see the difference, but not track the smoothed path, you may wish to remove thesmoothed_path=\"{path}\"portion to compute the smoothed path, but not replace the original path with it. Instead, the topic/smoothed_pathcontains this information published by the smoother server for visualization or use by other parts of the system. You may also remap the smoothed path to another blackboard variable to interact with it in other parts of the behavior tree (e.g.smoothed_path=\"{smoothed_path}\").\n\nCode Examples:\n\nLanguage: unknown\n\nFile: nav2_params.yaml\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\ncostmap_topic\n\n:\n\nglobal_costmap/costmap_raw\n\nfootprint_topic\n\n:\n\nglobal_costmap/published_footprint\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nsmoother_plugins\n\n:\n\n[\n\n\"simple_smoother\"\n\n,\n\n\"curvature_smoother\"\n\n]\n\nsimple_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_smoother::SimpleSmoother\"\n\ntolerance\n\n:\n\n1.0e-10\n\ndo_refinement\n\n:\n\nTrue\n\ncurvature_smoother\n\n:\n\nplugin\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1380c0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Adding a Smoother to a BT\uf0c1.txt", "start_index": 5065, "chroma:document": "do_refinement\n\n:\n\nTrue\n\ncurvature_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_ceres_costaware_smoother/CeresCostawareSmoother\"\n\n```\n\nLanguage: unknown\n\nFile: smoother_id\n\n```\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n```\n\nLanguage: unknown\n\nFile: path\n\n```\n\n<Sequence\n\nname=\n\n\"ComputeAndSmoothPath\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n<SmoothPath\n\nunsmoothed_path=\n\n\"{path}\"\n\nsmoothed_path=\n\n\"{path}\"\n\nerror_code_id=\n\n\"{smoother_error_code}\"\n\n/>\n\n</Sequence>\n\n```\n\nLanguage: unknown\n\nFile: path\n\n```\n\n<Sequence\n\nname=\n\n\"TryToResolveSmootherErrorCodes\"\n\n>\n\n<WouldASmootherRecoveryHelp\n\nerror_code=\n\n\"{smoother_error_code}\"\n\n>\n\n<!-- recovery to resolve smoother error code goes here -->\n\n<Sequence/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1380d4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Writing a New Planner Plugin\uf0c1\n\nURL: https://docs.nav2.org/plugin_tutorials/docs/writing_new_nav2planner_plugin.html#writing-new-nav2planner-plugin\n\nSection: tuning/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to create your own planner plugin.\n\n## Requirements\uf0c1\n\n## Tutorial Steps\uf0c1\n\n## 1- Creating a new Planner Plugin\uf0c1\n\nWe will create a simple straight-line planner.\n\nThe annotated code in this tutorial can be found innavigation_tutorialsrepository as thenav2_straightline_planner.\n\nThis package can be considered as a reference for writing planner plugin.\n\nOur example plugin inherits from the base classnav2_core::GlobalPlanner. The base class provides 5 pure virtual methods to implement a planner plugin. The plugin will be used by the planner server to compute trajectories.\n\nLet\u2019s learn more about the methods needed to write a planner plugin."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1380e8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 947, "chroma:document": "For this tutorial, we will be using methodsStraightLine::configure()andStraightLine::createPlan()to create straight-line planner.\n\nIn planners,configure()method must set member variables from ROS parameters and any initialization required,\n\nHere,name_+\".interpolation_resolution\"is fetching the ROS parametersinterpolation_resolutionwhich is specific to our planner. Nav2 allows the loading of multiple plugins, and to keep things organized, each plugin is mapped to some ID/name. Now if we want to retrieve the parameters for that specific plugin, we use<mapped_name_of_plugin>.<name_of_parameter>as done in the above snippet. For example, our example planner is mapped to the name \u201cGridBased\u201d and to retrieve theinterpolation_resolutionparameter which is specific to \u201cGridBased\u201d, we usedGridbased.interpolation_resolution. In other words,GridBasedis used as a namespace for plugin-specific parameters. We will see more on this when we discuss the parameters file (or params file)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1380fc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 1931, "chroma:document": "IncreatePlan()method, we need to create a path from the given start to goal poses. TheStraightLine::createPlan()is called using start pose and goal pose to solve the global path planning problem. Upon succeeding, it converts the path to thenav_msgs::msg::Pathand returns to the planner server. Below annotation shows the implementation of this method.\n\nThe remaining methods are not used but it\u2019s mandatory to override them. As per the rules, we did override all but left them blank.\n\n## 2- Exporting the planner plugin\uf0c1\n\nNow that we have created our custom planner, we need to export our planner plugin so that it will be visible to the planner server. Plugins are loaded at runtime and if they are not visible, then our planner server won\u2019t be able to load it. In ROS 2, exporting and loading plugins is handled bypluginlib.\n\nComing back to our tutorial, classnav2_straightline_planner::StraightLineis loaded dynamically asnav2_core::GlobalPlannerwhich is our base class."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138110-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 2906, "chroma:document": "Note that it requires pluginlib to export out plugin\u2019s class. Pluginlib would provide as macroPLUGINLIB_EXPORT_CLASSwhich does all the work of exporting.\n\nIt is good practice to place these lines at the end of the file, but technically, you can also write at the top.\n\n## 3- Pass the plugin name through params file\uf0c1\n\nTo enable the plugin, we need to modify thenav2_params.yamlfile as below to replace following params\n\nwith\n\nIn the above snippet, you can observe the mapping of ournav2_straightline_planner::StraightLineplanner to its idGridBased. To pass plugin-specific parameters, we have used<plugin_id>.<plugin_specific_parameter>.\n\n## 4- Run StraightLine plugin\uf0c1\n\nRun Turtlebot3 simulation with enabled navigation2. Detailed instruction how to make it are written atGetting Started. Below is shortcut command for that:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138124-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 3733, "chroma:document": "Then goto RViz and click on the \u201c2D Pose Estimate\u201d button at the top and point to the location on map as it was described inGetting Started. Robot will localize on the map and then click on \u201cNavigation2 goal\u201d and click on the pose where you want your planner to consider a goal pose. After that planner will plan the path and robot will start moving towards the goal.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: configure()\n\n```\n\nnode_\n\n=\n\nparent\n\n;\n\ntf_\n\n=\n\ntf\n\n;\n\nname_\n\n=\n\nname\n\n;\n\ncostmap_\n\n=\n\ncostmap_ros\n\n>\n\ngetCostmap\n\n();\n\nglobal_frame_\n\n=\n\ncostmap_ros\n\n>\n\ngetGlobalFrameID\n\n();\n\n// Parameter initialization\n\nnav2_util\n\n::\n\ndeclare_parameter_if_not_declared\n\n(\n\nnode_\n\n,\n\nname_\n\n+\n\n\".interpolation_resolution\"\n\n,\n\nrclcpp\n\n::\n\nParameterValue\n\n(\n\n0.1\n\n));\n\nnode_\n\n>\n\nget_parameter\n\n(\n\nname_\n\n+\n\n\".interpolation_resolution\"\n\n,\n\ninterpolation_resolution_\n\n);\n\n```\n\nLanguage: unknown\n\nFile: nav_msgs::msg::Path\n\n```\n\nnav_msgs\n\n::\n\nmsg\n\n::\n\nPath\n\nglobal_path\n\n;"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138142-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 4646, "chroma:document": "```\n\nnav_msgs\n\n::\n\nmsg\n\n::\n\nPath\n\nglobal_path\n\n;\n\n// Checking if the goal and start state is in the global frame\n\nif\n\n(\n\nstart\n\n.\n\nheader\n\n.\n\nframe_id\n\n!=\n\nglobal_frame_\n\n)\n\n{\n\nRCLCPP_ERROR\n\n(\n\nnode_\n\n>\n\nget_logger\n\n(),\n\n\"Planner will only except start position from %s frame\"\n\n,\n\nglobal_frame_\n\n.\n\nc_str\n\n());\n\nreturn\n\nglobal_path\n\n;\n\n}\n\nif\n\n(\n\ngoal\n\n.\n\nheader\n\n.\n\nframe_id\n\n!=\n\nglobal_frame_\n\n)\n\n{\n\nRCLCPP_INFO\n\n(\n\nnode_\n\n>\n\nget_logger\n\n(),\n\n\"Planner will only except goal position from %s frame\"\n\n,\n\nglobal_frame_\n\n.\n\nc_str\n\n());\n\nreturn\n\nglobal_path\n\n;\n\n}\n\nglobal_path\n\n.\n\nposes\n\n.\n\nclear\n\n();\n\nglobal_path\n\n.\n\nheader\n\n.\n\nstamp\n\n=\n\nnode_\n\n>\n\nnow\n\n();\n\nglobal_path\n\n.\n\nheader\n\n.\n\nframe_id\n\n=\n\nglobal_frame_\n\n;\n\n// calculating the number of loops for current value of interpolation_resolution_\n\nint\n\ntotal_number_of_loop\n\n=\n\nstd\n\n::\n\nhypot\n\n(\n\ngoal\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\n,\n\ngoal\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n)\n\n/\n\ninterpolation_resolution_\n\n;"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138156-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 5605, "chroma:document": ".\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n)\n\n/\n\ninterpolation_resolution_\n\n;\n\ndouble\n\nx_increment\n\n=\n\n(\n\ngoal\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\n)\n\n/\n\ntotal_number_of_loop\n\n;\n\ndouble\n\ny_increment\n\n=\n\n(\n\ngoal\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n)\n\n/\n\ntotal_number_of_loop\n\n;\n\nfor\n\n(\n\nint\n\ni\n\n=\n\n0\n\n;\n\ni\n\n<\n\ntotal_number_of_loop\n\n;\n\n++\n\ni\n\n)\n\n{\n\ngeometry_msgs\n\n::\n\nmsg\n\n::\n\nPoseStamped\n\npose\n\n;\n\npose\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\n=\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\n+\n\nx_increment\n\ni\n\n;\n\npose\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n=\n\nstart\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n+\n\ny_increment\n\ni\n\n;\n\npose\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nz\n\n=\n\n0.0\n\n;\n\npose\n\n.\n\npose\n\n.\n\norientation\n\n.\n\nx\n\n=\n\n0.0\n\n;\n\npose\n\n.\n\npose\n\n.\n\norientation\n\n.\n\ny\n\n=\n\n0.0\n\n;\n\npose\n\n.\n\npose\n\n.\n\norientation\n\n.\n\nz\n\n=\n\n0.0\n\n;\n\npose\n\n.\n\npose\n\n.\n\norientation\n\n.\n\nw\n\n=\n\n1.0\n\n;\n\npose\n\n.\n\nheader\n\n.\n\nstamp\n\n=\n\nnode_\n\n>\n\nnow\n\n();\n\npose\n\n.\n\nheader\n\n.\n\nframe_id\n\n=\n\nglobal_frame_\n\n;\n\nglobal_path\n\n.\n\nposes\n\n.\n\npush_back\n\n(\n\npose\n\n);\n\n}"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13816a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 6565, "chroma:document": ";\n\nglobal_path\n\n.\n\nposes\n\n.\n\npush_back\n\n(\n\npose\n\n);\n\n}\n\nglobal_path\n\n.\n\nposes\n\n.\n\npush_back\n\n(\n\ngoal\n\n);\n\nreturn\n\nglobal_path\n\n;\n\n```\n\nLanguage: unknown\n\nFile: nav2_core::GlobalPlanner\n\n```\n\n#include\n\n\"pluginlib/class_list_macros.hpp\"\n\nPLUGINLIB_EXPORT_CLASS\n\n(\n\nnav2_straightline_planner\n\n::\n\nStraightLine\n\n,\n\nnav2_core\n\n::\n\nGlobalPlanner\n\n)\n\n```\n\nLanguage: unknown\n\nFile: description\n\n```\n\n<library\n\npath=\n\n\"nav2_straightline_planner_plugin\"\n\n>\n\n<class\n\ntype=\n\n\"nav2_straightline_planner::StraightLine\"\n\nbase_class_type=\n\n\"nav2_core::GlobalPlanner\"\n\n>\n\n<description>\n\nThis\n\nis\n\nan\n\nexample\n\nplugin\n\nwhich\n\nproduces\n\nstraight\n\npath.\n\n</description>\n\n</class>\n\n</library>\n\n```\n\nLanguage: unknown\n\nFile: share\n\n```\n\npluginlib_export_plugin_description_file(nav2_core global_planner_plugin.xml)\n\n```\n\nLanguage: unknown\n\nFile: package.xml\n\n```\n\n<export>\n\n<build_type>\n\nament_cmake\n\n</build_type>\n\n<nav2_core\n\nplugin=\n\n\"${prefix}/global_planner_plugin.xml\"\n\n/>\n\n</export>\n\n```\n\nLanguage: unknown\n\nFile: plugin:MyPlugin::Plugin"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13817e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Planner Plugin\uf0c1.txt", "start_index": 7534, "chroma:document": "```\n\nLanguage: unknown\n\nFile: plugin:MyPlugin::Plugin\n\n```\n\nplanner_server:\n\nros__parameters:\n\nplugins: [\"GridBased\"]\n\nuse_sim_time: True\n\nGridBased:\n\nplugin: \"nav2_navfn_planner::NavfnPlanner\" # For Foxy and later. In Iron and older versions, \"/\" was used instead of \"::\"\n\ntolerance: 2.0\n\nuse_astar: false\n\nallow_unknown: true\n\n```\n\nLanguage: unknown\n\nFile: plugin:MyPlugin::Plugin\n\n```\n\nplanner_server:\n\nros__parameters:\n\nplugins: [\"GridBased\"]\n\nuse_sim_time: True\n\nGridBased:\n\nplugin: \"nav2_straightline_planner::StraightLine\"\n\ninterpolation_resolution: 0.1\n\n```\n\nLanguage: unknown\n\nFile: <plugin_id>.<plugin_specific_parameter>\n\n```\n\n$\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\nparams_file:\n\n=\n\n/path/to/your_params_file.yaml\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138192-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Denoise Layer Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Denoise Layer Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/denoise.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: <denoiselayer>\n\n```\n\nlocal_costmap\n\n:\n\nlocal_costmap\n\n:\n\nros__parameters\n\n:\n\n...\n\nplugins\n\n:\n\n[\n\n\"voxel_layer\"\n\n,\n\n\"denoise_layer\"\n\n,\n\n\"inflation_layer\"\n\n]\n\n...\n\ndenoise_layer\n\n:\n\nplugin\n\n:\n\n\"nav2_costmap_2d::DenoiseLayer\"\n\nenabled\n\n:\n\ntrue\n\nminimal_group_size\n\n:\n\n2\n\ngroup_connectivity_type\n\n:\n\n8\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1381a6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/WouldAControllerRecoveryHelp\uf0c1.txt", "start_index": 0, "chroma:document": "Title: WouldAControllerRecoveryHelp\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/WouldAControllerRecoveryHelp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Port\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: FAILURE\n\n```\n\n<WouldAControllerRecoveryHelp\n\nerror_code=\n\n\"{follow_path_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1381ba-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Regulated Pure Pursuit\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Regulated Pure Pursuit\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-regulated-pp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Regulated Pure Pursuit Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: true\n\n```\n\ncontroller_server\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\nTrue\n\ncontroller_frequency\n\n:\n\n20.0\n\nmin_x_velocity_threshold\n\n:\n\n0.001\n\nmin_y_velocity_threshold\n\n:\n\n0.5\n\nmin_theta_velocity_threshold\n\n:\n\n0.001\n\nprogress_checker_plugins\n\n:\n\n[\n\n\"progress_checker\"\n\n]\n\n# progress_checker_plugin: \"progress_checker\" For Humble and older\n\ngoal_checker_plugins\n\n:\n\n[\n\n\"goal_checker\"\n\n]\n\ncontroller_plugins\n\n:\n\n[\n\n\"FollowPath\"\n\n]\n\nprogress_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleProgressChecker\"\n\nrequired_movement_radius\n\n:\n\n0.5\n\nmovement_time_allowance\n\n:\n\n10.0\n\ngoal_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleGoalChecker\"\n\nxy_goal_tolerance\n\n:\n\n0.25\n\nyaw_goal_tolerance\n\n:\n\n0.25"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1381d8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Regulated Pure Pursuit\uf0c1.txt", "start_index": 963, "chroma:document": "xy_goal_tolerance\n\n:\n\n0.25\n\nyaw_goal_tolerance\n\n:\n\n0.25\n\nstateful\n\n:\n\nTrue\n\nFollowPath\n\n:\n\nplugin\n\n:\n\n\"nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController\"\n\ndesired_linear_vel\n\n:\n\n0.5\n\nlookahead_dist\n\n:\n\n0.6\n\nmin_lookahead_dist\n\n:\n\n0.3\n\nmax_lookahead_dist\n\n:\n\n0.9\n\nlookahead_time\n\n:\n\n1.5\n\nrotate_to_heading_angular_vel\n\n:\n\n1.8\n\ntransform_tolerance\n\n:\n\n0.1\n\nuse_velocity_scaled_lookahead_dist\n\n:\n\nfalse\n\nmin_approach_linear_velocity\n\n:\n\n0.05\n\napproach_velocity_scaling_dist\n\n:\n\n0.6\n\nuse_collision_detection\n\n:\n\ntrue\n\nmax_allowed_time_to_collision_up_to_carrot\n\n:\n\n1.0\n\nuse_regulated_linear_velocity_scaling\n\n:\n\ntrue\n\nuse_fixed_curvature_lookahead\n\n:\n\nfalse\n\ncurvature_lookahead_dist\n\n:\n\n0.25\n\nuse_cost_regulated_linear_velocity_scaling\n\n:\n\nfalse\n\nregulated_linear_scaling_min_radius\n\n:\n\n0.9\n\nregulated_linear_scaling_min_speed\n\n:\n\n0.25\n\nuse_rotate_to_heading\n\n:\n\ntrue\n\nallow_reversing\n\n:\n\nfalse\n\nrotate_to_heading_min_angle\n\n:\n\n0.785\n\nmax_angular_accel\n\n:\n\n3.2\n\nmax_robot_pose_search_dist\n\n:\n\n10.0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1381ec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/InputAtWaypoint\uf0c1.txt", "start_index": 0, "chroma:document": "Title: InputAtWaypoint\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/nav2_waypoint_follower\n\nplugins/input_at_waypoint.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <nav2_waypoint_followerplugin>: nav2_waypoint_follower plugin name defined in thewaypoint_task_executor_plugin_idparameter inWaypoint Follower."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138200-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/TimeExpired\uf0c1.txt", "start_index": 0, "chroma:document": "Title: TimeExpired\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/TimeExpired.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<TimeExpired\n\nseconds=\n\n\"1.0\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138214-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: (STVL) Using an External Costmap Plugin\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/navigation2_with_stvl.html#setup\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to load and use an external plugin.\n\nThis example uses theSpatio Temporal Voxel Layer(STVL) costmappluginlibplugin as an example.\n\nSTVL is a demonstrative pluginlib plugin and the same process can be followed for other costmap plugins as well as plugin planners, controllers, and behaviors.\n\nBefore completing this tutorial, please look at the previous two tutorials on navigation in simulation and physical hardware, if available.\n\nThis tutorial assumes knowledge of navigation and basic understanding of costmaps.\n\n## Costmap2D and STVL\uf0c1\n\nCostmap 2D is the data object we use to buffer sensor information into a global view that the robot will use to create plans and control efforts."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138228-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 970, "chroma:document": "Within Costmap2D, there are pluginlib plugin interfaces available to create custom behaviors loadable at runtime.\n\nExamples of included pluginlib plugins for Costmap2D are the Obstacle Layer, Voxel Layer, Static Layer, and Inflation Layer.\n\nHowever, these are simply example plugins offered by the base implementation.\n\nAnother available pluginlib plugin for Costmap2D in Navigation2 is STVL.\n\nSTVL is another 3D perception plugin similar to the Voxel Layer.\n\nA more detailed overview of how it works can be foundin this repo, however it buffers 3D data from depth cameras, sonars, lidars, and more into a sparse volumetic world model and removes voxels over time proportional with a sensor model and time-based expiration.\n\nThis can be especially useful for robots in highly dynamic environments and decreases the resource utilization for 3D sensor processing by up to 2x.\n\nSTVL also treats 3D lidars and radars as first class citizens for support.\n\nThe ROSCon talk for STVL can be foundin this video.\n\n## Tutorial Steps\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13823c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 1974, "chroma:document": "## Tutorial Steps\uf0c1\n\n## 0- Setup\uf0c1\n\nFollow the same process as inGetting Startedfor installing and setting up a robot for hardware testing or simulation, as applicable. Ensure ROS 2, Navigation2, and Gazebo are installed.\n\n## 1- Install STVL\uf0c1\n\nSTVL can be installed in ROS 2 via the ROS Build Farm:\n\nIt can also be built from source by cloning the repository into your Navigation2 workspace:\n\n## 1- Modify Navigation2 Parameter\uf0c1\n\nSTVL is an optional plugin, like all plugins, in Costmap2D. Costmap Plugins in Navigation2 are loaded in theplugin_namesandplugin_typesvariables inside of their respective costmaps.\n\nFor example, the following will load the static and obstacle layer plugins into the namestatic_layerandobstacle_layer, respectively:\n\nTo load the STVL plugin, a new plugin name and type must be added.\n\nFor example, if the application required an STVL layer and no obstacle layer, our file would be:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138250-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 2885, "chroma:document": "Similar to the Voxel Layer, after registering the plugin, we can add the configuration of the STVL layer under the namespacestvl_layer.\n\nAn example fully-described parameterization of an STVL configuration is:\n\nPlease copy-paste the text above, with theplugin_namesandplugin_typesregistration, into yournav2_params.yamlto enable STVL in your application.\n\nMake sure to change both the local and global costmaps.\n\nNote: Pluginlib plugins for other Navigation2 servers such as planning, behavior, and control can be set in this same way.\n\n## 2- Launch Navigation2\uf0c1\n\nFollow the same process as inGetting Startedto launch a simulated robot in gazebo with Navigation2.\n\nNavigation2 is now using STVL as its 3D sensing costmap layer.\n\n## 3-  RVIZ\uf0c1\n\nWith RViz open andpublish_voxel_map:true, you can visualize the underlying data structure\u2019s 3D grid using the{local,global}_costmap/voxel_gridtopics."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138264-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 3779, "chroma:document": "Note: It is recommended in RViz to set thePointCloud2Size to your voxel size and the style toBoxeswith a neutral color for best visualization.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: obstacle_layer\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\nTrue\n\nplugins\n\n:\n\n[\n\n\"static_layer\"\n\n,\n\n\"obstacle_layer\"\n\n]\n\n```\n\nLanguage: unknown\n\nFile: plugin:MyPlugin::Plugin\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\nTrue\n\nplugins\n\n:\n\n[\n\n\"static_layer\"\n\n,\n\n\"stvl_layer\"\n\n]\n\n```\n\nLanguage: unknown\n\nFile: stvl_layer\n\n```\n\nstvl_layer\n\n:\n\nplugin\n\n:\n\n\"spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer\"\n\nenabled\n\n:\n\ntrue\n\nvoxel_decay\n\n:\n\n15.\n\ndecay_model\n\n:\n\n0\n\nvoxel_size\n\n:\n\n0.05\n\ntrack_unknown_space\n\n:\n\ntrue\n\nunknown_threshold\n\n:\n\n15\n\nmark_threshold\n\n:\n\n0\n\nupdate_footprint_enabled\n\n:\n\ntrue\n\ncombination_method\n\n:\n\n1\n\norigin_z\n\n:\n\n0.0\n\npublish_voxel_map\n\n:\n\ntrue\n\ntransform_tolerance\n\n:\n\n0.2\n\nmapping_mode\n\n:\n\nfalse\n\nmap_save_duration\n\n:\n\n60.0"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138282-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/(STVL) Using an External Costmap Plugin\uf0c1.txt", "start_index": 4727, "chroma:document": ":\n\n0.2\n\nmapping_mode\n\n:\n\nfalse\n\nmap_save_duration\n\n:\n\n60.0\n\nobservation_sources\n\n:\n\npointcloud\n\npointcloud\n\n:\n\ndata_type\n\n:\n\nPointCloud2\n\ntopic\n\n:\n\n/intel_realsense_r200_depth/points\n\nmarking\n\n:\n\ntrue\n\nclearing\n\n:\n\ntrue\n\nobstacle_range\n\n:\n\n3.0\n\nmin_obstacle_height\n\n:\n\n0.0\n\nmax_obstacle_height\n\n:\n\n2.0\n\nexpected_update_rate\n\n:\n\n0.0\n\nobservation_persistence\n\n:\n\n0.0\n\ninf_is_valid\n\n:\n\nfalse\n\nfilter\n\n:\n\n\"voxel\"\n\nvoxel_min_points\n\n:\n\n0\n\nclear_after_reading\n\n:\n\ntrue\n\nmax_z\n\n:\n\n7.0\n\nmin_z\n\n:\n\n0.1\n\nvertical_fov_angle\n\n:\n\n0.8745\n\nhorizontal_fov_angle\n\n:\n\n1.048\n\ndecay_acceleration\n\n:\n\n15.0\n\nmodel_type\n\n:\n\n0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138296-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/CancelControl\uf0c1.txt", "start_index": 0, "chroma:document": "Title: CancelControl\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/CancelControl.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: server_name\n\n```\n\n<CancelControl\n\nserver_name=\n\n\"FollowPath\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1382aa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/CancelBackUp\uf0c1.txt", "start_index": 0, "chroma:document": "Title: CancelBackUp\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/CancelBackUp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: backup\n\n```\n\n<CancelBackUp\n\nserver_name=\n\n\"BackUp\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1382be-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac Planner\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Smac Planner\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nsmac\n\nplanner.html#provided\n\nplugins\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Provided Plugins\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1382dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac Planner\uf0c1.txt", "start_index": 264, "chroma:document": "## Description\uf0c1 Thenav2_smac_plannerpackage contains an optimized templated A* search algorithm used to create multiple A*-based planners for multiple types of robot platforms. It uses template node types to develop different search-based planners. We support circular differential-drive and omni-directional drive robots using theSmacPlanner2Dplanner which implements a cost-aware A* planner. We support car-like (ackermann) and legged vehicles using theSmacPlannerHybridplugin which implements a Hybrid-A* planner. We support non-circular, arbitrary shaped, any model vehicles using theSmacPlannerLatticeplugin which implements a State Lattice planner (e.g. omni, diff, ackermann, legged, custom). It contains control sets and generators for ackermann, legged, differential drive and omnidirectional vehicles, but you may provide your own for another robot type or to have different planning behaviors. The last two plugins are bothkinematically feasibleand supportreversing. They have performance similar to its 2D"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1382f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smac Planner\uf0c1.txt", "start_index": 1224, "chroma:document": "supportreversing. They have performance similar to its 2D counter parts like 2D-A* and NavFn via highly optimized heuristic functions and efficient programming. An example of the 3 planners can be seen below, planning a roughly 75 m path. Usual planning times are below 100ms for some environments, occasionally approaching up to 200ms. The performance of all 3 planners is roughly comparable with naive 2D search algorithms that have long been mainstays of the ROS Navigation ecosystem, but also achieving kinematic feasibility, support for reversing, and using modern state of the art techniques."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13830e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/General Tutorials\uf0c1.txt", "start_index": 0, "chroma:document": "Title: General Tutorials\uf0c1\n\nURL: https://docs.nav2.org/tutorials/index.html\n\nSection: tutorials/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138322-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Constrained smoother\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Constrained smoother\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-constrained-smoother.html#smoother-server-parameters\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Smoother Server Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: DENSE_QR\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\nTrue\n\nsmoother_plugins\n\n:\n\n[\n\n\"SmoothPath\"\n\n]\n\nSmoothPath\n\n:\n\nplugin\n\n:\n\n\"nav2_constrained_smoother/ConstrainedSmoother\"\n\nreversing_enabled\n\n:\n\ntrue\n\n# whether to detect forward/reverse direction and cusps. Should be set to false for paths without orientations assigned\n\npath_downsampling_factor\n\n:\n\n3\n\n# every n-th node of the path is taken. Useful for speed-up\n\npath_upsampling_factor\n\n:\n\n1\n\n# 0 - path remains downsampled, 1 - path is upsampled back to original granularity using cubic bezier, 2... - more upsampling\n\nkeep_start_orientation\n\n:\n\ntrue"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138336-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Constrained smoother\uf0c1.txt", "start_index": 944, "chroma:document": "keep_start_orientation\n\n:\n\ntrue\n\n# whether to prevent the start orientation from being smoothed\n\nkeep_goal_orientation\n\n:\n\ntrue\n\n# whether to prevent the gpal orientation from being smoothed\n\nminimum_turning_radius\n\n:\n\n0.40\n\n# minimum turning radius the robot can perform. Can be set to 0.0 (or w_curve can be set to 0.0 with the same effect) for diff-drive/holonomic robots\n\nw_curve\n\n:\n\n30.0\n\n# weight to enforce minimum_turning_radius\n\nw_dist\n\n:\n\n0.0\n\n# weight to bind path to original as optional replacement for cost weight\n\nw_smooth\n\n:\n\n2000000.0\n\n# weight to maximize smoothness of path\n\nw_cost\n\n:\n\n0.015\n\n# weight to steer robot away from collision and cost\n\n# Parameters used to improve obstacle avoidance near cusps (forward/reverse movement changes)\n\nw_cost_cusp_multiplier\n\n:\n\n3.0\n\n# option to use higher weight during forward/reverse direction change which is often accompanied with dangerous rotations\n\ncusp_zone_length\n\n:\n\n2.5"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138354-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Constrained smoother\uf0c1.txt", "start_index": 1860, "chroma:document": "cusp_zone_length\n\n:\n\n2.5\n\n# length of the section around cusp in which nodes use w_cost_cusp_multiplier (w_cost rises gradually inside the zone towards the cusp point, whose costmap weight eqals w_cost*w_cost_cusp_multiplier)\n\n# Points in robot frame to grab costmap values from. Format: [x1, y1, weight1, x2, y2, weight2, ...]\n\n# IMPORTANT: Requires much higher number of iterations to actually improve the path. Uncomment only if you really need it (highly elongated/asymmetric robots)\n\n# cost_check_points: [-0.185, 0.0, 1.0]\n\noptimizer\n\n:\n\nmax_iterations\n\n:\n\n70\n\n# max iterations of smoother\n\ndebug_optimizer\n\n:\n\nfalse\n\n# print debug info\n\ngradient_tol\n\n:\n\n5e3\n\nfn_tol\n\n:\n\n1.0e-15\n\nparam_tol\n\n:\n\n1.0e-20\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138368-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Static Layer Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Static Layer Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/static.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13837c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ReinitializeGlobalLocalization\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ReinitializeGlobalLocalization\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ReinitializeGlobalLocalization.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<ReinitializeGlobalLocalization\n\nservice_name=\n\n\"reinitialize_global_localization\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138390-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/CancelWait\uf0c1.txt", "start_index": 0, "chroma:document": "Title: CancelWait\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/CancelWait.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: wait\n\n```\n\n<CancelWait\n\nserver_name=\n\n\"Wait\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1383ae-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ObstacleFootprintCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ObstacleFootprintCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/obstacle_footprint.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: ObstacleFootprintCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1383c2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/IsStuck\uf0c1.txt", "start_index": 0, "chroma:document": "Title: IsStuck\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/IsStuck.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<IsStuck/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1383d6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Spin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Spin\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/Spin.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: Spin\n\n```\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\nserver_name=\n\n\"spin\"\n\nserver_timeout=\n\n\"10\"\n\nis_recovery=\n\n\"true\"\n\nerror_code_id=\n\n\"{spin_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1383ea-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Velocity Smoother\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Velocity Smoother\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-velocity-smoother.html#velocity-smoother-parameters\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Velocity Smoother Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: TwistStamped\n\n```\n\nvelocity_smoother\n\n:\n\nros__parameters\n\n:\n\nsmoothing_frequency\n\n:\n\n20.0\n\nscale_velocities\n\n:\n\nfalse\n\nfeedback\n\n:\n\n\"OPEN_LOOP\"\n\nmax_velocity\n\n:\n\n[\n\n0.5\n\n,\n\n0.0\n\n,\n\n2.5\n\n]\n\nmin_velocity\n\n:\n\n[\n\n0.5\n\n,\n\n0.0\n\n,\n\n2.5\n\n]\n\ndeadband_velocity\n\n:\n\n[\n\n0.0\n\n,\n\n0.0\n\n,\n\n0.0\n\n]\n\nvelocity_timeout\n\n:\n\n1.0\n\nmax_accel\n\n:\n\n[\n\n2.5\n\n,\n\n0.0\n\n,\n\n3.2\n\n]\n\nmax_decel\n\n:\n\n[\n\n2.5\n\n,\n\n0.0\n\n,\n\n3.2\n\n]\n\nodom_topic\n\n:\n\n\"odom\"\n\nodom_duration\n\n:\n\n0.1\n\nuse_realtime_priority\n\n:\n\nfalse\n\nenable_stamped_cmd_vel\n\n:\n\nfalse\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1383fe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Using Docking Server\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/using_docking.html#overview\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to use the Docking Server with Nav2 robot systems.\n\nThe Docking Server is a general framework which can be used with arbitrary types of robots and docks in order to auto-dock them.\n\nThis is accomplished via pluginsChargingDockandNonChargingDockwhich implement the dock specifics like detecting the pose of the dock using sensor data, how to detect when the robot is in contact with the dock, and when charging has successfully started.\n\nA configuration of the docking server can contain a database of many docks of different pluginChargingDockandNonChargingDocktypes to handle a broad range of docking locations and hardware dock revisions."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138412-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 900, "chroma:document": "Included with the package is an exampleSimpleChargingDockandSimpleNonChargingDockplugins which contains features and methods very common for robot docking.\n\nThese support charging stations and docking with static infrastructure (ex. conveyor belts) or dynamic docking (ex pallets) locations.\n\nIt is likely that you may be able to use this as well rather than developing your own dock plugin to get started.\n\nThe docking procedure is as follows:\n\nThanks to NVIDIA for sponsoring this Docking Server package and this tutorial!\n\nYou can find how to dock your Nova Carter robot using Nav2 and this work in thenova_carter_docking package!\n\n## Requirements\uf0c1\n\nIt is assumed ROS2 and Nav2 dependent packages are installed or built locally - includingopennav_docking.\n\nPlease make sure that Nav2 project is also built locally, seeBuild and Installfor reference.\n\nSeeopennav_dockingREADME for complete concept explanations, parameters, and APIs.\n\n## ChargingDock Plugins\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138426-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 1837, "chroma:document": "## ChargingDock Plugins\uf0c1\n\nopennav_docking_core::ChargingDockandopennav_docking_core::ChargingDockplugins are established to abstract out robot- and dock-specifics from the generalized framework.\n\nThis allows a system to leverage this framework and provide its own methods for detecting the dock\u2019s current pose, when the robot is charging, and when contact is made.\n\nLuckily, there are several common ROS APIs that allow us to create semi-generalizedSimpleChargingDockandSimpleNonChargingDockplugins that allows out-of-the-box docking as long as users provideJointState,BatteryState, and detected dock posePoseStampedtopics.\n\nHowever, one way or another, your system requires an applicableChargingDockorNonChargingDockplugin for each type of dock you wish to use.\n\nThe plugins has a few key APIs:\n\nTheSimpleChargingDockprovides an implementation with common options for these APIs:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13843a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 2719, "chroma:document": "Thus, for testing (no detection, no battery information, no joint state information) and realistic application (dock detection, battery status information, joint state information), this dock plugin can be used.\n\nIt can also be used when only some of the information if available as well.\n\nIf your robot or dock does not fall into these implementations (i.e. using custom battery or detection messages that cannot be converted into ROS standard types), then you may be required to build your own plugin to meet your particular needs.\n\nHowever, you can use theSimpleChargingDockassuming you turn off these settings and dock blind to get started.\n\nThere is an equivalentSimpleNonChargingDockplugin for non-charging docking needs.\n\nIf you do not currently have a way to detect your dock, dock detection can be done easily using Apriltags and theisaac_ros_apriltagorROS image_procnodes to get started.\n\nUse the Isaac ROS if using a Jetson platform to obtain a GPU optimized pipeline with your camera feeds."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138458-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 3723, "chroma:document": "The defaults support this out of the box, seenova_carter_dockingfor an example.\n\n## Dock Database\uf0c1\n\nTo dock your robot, you must provide the set of docks in your environment you\u2019d like to utilize.\n\nThis is done in the docking server via theDock Databasewhich contains the set of docks, their instance types, and a set of shared plugins.\n\nThe plugins are separated from the dock instances so that many instances can share the same plugin to save on memory and networking overhead when potentially dozens or more docks exist in a space.\n\nThe docks plugins must be provided in your docking server\u2019s configuration file.\n\nHowever, the dock instance may be provided either in the configuration fileorwithin a provided filepath to decouple the server\u2019s configuration from a particular application environment."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13846c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 4527, "chroma:document": "The example below shows an inline configuration of the docking plugins and dock instances where one dock type (nova_carter_dock) is specified with 3 individual instances: a home dock, and 2 general shared fallback docks.\n\nThe docks can be specified as[x,y,theta]in any reference frame you like, as long as TF is aware of them.\n\nPlease update these with your own docking plugin and dock locations in your map.\n\nThe analog of this is shown below as an independentdock_database.yamlwhich can be provided to thedocking_servervia thedock_databaseparameter.\n\nNote that you are required to provide at least 1 dock plugin and 1 dock instance.\n\nThe Docking Server\u2019s Action API can take in a dock\u2019s instance information separately to bypass the database, but its plugin must exist in the server\u2019s configuration.\n\nIf you plan to only use this API, you can set adummy_dock."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138480-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 5330, "chroma:document": "If you plan to only use this API, you can set adummy_dock.\n\nGenerally speaking, its wise to set your docks in the database and use the Docking Server\u2019s API to dock at an instance\u2019s Dock ID to decouple the semantic information about docks from the action request (requiring your application instead to have all of the docks\u2019 locations), but bypassing the database can be useful for testing and movable docking targets.\n\nThe dock poses in the map can be annotated using your favorite map editing tools, obtained by/clicked_pointin rviz2, or measured location.\n\n## Configuring Docking Server\uf0c1\n\nNow that we have both a plugin for interacting with a dock and specified the locations of docks in your map, we\u2019re ready to configure the docking server.\n\nFor this example, we\u2019re going to use the Nvidia-Segway Nova Carter Robot and you can find the source code of this demo in thenova_carter_dockingpackage.\n\nFor a full list of parameters and their descriptions, check out theDocking Server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138494-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 6314, "chroma:document": "Below is an example configuration used by the Nova Carter robot.\n\nNotable is the setting of thefixed_frametoodom, notmapin order to decouple localization error from the docking procedure.\n\nWe also use one dock pluginnova_carter_dockfor allNdocks specified in thedock_databasefile.\n\nThe simple charging dock plugin uses a 70cm staging offset from the dock\u2019s database pose for staging.\n\nThis staging pose is selected as close enough to detect the dock but far enough away to give maneuvering space to account for expected dock movement or localization error.\n\nSinceuse_stall_detectionfor theJointStatesisfalse, we are considered successfully docked once we\u2019re withindocking_threshold(5cm) to the docking pose.\n\nThis docking pose is specified as the detected pose with theexternal_detection_*offsets applied to account for the robot\u2019s intended docking pose relative to the detected feature."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1384a8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 7203, "chroma:document": "In this example, Apriltags are used, so we apply the rotations to the Apriltag detected frame and a-0.18translational offset to account for the pose the robot should be in when docked relative to the tag\u2019s pose.\n\nSinceuse_external_detection_poseanduse_battery_statusare both enabled, we use both detected dock poses (apriltag) and battery state information for determining if we\u2019re charging.\n\nThe maximum speed is 15 cm/s to slowly and carefully back into the dock and we\u2019ll retry docking 3x in case charging is not detected or we lose detected dock tracks during the attempt.\n\n## Adding Docking Server to Launch\uf0c1\n\nThis server can now be added to your launch file with the path to this parameter file for use (or added to your main shared configuration file).\n\n## Docking Action API\uf0c1\n\nThe API for docking and undocking is comparatively simple.\n\nTheDockRobotaction consists of two main modalities: using the dock database or specifying a dock to use in the action."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1384bc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 8168, "chroma:document": "If using the database, setuse_dock_id=True(default) and you only need to specify thedock_idyou wish to use, such ashome_dock,flex_dock1, or whatever dock instance you like.\n\nIf bypassing the database,use_dock_idmust be set to false anddock_pose,dock_typemust be fully specified to make up for the lack of entry metadata in the database.\n\nThis requires the action caller to know about all of the docks, rather than pushing that into the Docking Server\u2019s database, which is not recommended.\n\nOptionally, you can disable using Nav2 to navigate to the staging pose if outside of the pre-staging tolerance usingnavigate_to_staging_pose=Falseor set the maximum time for staging navigationmax_staging_time.\n\nIn result, you obtain if the action was successful, if it wasn\u2019t what the error code was, and the total number of retries attempted."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1384d0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 9003, "chroma:document": "During execution, feedback is provided on the current docking state - which is published irregularly only when an event occurs. It contains the state, the current total elapsed duration of attempted docking, and the current number of retries.\n\nThe feedback can be obtained from your action client if this information is useful to your application.\n\nTheUndockRobotaction is even simpler. There are no required goal fields exceptdock_typeif undocking is being called when the server\u2019s instance did not dock the robot to store its current state information (such as after a restart on the dock).\n\nIt contains no feedback and returns thesuccessstate and theerror_codeif a problem occurs.\n\n## Putting It All Together\uf0c1\n\nAt this point, if you haven\u2019t already, create your dock plugin (or useSimpleChargingDock), configuration file, and launch file - along with any other nodes required like apriltags or other detectors."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1384e4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 9918, "chroma:document": "You can see an example package used in this tutorial in thenova_carter_dockingpackage, which contains a configuration file and launch file containing the apriltags detector andPoseStampedpose publisher.\n\nIf you\u2019re interested in using Apriltags and an Nvidia Jetson, you can find the tags we used in themedia/directory and the launch fileisaac_apriltag_detection_pipeline.launch.pywhich sets it all up for you.\n\nIf not using the Jetson, you can replace the Isaac ROS apriltag detector withimage_proc.\n\nWe can test this using the scriptdemo.pyinnova_carter_docking\u2019s root directory.\n\nIt will set the robot\u2019s pose as virtually the dock\u2019s staging pose to bypass navigating to the staging pose and attempt docking immediately, then infinitely loop docking and undocking in a row.\n\nThis is a useful first-time setup to try docking, refine your detection offsets, and obtain reliability metrics of your complete system.\n\nSee the video below of this all at work!\n\nNote that the robot is able to overcome:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1384f8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 10874, "chroma:document": "Note that the robot is able to overcome:\n\nThis script demonstrates the essential use of the Docking Server.\n\nHowever, it does not use the dock database of pre-mapped dock locations that you setup.\n\nAfter you launch Nav2 and localize your robot in your map, we can adjustdockRobot()to take in your desireddock_idand perform docking instead:\n\nThen, we can see the full docking system in action in a non-trivial environment!\n\nDepending on your robot\u2019s relative pose to the dock and your pre-staging tolerance settings, Nav2 may attempt to navigate to the staging pose before docking.\n\nIf you wish to disable that, setgoal_msg.navigate_to_staging_pose=Falseand then Docking will trigger immediately.\n\nYou can see both of these in action in the video above."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138516-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 11571, "chroma:document": "You can see both of these in action in the video above.\n\nDon\u2019t want to call Docking Server from a script Python or C++ script and want to use it in your Autonomous Behavior Tree? Seeopennav_docking_btforDockRobot,UndockRobotBehavior Tree nodes to call the Docking Server from your application behavior tree \u2013 with a providedXMLexample.\n\nNote that if usingnavigate_to_staging_pose=True, you cannot callDockRobotfrom inside a Nav2 Behavior Tree, only from your higher level autonomy tree since it recursively calls Nav2.\n\nIf you wish to callDockRobotfrom inside your Nav2 BT, you must roughly pre-stage the robot near the dock first (which should be easy as a navigation goal).\n\nHowever, you can always callUndockRobotfrom any behavior tree!\n\nHappy docking!\n\nCode Examples:\n\nLanguage: unknown\n\nFile: [x,y,theta]\n\n```\n\ndocking_server\n\n:\n\nros__parameters\n\n:\n\n# Types of docks\n\ndock_plugins\n\n:\n\n[\n\n'nova_carter_dock'\n\n]\n\nnova_carter_dock\n\n:\n\nplugin\n\n:\n\n'opennav_docking::SimpleChargingDock'"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13852a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 12505, "chroma:document": ":\n\nplugin\n\n:\n\n'opennav_docking::SimpleChargingDock'\n\n# More parameters exist here that we will discuss later in the tutorial\n\n# Dock instances\n\ndocks\n\n:\n\n[\n\n'home_dock'\n\n,\n\n'flex_dock1'\n\n,\n\n'flex_dock2'\n\n]\n\nhome_dock\n\n:\n\ntype\n\n:\n\n'nova_carter_dock'\n\nframe\n\n:\n\nmap\n\npose\n\n:\n\n[\n\n0.0\n\n,\n\n0.0\n\n,\n\n0.0\n\n]\n\nflex_dock1\n\n:\n\ntype\n\n:\n\n'nova_carter_dock'\n\nframe\n\n:\n\nmap\n\npose\n\n:\n\n[\n\n10.0\n\n,\n\n10.0\n\n,\n\n0.0\n\n]\n\nflex_dock2\n\n:\n\ntype\n\n:\n\n'nova_carter_dock'\n\nframe\n\n:\n\nmap\n\npose\n\n:\n\n[\n\n30.0\n\n,\n\n30.0\n\n,\n\n0.0\n\n]\n\n# Or use\n\n# dock_database: /my/path/to/dock_database.yaml\n\n```\n\nLanguage: unknown\n\nFile: dock_database\n\n```\n\ndocks\n\n:\n\nhome_dock\n\n:\n\ntype\n\n:\n\n\"nova_carter_dock\"\n\nframe\n\n:\n\n\"map\"\n\npose\n\n:\n\n[\n\n0.0\n\n,\n\n0.0\n\n,\n\n0.0\n\n]\n\nflex_dock1\n\n:\n\ntype\n\n:\n\n\"nova_carter_dock\"\n\nframe\n\n:\n\n\"map\"\n\npose\n\n:\n\n[\n\n10.0\n\n,\n\n10.0\n\n,\n\n0.0\n\n]\n\nflex_dock2\n\n:\n\ntype\n\n:\n\n\"nova_carter_dock\"\n\nframe\n\n:\n\n\"map\"\n\npose\n\n:\n\n[\n\n20.0\n\n,\n\n20.0\n\n,\n\n0.0\n\n]\n\n```\n\nLanguage: unknown\n\nFile: use_battery_status\n\n```\n\ndocking_server\n\n:\n\nros__parameters\n\n:\n\ncontroller_frequency"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13853e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 13468, "chroma:document": "docking_server\n\n:\n\nros__parameters\n\n:\n\ncontroller_frequency\n\n:\n\n50.0\n\ninitial_perception_timeout\n\n:\n\n5.0\n\nwait_charge_timeout\n\n:\n\n5.0\n\ndock_approach_timeout\n\n:\n\n30.0\n\nundock_linear_tolerance\n\n:\n\n0.05\n\nundock_angular_tolerance\n\n:\n\n0.1\n\nmax_retries\n\n:\n\n3\n\nbase_frame\n\n:\n\n\"base_link\"\n\nfixed_frame\n\n:\n\n\"odom\"\n\ndock_backwards\n\n:\n\nfalse\n\ndock_prestaging_tolerance\n\n:\n\n0.5\n\n# Types of docks\n\ndock_plugins\n\n:\n\n[\n\n'nova_carter_dock'\n\n]\n\nnova_carter_dock\n\n:\n\nplugin\n\n:\n\n'opennav_docking::SimpleChargingDock'\n\ndocking_threshold\n\n:\n\n0.05\n\nstaging_x_offset\n\n:\n\n0.7\n\nuse_external_detection_pose\n\n:\n\ntrue\n\nuse_battery_status\n\n:\n\ntrue\n\nuse_stall_detection\n\n:\n\nfalse\n\nexternal_detection_timeout\n\n:\n\n1.0\n\nexternal_detection_translation_x\n\n:\n\n0.18\n\nexternal_detection_translation_y\n\n:\n\n0.0\n\nexternal_detection_rotation_roll\n\n:\n\n1.57\n\nexternal_detection_rotation_pitch\n\n:\n\n1.57\n\nexternal_detection_rotation_yaw\n\n:\n\n0.0\n\nfilter_coef\n\n:\n\n0.1\n\n# Sep. file of dock instances so config file can be used in multiple locations\n\ndock_database\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138552-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 14469, "chroma:document": "dock_database\n\n:\n\n/my/path/to/dock_database.yaml\n\ncontroller\n\n:\n\nk_phi\n\n:\n\n3.0\n\nk_delta\n\n:\n\n2.0\n\nv_linear_min\n\n:\n\n0.15\n\nv_linear_max\n\n:\n\n0.15\n\n```\n\nLanguage: unknown\n\nFile: use_battery_status\n\n```\n\nnova_carter_dock_params_dir\n\n=\n\nos\n\n.\n\npath\n\n.\n\njoin\n\n(\n\nget_package_share_directory\n\n(\n\n'nova_carter_docking'\n\n),\n\n'params'\n\n)\n\nparams_file\n\n=\n\ndefault_value\n\n=\n\nos\n\n.\n\npath\n\n.\n\njoin\n\n(\n\nnova_carter_dock_params_dir\n\n,\n\n'nova_carter_docking.yaml'\n\n)\n\ndocking_server\n\n=\n\nNode\n\n(\n\npackage\n\n=\n\n'opennav_docking'\n\n,\n\nexecutable\n\n=\n\n'opennav_docking'\n\n,\n\nname\n\n=\n\n'docking_server'\n\n,\n\noutput\n\n=\n\n'screen'\n\n,\n\nparameters\n\n=\n\n[\n\nparams_file\n\n],\n\n)\n\n```\n\nLanguage: unknown\n\nFile: max_staging_time\n\n```\n\n#goal definition\n\nbool\n\nuse_dock_id\n\nTrue\n\n# Whether to use the dock_id or dock_pose fields\n\nstring\n\ndock_id\n\n# Dock name or ID to dock at, from given dock database\n\ngeometry_msgs/PoseStamped\n\ndock_pose\n\n# Dock pose\n\nstring\n\ndock_type\n\n# If using dock_pose, what type of dock it is. Not necessary if only using one type of dock."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138570-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 15492, "chroma:document": "float32\n\nmax_staging_time\n\n1000\n\n.0\n\n# Maximum time for navigation to get to the dock's staging pose.\n\nbool\n\nnavigate_to_staging_pose\n\nTrue\n\n# Whether or not to navigate to staging pose or assume robot is already at staging pose within tolerance to execute behavior\n\n---\n\n#result definition\n\nbool\n\nsuccess\n\nTrue\n\n# docking success status\n\nuint16\n\nerror_code\n\n0\n\n# Contextual error code, if any\n\nuint16\n\nnum_retries\n\n0\n\n# Number of retries attempted\n\n---\n\n#feedback definition\n\nuint16\n\nstate\n\n# Current docking state\n\nbuiltin_interfaces/Duration\n\ndocking_time\n\n# Docking time elapsed\n\nuint16\n\nnum_retries\n\n0\n\n# Number of retries attempted\n\n```\n\nLanguage: unknown\n\nFile: error_code\n\n```\n\n#goal definition\n\nstring\n\ndock_type\n\nfloat32\n\nmax_undocking_time\n\n30\n\n.0\n\n# Maximum time to undock\n\n---\n\n#result definition\n\nbool\n\nsuccess\n\nTrue\n\n# docking success status\n\nuint16\n\nerror_code\n\n0\n\n# Contextual error code, if any\n\n---\n\n#feedback definition\n\n```\n\nLanguage: unknown\n\nFile: dock_id\n\n```\n\ndef\n\ndockRobot\n\n(\n\nself\n\n,\n\ndock_id"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138584-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 16457, "chroma:document": "File: dock_id\n\n```\n\ndef\n\ndockRobot\n\n(\n\nself\n\n,\n\ndock_id\n\n=\n\n\"\"\n\n):\n\n\"\"\"Send a `DockRobot` action request.\"\"\"\n\nprint\n\n(\n\n\"Waiting for 'DockRobot' action server\"\n\n)\n\nwhile\n\nnot\n\nself\n\n.\n\ndocking_client\n\n.\n\nwait_for_server\n\n(\n\ntimeout_sec\n\n=\n\n1.0\n\n):\n\nprint\n\n(\n\n'\"DockRobot\" action server not available, waiting...'\n\n)\n\ngoal_msg\n\n=\n\nDockRobot\n\n.\n\nGoal\n\n()\n\ngoal_msg\n\n.\n\nuse_dock_id\n\n=\n\nTrue\n\ngoal_msg\n\n.\n\ndock_id\n\n=\n\ndock_id\n\n# if wanting to use ID instead\n\nprint\n\n(\n\n'Docking at ID: '\n\n+\n\nstr\n\n(\n\ndock_id\n\n)\n\n+\n\n'...'\n\n)\n\nsend_goal_future\n\n=\n\nself\n\n.\n\ndocking_client\n\n.\n\nsend_goal_async\n\n(\n\ngoal_msg\n\n,\n\nself\n\n.\n\n_feedbackCallback\n\n)\n\nrclpy\n\n.\n\nspin_until_future_complete\n\n(\n\nself\n\n,\n\nsend_goal_future\n\n)\n\nself\n\n.\n\ngoal_handle\n\n=\n\nsend_goal_future\n\n.\n\nresult\n\n()\n\nif\n\nnot\n\nself\n\n.\n\ngoal_handle\n\n.\n\naccepted\n\n:\n\nprint\n\n(\n\n'Docking request was rejected!'\n\n)\n\nreturn\n\nFalse\n\nself\n\n.\n\nresult_future\n\n=\n\nself\n\n.\n\ngoal_handle\n\n.\n\nget_result_async\n\n()\n\nreturn\n\nTrue\n\n...\n\ndock_id\n\n=\n\n'home_dock'\n\ntester\n\n.\n\ndockRobot\n\n(\n\ndock_id"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138598-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using Docking Server\uf0c1.txt", "start_index": 17415, "chroma:document": "...\n\ndock_id\n\n=\n\n'home_dock'\n\ntester\n\n.\n\ndockRobot\n\n(\n\ndock_id\n\n)\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1385ac-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Robots Using\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Robots Using\uf0c1\n\nURL: https://docs.nav2.org/about/robots.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1385ca-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/RateController\uf0c1.txt", "start_index": 0, "chroma:document": "Title: RateController\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/decorators/RateController.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: GoalReached\n\n```\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</RateController>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1385de-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with a Physical Turtlebot 3\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigating with a Physical Turtlebot 3\uf0c1 URL: https://docs.nav2.org/tutorials/docs/navigation2_on_real_turtlebot3.html#requirements Section: getting_started/index.html --------------------------------------------------------------------------------\n\n## Overview\uf0c1 This tutorial shows how to control and navigate Turtlebot 3 using the ROS 2 Nav2 on a physical Turtlebot 3 robot. Before completing this tutorials, completingGetting Startedis highly recommended especially if you are new to ROS and Nav2. This tutorial may take about 1 hour to complete. It depends on your experience with ROS, robots, and what computer system you have.\n\n## Requirements\uf0c1 You must install Nav2, Turtlebot3. If you don\u2019t have them installed, please followGetting Started. The turtlebot3 software can be installed via the following or on theturtlebot3 repository:\n\n## Tutorial Steps\uf0c1\n\n## 0- Setup Your Environment Variables\uf0c1 Run the following commands first whenever you open a new terminal during this tutorial."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1385f2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with a Physical Turtlebot 3\uf0c1.txt", "start_index": 997, "chroma:document": "## 1- Launch Turtlebot 3\uf0c1 You will need to launch your robot\u2019s interface, for example:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138606-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with a Physical Turtlebot 3\uf0c1.txt", "start_index": 1085, "chroma:document": "## 2- Launch Nav2\uf0c1 You need to have a map of the environment where you want to Navigate Turtlebot 3, or create one live with SLAM. In case you are interested, there is a use case tutorial which shows how to use Nav2 with SLAM.(SLAM) Navigating While Mapping. Required files: <your_map>.yamlis the configuration file for the map we want to provide Nav2. In this case, it has the map resolution value, threshold values for obstacles and free spaces, and a map file location. You need to make sure these values are correct. More information about the map.yaml can be foundhere. Launch Nav2. If you set autostart:=False, you need to click on the start button in RViz to initialize the nodes. Make sureuse_sim timeis set toFalse, because we want to use the system time instead of the time simulation time from Gazebo. ros2launchnav2_bringupbringup_launch.pyuse_sim_time:=Falseautostart:=Falsemap:=/path/to/your-map.yaml Note: Don\u2019t forget to change/path/to/your-map.yamlto the actual path to the your-map.yaml file."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13861a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with a Physical Turtlebot 3\uf0c1.txt", "start_index": 2097, "chroma:document": "## 3-  Launch RVIZ\uf0c1 Launch RVIZ with a pre-defined configuration file. Now, you should see a shadow of Turtlebot 3 robot model in the center of the plot in Rviz. Click on the Start button (Bottom Left) if you set the auto_start parameter to false. Then, the map should appear in RViz.\n\n## 4- Initialize the Location of Turtlebot 3\uf0c1 First, find where the robot is on the map. Check where your robot is in the room. Set the pose of the robot in RViz. Click on the 2D Pose Estimate button and point the location of the robot on the map. The direction of the green arrow is the orientation of Turtlebot. Now, the 3D model of Turtlebot should move to that location. A small error in the estimated location is tolerable."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13862e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with a Physical Turtlebot 3\uf0c1.txt", "start_index": 2813, "chroma:document": "## 5-  Send a Goal Pose\uf0c1 Pick a target location for Turtlebot on the map. You can send Turtlebot 3 a goal position and a goal orientation by using theNav2 Goalor theGoalToolbuttons. Note: Nav2 Goal button uses a ROS 2 Action to send the goal and the GoalTool publishes the goal to a topic. Once you define the target pose,  Nav2 will find a global path and start navigating the robot on the map. Now, you can see that Turtlebot 3 moves towards the goal position in the room. See the video below.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsudo\n\napt\n\ninstall\n\nros\n\n<ros2\n\ndistro>\n\nturtlebot3\n\nros\n\n<ros2\n\ndistro>\n\nturtlebot3\n\nmsgs\n\nros\n\n<ros2\n\ndistro>\n\nturtlebot3\n\nbringup\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138642-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/PathAlignCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: PathAlignCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/path_align.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <name>: PathAlignCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138656-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Filtering of Noise\n\nInduced Obstacles\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/filtering_of_noise\n\ninduced_obstacles.html#tutorial\n\nsteps\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1 Noisy sensor measurements can cause to errors inVoxelLayerorObstacleLayer. As a result, salt and pepper noise may appear on the costmap. This noise creates false obstacles that prevent the robot from finding the best path on the map. While the images above show both salt and pepper noise as well as error due to mislocalization, this layer will only remove sensor noise, not mislocalized artifacts misaligned with the static map. This tutorial shows how to configure filtering of false obstacles caused by noise. This functionality is provided by theDenoiseLayercostmap layer plugin which will be enabled and used in this document."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13866a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 915, "chroma:document": "## Requirements\uf0c1 It is assumed that ROS 2, Gazebo and TurtleBot3 packages are installed or built locally. Please make sure that Nav2 project is also built locally as it was made inBuild and Install.\n\n## Tutorial Steps\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13867e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 1135, "chroma:document": "## 1. Enable Denoise Layer\uf0c1 Denoise Layer is Costmap2D plugin. You can enable theDenoiseLayerplugin in Costmap2D by addingdenoise_layerto thepluginsparameter innav2_params.yaml. You can place it in theglobal_costmapand (or)local_costmapto filter noise on a global or local map. The DenoiseLayer plugin should have the following parameter defined: Full list of parameters supported byDenoiseLayerare listed atDenoise Layer Parameterspage. It is important to note thatDenoiseLayertypically should be placed before the inflation layer. This is required to prevent inflation from noise-induced obstacles. Moreover,DenoiseLayerprocesses only obstacle information in the costmap. ValuesINSCRIBED_INFLATED_OBSTACLE,LETHAL_OBSTACLEand optionallyNO_INFORMATIONwill be interpreted as obstacle cell. Cells with any other values will be interpreted asFREE_SPACEwhen processed (won\u2019t be distorted in the cost map). If a cell with an obstacle is recognized as noise, it will be replaced byFREE_SPACEafter processing. To"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1386c4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 2078, "chroma:document": "as noise, it will be replaced byFREE_SPACEafter processing. To enableDenoiseLayerfor both global and local costmaps, use the following configuration:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1386e2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 2229, "chroma:document": "## 2. Run Nav2 stack\uf0c1 After Denoise Layer was enabled for global/local costmaps, run Nav2 stack as written inGetting Started: And check that filter is working properly: with the default parameters, no standalone obstacles should remain on the cost map. This can be checked, for example, in RViz main window displaying local and global costmaps after removing unnecessary particles (illustrated at the top of this tutorial)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1386f6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 2654, "chroma:document": "## How it works\uf0c1 The plugin is based on two algorithms. When parameterminimal_group_size= 2, the first algorithm turns on. It applyerosionfunction with kernel from image below (left ifgroup_connectivity_type= 4 or right ifgroup_connectivity_type= 8) to the costmap. White color of the kernel pixel means to use the value, black means to ignore it. As a result of erosion function the neighbors image is created. Each possible position of the kernel on the costmap corresponds to one pixel of the neighbors image. The pixel value of this image is equal to the maximum of 4/8 costmap pixels corresponding to the white pixels of the mask. In other words, the pixel of the neighbors image is equal to the obstacle code if there is an obstacle nearby, the free space code in other case. After that, obstacles corresponding to free space code on neighbors image are removed. This process is illustrated below. On the left side of the image is a costmap, on the right is a neighbors image. White pixels are free space, black"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13870a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 3609, "chroma:document": "right is a neighbors image. White pixels are free space, black pixels are obstacles,group_connectivity_type= 4. Obstacles marked at the end of the animation will be removed. When parameterminimal_group_size> 2, the second algorithm is executed. This is a generalized solution that allows you to remove groups of adjacent obstacles if their total number is less thanminimal_group_size. To select groups of adjacent obstacles, the algorithm performs their segmentation. The type of cell connectivity in one segment is determined by the parametergroup_connectivity_type. Next, the size of each segment is calculated. Obstacles segments with size less than theminimal_group_sizeare replaced with empty cells. This algorithm is about 10 times slower than first, so use it with caution and only when necessary. Its execution time depends on the size of the processed map fragment (and not depend on the value ofminimal_group_size). This algorithm is illustrated in the animation below (group_connectivity_type= 8). Obstacles"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13871e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 4565, "chroma:document": "in the animation below (group_connectivity_type= 8). Obstacles marked at the end of the animation will be removed (groups that size less 3)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138732-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Filtering of Noise-Induced Obstacles\uf0c1.txt", "start_index": 4707, "chroma:document": "Code Examples:\n\nLanguage: unknown File: DenoiseLayer ``` global_costmap: global_costmap: ros__parameters: ... plugins: [\"static_layer\", \"obstacle_layer\", \"denoise_layer\", \"inflation_layer\"] ... denoise_layer: plugin: \"nav2_costmap_2d::DenoiseLayer\" enabled: True ... local_costmap: local_costmap: ros__parameters: ... plugins: [\"voxel_layer\", \"denoise_layer\", inflation_layer\"] ... keepout_filter: plugin: \"nav2_costmap_2d::DenoiseLayer\" enabled: True\n\n```\n\nLanguage: unknown\n\nFile: DenoiseLayer\n\n```\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\nheadless:\n\n=\n\nFalse\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138746-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Foxy to Galactic\uf0c1\n\nURL: https://docs.nav2.org/migration/Foxy.html#removed\n\nbt\n\nxml\n\nlaunch\n\nconfigurations\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## NavigateToPose Action Feedback updates\uf0c1 The NavigateToPose action feedback has two improvements:\n\n## NavigateToPose BT-node Interface Changes\uf0c1 The NavigateToPose input port has been changed to PoseStamped instead of Point and Quaternion. SeeNavigateToPosefor more information."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13875a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 515, "chroma:document": "## NavigateThroughPoses and ComputePathThroughPoses Actions Added\uf0c1 TheNavigateThroughPosesaction has been added analog to theNavigateToPose. Rather than going to a single position, this Action will allow a user to specify a number of hard intermediary pose constraints between the start and final pose to plan through. The newComputePathThroughPosesaction has been added to theplanner_serverto process these requests throughNgoal_poses. TheComputePathThroughPosesaction server will take in a set ofNgoals to achieve, plan through each pose and concatenate the output path for use in navigation. The controller and navigator know nothing about the semantics of the generated path, so the robot will not stop or slow on approach to these goals. It will rather continue through each pose as it were any other point on the path continuously. When paired with theSmacPlanner, this feature can be used to generatecompletely kinematically feasible trajectories through pose constraints. If you wish to stop at each goal pose,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13876e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 1477, "chroma:document": "pose constraints. If you wish to stop at each goal pose, consider using the waypoint follower instead, which will stop and allow a user to optionally execute a task plugin at each pose."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13878c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 1664, "chroma:document": "## ComputePathToPose BT-node Interface Changes\uf0c1 Thestartinput port has been added to optionally allow the request of a path fromstarttogoalinstead of from the current position of the robot togoal. SeeComputePathToPosefor more information.\n\n## ComputePathToPose Action Interface Changes\uf0c1 These two additional fields have been added to optionally allow, whenuse_startis true, the request of a path fromstarttogoalinstead of from the current position of the robot togoal. Corresponding changes have been done of the Planner Server.\n\n## BackUp BT-node Interface Changes\uf0c1 Thebackup_distandbackup_speedinput ports should both be positive values indicating the distance to go backward respectively the speed with which the robot drives backward."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1387a0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 2404, "chroma:document": "## BackUp Recovery Interface Changes\uf0c1 speedin a backup recovery goal should be positive indicating the speed with which to drive backward.target.xin a backup recovery goal should be positive indicating the distance to drive backward. In both cases negative values are silently inverted."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1387b4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 2692, "chroma:document": "## Nav2 Controllers and Goal Checker Plugin Interface Changes\uf0c1 As ofthis PR 2247, thecontrollerplugins will now be given a pointer to the current goal checker in use of the navigation task incomputeAndPublishVelocity(). This is geared to enabling controllers to have access to predictive checks for goal completion as well as access to the state information of the goal checker plugin. Thegoal_checkerplugins also have the change of including agetTolerances()method. This method allows a goal checker holder to access the tolerance information of the goal checker to consider at the goal. Each field of theposeandvelocityrepresents the maximum allowable error in each dimension for a goal to be considered completed. In the case of a translational tolerance (combined X and Y components), each the X and Y will be populated with the tolerance value because it is themaximumtolerance in the dimension (assuming the other has no error). If the goal checker does not contain any tolerances for a dimension,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1387d2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 3634, "chroma:document": "goal checker does not contain any tolerances for a dimension, thenumeric_limits<double>lowest()value is utilized in its place."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1387e6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 3762, "chroma:document": "## FollowPath goal_checker_id attribute\uf0c1 For example: you could use for some specific navigation motion a more precise goal checker than the default one that it is used in usual motions. Below it is shown an example of goal_checker configuration of the controller_server node.\n\n## Groot Support\uf0c1 Live Monitoring and Editing of behavior trees with Groot is now possible. Switching bt-xmls on the fly through a new goal request is also included. This is all done without breaking any APIs. Enabled by default."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1387fa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 4271, "chroma:document": "## New Plugins\uf0c1 nav2_waypoint_followerhas an action server that takes in a list of waypoints to follow and follow them in order. In some cases we might want robot to perform some tasks/behaviours at arrivals of these waypoints. In order to perform such tasks, a generic plugin interfaceWaypointTaskExecutorhas been added tonav2_core. Users can inherit from this interface to implement their own plugin to perform more specific tasks at waypoint arrivals for their needs. Several example implementations are included innav2_waypoint_follower.WaitAtWaypointandPhotoAtWaypointplusings are included innav2_waypoint_followeras run-time loadable plugins.WaitAtWaypointsimply lets robot to pause for a specified amount of time in milliseconds, at waypoint arrivals. WhilePhotoAtWaypointtakes photos at waypoint arrivals and saves the taken photos to specified directory, the format for taken photos also can be configured through parameters. All major image formats such aspng,jpeg,jpgetc. are supported, the default format ispng."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13880e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 5235, "chroma:document": "aspng,jpeg,jpgetc. are supported, the default format ispng. Loading a plugin of this type is done throughnav2_bringup/params/nav2_param.yaml, by specifying plugin\u2019s name, type and it\u2019s used parameters. Original GitHub tickets:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138822-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 5463, "chroma:document": "## Costmap Filters\uf0c1 A new concept interacting with spatial-dependent objects called \u201cCostmap Filters\u201d appeared in Galactic (more information about this concept could be found atNavigation Conceptspage). Costmap filters are acting as a costmap plugins, applied to a separate costmap above common plugins. In order to make a filtered costmap and change robot\u2019s behavior in annotated areas, filter plugin reads the data came from filter mask. Then this data is being linearly transformed into feature map in a filter space. It could be passability of an area, maximum speed limit in m/s, robot desired direction in degrees or anything else. Transformed feature map along with the map/costmap, sensors data and current robot position is used in plugin\u2019s algorithms to make required updates in the resulting costmap and robot\u2019s behavior. Architecturally, costmap filters consists fromCostmapFilterclass which is a basic class incorporating much common of its inherited filter plugins: Each costmap filter subscribes to filter"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138840-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 6427, "chroma:document": "filter plugins: Each costmap filter subscribes to filter info topic (publishing byCostmap Filter Info Publisher Server) having all necessary information for loaded costmap filter and filter mask topic.SpeedFilteradditionally publishes maximum speed restrictingmessagestargeted for a Controller to enforce robot won\u2019t exceed given limit. High-level design of this concept could be foundhere. The functionality of costmap filters is being discussed inthe ticket #1263and carried out byPR #1882. The following tutorials:Navigating with Keepout ZonesandNavigating with Speed Limitswill help to easily get involved withKeepoutFilterandSpeedFilterfunctionalities."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138854-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 7086, "chroma:document": "## SmacPlanner\uf0c1 A new package,nav2_smac_plannerwas added containing 4 or 8 connected 2D A*, and Dubin and Reed-shepp model hybrid-A* with smoothing, multi-resolution query, and more. Thenav2_smac_plannerpackage contains an optimized templated A* search algorithm used to create multiple A*-based planners for multiple types of robot platforms. We support differential-drive and omni-directional drive robots using theSmacPlanner2Dplanner which implements a cost-aware A* planner. We support cars, car-like, and ackermann vehicles using theSmacPlannerplugin which implements a Hybrid-A* planner. This plugin is also useful for curvature constrained planning, like when planning robot at high speeds to make sure they don\u2019t flip over or otherwise skid out of control. TheSmacPlannerfully-implements the Hybrid-A* planner as proposed inPractical Search Techniques in Path Planning for Autonomous Driving, including hybrid searching, CG smoothing, analytic expansions and heuristic functions."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138868-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 8076, "chroma:document": "## ThetaStarPlanner\uf0c1 A new package,nav2_theta_star_plannerwas added containing 4 or 8 connected Theta* implementation for 2D maps. This package implements an optimized version of the Theta* Path Planner (specifically theLazy Theta* Pvariant) to plan any-angled paths for differential-drive and omni-directional robots, while also taking into account the costmap costs. This plugin is useful for the cases where you might want to plan a path at a higher rate but without requiring extremely smooth paths around the corners which, for example, could be handled by a local planner/controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1388b8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 8667, "chroma:document": "## RegulatedPurePursuitController\uf0c1 A new package,nav2_regulated_pure_pursuit_controllerwas added containing a novel variant of the Pure Pursuit algorithm. It also includes configurations to enable Pure Pursuit and Adaptive Pure Pursuit variations as well. This variation is specifically targeting service / industrial robot needs. It regulates the linear velocities by curvature of the path to help reduce overshoot at high speeds around blind corners allowing operations to be much more safe. It also better follows paths than any other variation currently available of Pure Pursuit. It also has heuristics to slow in proximity to other obstacles so that you can slow the robot automatically when nearby potential collisions. It also implements the Adaptive lookahead point features to be scaled by velocities to enable more stable behavior in a larger range of translational speeds. There\u2019s more this does, that that\u2019s the general information. See the package\u2019sREADMEfor more."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1388cc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 9647, "chroma:document": "## Costmap2Dcurrent_Usage\uf0c1 In costmap2D,current_was used in ROS1 to represent whether a costmap layer was still enabled and actively processing data. It would be turned tofalseonly under the situation that the expected update rate of a sensor was not met, so it was getting stale or no messages. It acts as a fail-safe for if a navigation sensor stops publishing. In galactic, that will remain turn, however it will also add additional capabilities. It is also now set tofalsewhen a costmap is reset due to clearing or other navigation recoveries. That stops the robot from creating a plan or control effort until after the costmap has been updated at least once after a reset. This enables us to make sure we cannot ever create a path or control with a completely empty costmap, potentially leading to collisions, due to clearing the costmap and then immediately requesting an algorithm to run."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1388e0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 10544, "chroma:document": "## Standard time units in parameters\uf0c1 To follow the SI units outlined in REP-103 to the \u201cT\u201d nodes below were modified to use seconds consistently in every parameter. Under each node name you can see which parameters changed to seconds instead of using milliseconds.\n\n## Ray Tracing Parameters\uf0c1 Raytracing functionality was modified to include a minimum range parameter from which ray tracing starts to clear obstacles to avoid incorrectly clearing obstacles too close to the robot. This issue was mentioned inROS Answers. An existing parameterraytrace_rangewas renamed toraytrace_max_rangeto reflect the functionality it affects. The renamed parameters and the plugins that they belong to are mentioned below. The changes were introduced in thispull request."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1388fe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 11304, "chroma:document": "## Obstacle Marking Parameters\uf0c1 Obstacle marking was modified to include a minimum range parameter from which obstacles are marked on the costmap to prevent addition of obstacles in the costmap due to noisy and incorrect measurements. This modification is related to the change with the raytracing parameters. The renamed parameters, newly added parameters and the plugins they belong to are given below.\n\n## Recovery Action Changes\uf0c1 The recovery actions,SpinandBackUpwere modified to correctly returnFAILUREif the recovery action is aborted due to a potential collision. Previously, these actions incorrectly always returnedSUCCESS. Changes to this resulted in downstream action clients, such as the default behavior tree. The changes were introduced in thispull request 1855."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138912-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 12083, "chroma:document": "## Default Behavior Tree Changes\uf0c1 The default behavior tree (BT)navigate_w_replanning_and_recovery.xmlhas been updated to allow for replanning in between recoveries. The changes were introduced in thisPR 1855. Additionally, an alternative BTnavigate_w_replanning_and_round_robin_recovery.xmlwas removed due to similarity with the updated default BT.\n\n## NavFn Planner Parameters\uf0c1 The NavFn Planner has now its 3 parameters reconfigurable at runtime (tolerance,use_astarandallow_unknown). The changes were introduced in thispull request 2181."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138926-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 12626, "chroma:document": "## New ClearCostmapExceptRegion and ClearCostmapAroundRobot BT-nodes\uf0c1 The ClearEntireCostmap action node was already implemented but the ClearCostmapExceptRegion and ClearCostmapAroundRobot BT nodes calling the sister services(local_or_global)_costmap/clear_except_(local_or_global)_costmapandclear_around_(local_or_global)_costmapof Costmap 2D were missing, they are now implemented in a similar way. They both expose areset_distanceinput port. SeeClearCostmapExceptRegionandClearCostmapAroundRobotfor more.  The changes were introduced in thispull request 2204."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13893a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 13191, "chroma:document": "## New Behavior Tree Nodes\uf0c1 A new behavior tree node was added and dynamically loadable at run-time using behavior tree cpp v3. Seenav2_behavior_treefor a full listing, orNavigation Pluginsfor the current list of behavior tree plugins and their descriptions. These plugins are set as default in thenav2_bt_navigatorbut may be overridden by thebt_pluginsparameter to include your specific plugins. Original GitHub tickets: Additionally, behavior tree nodes were modified to contain their own local executors to spin for actions, topics, services, etc to ensure that each behavior tree node is independent of each other (e.g. spinning in one BT node doesn\u2019t trigger a callback in another).\n\n## sensor_msgs/PointCloud to sensor_msgs/PointCloud2 Change\uf0c1 Due to deprecation ofsensor_msgs/PointCloudthe topics which were publishing sensor_msgs/PointCloud are converted to sensor_msgs/PointCloud2. The details on these topics and their respective information are listed below. These changes were introduced inpull request 2263."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13894e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 14213, "chroma:document": "## ControllerServer New Parameter failure_tolerance\uf0c1 A new parameterfailure_tolerancewas added to the Controller Server for tolerating controller plugin exceptions without failing immediately. It is analogous tocontroller_patiencein ROS(1) Nav. SeeController Serverfor description. This change was introduced in thispull request 2264.\n\n## Removed BT XML Launch Configurations\uf0c1 The launch python configurations for CLI setting of the behavior tree XML file has been removed. Instead, you should use the yaml files to set this value. If you, however, have apathto the yaml file that is inconsistent in a larger deployment, you can use theRewrittenYamltool in your parent launch file to remap the default XML paths utilizing theget_shared_package_path()directory finder (or as you were before in python3). The use of map subscription QoS launch configuration was also removed, use parameter file. This change was introduced in thispull request 2295."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138962-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 15161, "chroma:document": "## Nav2 RViz Panel Action Feedback Information\uf0c1 The Nav2 RViz Panel now displays the action feedback published bynav2_msgs/NavigateToPoseandnav2_msgs/NavigateThroughPosesactions. Users can find information like the estimated time of arrival, distance remaining to goal, time elapsed since navigation started, and number of recoveries performed during a navigation action directly through the RViz panel. This feature was introduced in thispull request 2338.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: numeric_limits<double>lowest()\n\n```\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"FollowPath\"\n\ngoal_checker_id=\n\n\"precise_goal_checker\"\n\nserver_name=\n\n\"FollowPath\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```\n\nLanguage: unknown\n\nFile: GridBased\n\n```\n\ncontroller_server\n\n:\n\nros__parameters\n\n:\n\ngoal_checker_plugins\n\n:\n\n[\n\n\"general_goal_checker\"\n\n,\n\n\"precise_goal_checker\"\n\n]\n\nprecise_goal_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleGoalChecker\"\n\nxy_goal_tolerance\n\n:\n\n0.25\n\nyaw_goal_tolerance\n\n:\n\n0.25\n\ngeneral_goal_checker\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138976-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Foxy to Galactic\uf0c1.txt", "start_index": 16118, "chroma:document": ":\n\n0.25\n\nyaw_goal_tolerance\n\n:\n\n0.25\n\ngeneral_goal_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleGoalChecker\"\n\nxy_goal_tolerance\n\n:\n\n0.25\n\n```\n\nLanguage: unknown\n\nFile: nav2_bringup/params/nav2_param.yaml\n\n```\n\nwaypoint_follower\n\n:\n\nros__parameters\n\n:\n\nloop_rate\n\n:\n\n20\n\nstop_on_failure\n\n:\n\nfalse\n\nwaypoint_task_executor_plugin\n\n:\n\n\"wait_at_waypoint\"\n\nwait_at_waypoint\n\n:\n\nplugin\n\n:\n\n\"nav2_waypoint_follower::WaitAtWaypoint\"\n\nenabled\n\n:\n\nTrue\n\nwaypoint_pause_duration\n\n:\n\n0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138994-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Voxel Layer Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Voxel Layer Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/voxel.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1389a8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/NavFn Planner\uf0c1.txt", "start_index": 0, "chroma:document": "Title: NavFn Planner\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nnavfn.html#parameters\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown File: <name> ``` planner_server : ros__parameters : planner_plugins : [ 'GridBased' ] GridBased : plugin : 'nav2_navfn_planner::NavfnPlanner' # In Iron and older versions, \"/\" was used instead of \"::\" use_astar : True allow_unknown : True tolerance : 1.0 ```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1389bc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/GoalAlignCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: GoalAlignCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/goal_align.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: GoalAlignCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1389da-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SimpleGoalChecker\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SimpleGoalChecker\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/nav2_controller\n\nplugins/simple_goal_checker.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <nav2_controllerplugin>: nav2_controller plugin name defined in thegoal_checker_plugin_idparameter inController Server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1389ee-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/AMCL\uf0c1.txt", "start_index": 0, "chroma:document": "Title: AMCL\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-amcl.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: first_map_only_\n\n```\n\namcl\n\n:\n\nros__parameters\n\n:\n\nalpha1\n\n:\n\n0.2\n\nalpha2\n\n:\n\n0.2\n\nalpha3\n\n:\n\n0.2\n\nalpha4\n\n:\n\n0.2\n\nalpha5\n\n:\n\n0.2\n\nbase_frame_id\n\n:\n\n\"base_footprint\"\n\nbeam_skip_distance\n\n:\n\n0.5\n\nbeam_skip_error_threshold\n\n:\n\n0.9\n\nbeam_skip_threshold\n\n:\n\n0.3\n\ndo_beamskip\n\n:\n\nfalse\n\nglobal_frame_id\n\n:\n\n\"map\"\n\nlambda_short\n\n:\n\n0.1\n\nlaser_likelihood_max_dist\n\n:\n\n2.0\n\nlaser_max_range\n\n:\n\n100.0\n\nlaser_min_range\n\n:\n\n1.0\n\nlaser_model_type\n\n:\n\n\"likelihood_field\"\n\nmax_beams\n\n:\n\n60\n\nmax_particles\n\n:\n\n2000\n\nmin_particles\n\n:\n\n500\n\nodom_frame_id\n\n:\n\n\"odom\"\n\npf_err\n\n:\n\n0.05\n\npf_z\n\n:\n\n0.99\n\nrecovery_alpha_fast\n\n:\n\n0.0\n\nrecovery_alpha_slow\n\n:\n\n0.0\n\nresample_interval\n\n:\n\n1\n\nrobot_model_type\n\n:\n\n\"nav2_amcl::DifferentialMotionModel\"\n\nsave_pose_rate\n\n:\n\n0.5"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a02-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/AMCL\uf0c1.txt", "start_index": 962, "chroma:document": "\"nav2_amcl::DifferentialMotionModel\"\n\nsave_pose_rate\n\n:\n\n0.5\n\nsigma_hit\n\n:\n\n0.2\n\ntf_broadcast\n\n:\n\ntrue\n\ntransform_tolerance\n\n:\n\n1.0\n\nupdate_min_a\n\n:\n\n0.2\n\nupdate_min_d\n\n:\n\n0.25\n\nz_hit\n\n:\n\n0.5\n\nz_max\n\n:\n\n0.05\n\nz_rand\n\n:\n\n0.5\n\nz_short\n\n:\n\n0.05\n\nscan_topic\n\n:\n\nscan\n\nmap_topic\n\n:\n\nmap\n\nset_initial_pose\n\n:\n\nfalse\n\nalways_reset_initial_pose\n\n:\n\nfalse\n\nfirst_map_only\n\n:\n\nfalse\n\ninitial_pose\n\n:\n\nx\n\n:\n\n0.0\n\ny\n\n:\n\n0.0\n\nz\n\n:\n\n0.0\n\nyaw\n\n:\n\n0.0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a20-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Map Server _ Saver\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Map Server / Saver\uf0c1 URL: https://docs.nav2.org/configuration/packages/configuring-map-server.html#map-saver-parameters Section: getting_started/index.html --------------------------------------------------------------------------------\n\n## Map Saver Parameters\uf0c1\n\n## Map Server Parameters\uf0c1\n\n## Costmap Filter Info Server Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: filter_space_value=base+multiplier\n\nmask_value\n\n```\n\nmap_server\n\n:\n\nros__parameters\n\n:\n\nyaml_filename\n\n:\n\n\"turtlebot3_world.yaml\"\n\ntopic_name\n\n:\n\n\"map\"\n\nframe_id\n\n:\n\n\"map\"\n\nmap_saver\n\n:\n\nros__parameters\n\n:\n\nsave_map_timeout\n\n:\n\n5.0\n\nfree_thresh_default\n\n:\n\n0.25\n\noccupied_thresh_default\n\n:\n\n0.65\n\ncostmap_filter_info_server\n\n:\n\nros__parameters\n\n:\n\ntype\n\n:\n\n1\n\nfilter_info_topic\n\n:\n\n\"costmap_filter_info\"\n\nmask_topic\n\n:\n\n\"filter_mask\"\n\nbase\n\n:\n\n0.0\n\nmultiplier\n\n:\n\n0.25\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a34-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ComputePathThroughPoses\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ComputePathThroughPoses\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ComputePathThroughPoses.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: ComputePathThroughPoses\n\n```\n\n<ComputePathThroughPoses\n\ngoals=\n\n\"{goals}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\nserver_name=\n\n\"ComputePathThroughPoses\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a52-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/OscillationCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: OscillationCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/oscillation.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: OscillationCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a66-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/IsPathValid\uf0c1.txt", "start_index": 0, "chroma:document": "Title: IsPathValid\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/IsPathValid.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<IsPathValid\n\nserver_timeout=\n\n\"10\"\n\npath=\n\n\"{path}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a7a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Development Guides\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Development Guides\uf0c1\n\nURL: https://docs.nav2.org/development_guides/index.html\n\nSection: development_guides/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138a98-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/IsBatteryCharging\uf0c1.txt", "start_index": 0, "chroma:document": "Title: IsBatteryCharging\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/IsBatteryCharging.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: POWER_SUPPLY_STATUS_CHARGING\n\n```\n\n<IsBatteryCharging\n\nbattery_topic=\n\n\"/battery_status\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138ab6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ClearEntireCostmap\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ClearEntireCostmap\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ClearEntireCostmap.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap\n\nSubtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138aca-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigating Using GPS Localization\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/navigation2_with_gps.html#interactive-gps-waypoint-follower\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to set up a localization system using a GPS sensor(s) as the source of global positioning, robot_localization (RL) for sensor fusion, and how to use Nav2 to follow GPS waypoints. It was written by Pedro Gonzalez atKiwibot.\n\n## Requirements\uf0c1\n\nIt is assumed ROS2 and Nav2 dependent packages are installed or built locally. Additionally you will have to install robot_localization and mapviz:\n\nThe code for this tutorial is hosted onnav2_gps_waypoint_follower_demo. Though we will go through the most important steps of the setup, it\u2019s highly recommended that you clone and build the package when setting up your dev environment.\n\nThis is available in ROS 2 Iron and newer."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138ade-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 931, "chroma:document": "This is available in ROS 2 Iron and newer.\n\nYou may also need to install gazebo and turtlebot3 simulation if you have not executed previous tutorials or Nav2 demos. See Nav2\u2019s Getting Started page for more information.\n\n## GPS Localization Overview\uf0c1\n\nGPS (Global Positioning System) or more broadly GNSS (Global Navigation Satellite System) is a technology that relies on satellites to provide receivers with an estimate of where they are located on the earth. These satellites are in orbit at altitudes around 20.000km and use radio frequency to continuously broadcast time signals, these are picked up by receivers when satellites are along their line of sight, they use trilateration to estimate their latitude, longitude and altitude.\n\nCommonly GPS devices calculate their position using theWGS84 standard, which defines a cartesian system with its origin on the earth\u2019s center of mass, thezaxis pointing north and thexaxis pointing to the first meridian as the image below shows."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138afc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 1917, "chroma:document": "However, this reference system is impractical for describing the motion and representing the environment around objects in or close to the earth\u2019s surface: Imagine your robot is located on a soccer field and you want it to move from one end to the other, your navigation task would look something like:\n\nAddinally, if your robot has for instance a 2D lidar, you would have to transform its data to this reference system as well. It would make much more sense to create a local reference system where you could tell your robot \u201cgo 100 meters forward\u201d and your sensor data could populate your environment representation accordingly, right?"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b10-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 2556, "chroma:document": "To cope with this, geodesy proposes several planar projection systems for localization with respect to the surface of the earth. One of them is theUTM coordinate system, which assumes earth is an ellipsoid and divides it in 60 zones, each of them spanning across 6 longitude degrees. A zone represents the projection of the ellipsoid\u2019s surface over a secant cylinder parallel to its central meridian; each of them is then split into 20 latitude bands that span across 8 latitude degrees, which create local grid zones where positions are expressed using planar coordinates from the origin of the zone. The image below shows the grid zones spanning across South America."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b24-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 3227, "chroma:document": "robot_localizationuses this projection system to transform GPS measurements in the WGS84 reference system to a cartesian system, which centered on the origin of the grid zone where the GPS is at. This is achieved through thenavsat_transform node. This node complies with the ENU convention inREP 103, meaning that the+xaxis of theutmcoordinate system faces east, the+yfaces north and the+zaxis points up."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b42-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 3633, "chroma:document": "In the real world GPS sensors can be noisy: With standalone GPSs you should expect accuracies of 1-2 meters under excellent conditions and up to 10 meters, and frequent jumps in the position as the GPS sensor picks up less or more satellites, which can degrade the quality of navigation significantly. Several positioning augmentation technologies exists to reduce the error of GPS measurements, one of the most common ones is calledRTK(Real Time Kinematic Positioning), which can bring the accuracy of receivers down to 1cm. If accuracy matters in your application this technology is highly recommended; though this requires the deployment of a second fixed GPS called base, most of the US and Europe are already covered with public free to use bases that you can connect to. You can read more about RTK and how to get startedhere. In this tutorial we assume the robot\u2019s GPS produces an accurate and smooth estimation of the robot\u2019s position."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b56-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 4578, "chroma:document": "Additionally, to fully describe a robot\u2019s localization we need to know its heading as well, however standalone GPS sensors do not provide orientation measurements, only position measurements. In this tutorial we will refer to \u2018absolute heading\u2019 as a yaw measurement which is given w.r.t. a cardinal direction (e.g, the east), in contrast to relative heading, which is given w.r.t. the angle the robot is turned on or any other reference that cannot be directly mapped  to a cardinal direction.\n\nWhen using robot_localization with GPS, measuring absolute orientation is mandatory. There are several strategies for getting absolute orientation data, like IMUs with magnetometers, dual GPS systems or matching techniques over a known map; in this tutorial we assume the robot is equipped with an IMU that can accurately measure absolute orientation following the ENU convention, meaning it will output zero yaw when facing east and +90 degrees when facing north."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b74-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 5539, "chroma:document": "Despite the above assumption, in the real world commercial grade IMU\u2019s mounted in actual robots will often not produce accurate absolute heading measurements because:\n\nThus, for a particular application you should consider the behavior and localization quality you require when making decisions about how to estimate your absolute heading. When using IMU\u2019s without relative headings to a cardinal direction, the robot may need to move around for a bit in an \u2018initialization dance\u2019 to converge to the right heading using the filter. Using dual-GPS or 3D mapping system overlay, the initial heading is quite good.\n\nFor the purposes of this tutorial, we model a well-built system using an IMU that has absolute orientation already, but that may be augmented or replaced on a practical system using one of the techniques above (or others).\n\n## Tutorial Steps\uf0c1\n\n## 0- Setup Gazebo World\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b88-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 6376, "chroma:document": "## Tutorial Steps\uf0c1\n\n## 0- Setup Gazebo World\uf0c1\n\nTo navigate using GPS we first need to create an outdoors Gazebo world with a robot having a GPS sensor to setup for navigation. For this tutorial we will be using theSonoma Racewaybecause its aligned with the real location. A sample world has been setuphereusing gazebo\u2019s spherical coordinates plugin, which creates a local tangent plane centered in the set geographic origin and provides latitude, longitude and altitude coordinates for each point in the world:\n\nTo get GPS readings from Gazebo we need to create a robot model with a GPS sensor. An updated Turtlebot model with such sensor is provided in thetutorial repo, it outputsNavSatFixmessages on the topic/gps/fix:\n\nAdditionally, since we added a new GPS sensor in thegps_linkwe need to add a joint for this link that publishes a static transform w.r.t.base_link\n\nBuild thenav2_gps_waypoint_follower_demopackage, source your workspace and test your gazebo world is properly set up by launching:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138b9c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 7379, "chroma:document": "A Turtlebot waffle should appear in the Sonoma Raceway world. You may also echo the topic/gps/fixto verify the robot is indeed producing GPS measurements\n\n## 1- Setup GPS Localization system\uf0c1\n\nOnce you have your simulation (or real robot) up and running, it\u2019s time to set up your localization system. Remember that Nav2 uses atfchain with the structuremap->odom->base_link->[sensorframes]; global localization (map->odom) is usually provided byamcl, whileodom->base_linkis usually provided by the user\u2019s odometry system (wheel odometry, visual odometry, etc)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138bb0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 7940, "chroma:document": "In this tutorial, the GPS sensor on the robot will replaceamclin providing global localization. Though you may build a custom module that takes in theNavSatFixandImumessages of your GPS and imu, and outputs atfbetween yourmapandodomframes using a planar projection, Nav2\u2019s GPS waypoint follower currently uses robot_localization for converting GPS goals to cartesian goals, and thus at anavsat_transform_nodeshould be active. Additionally,robot_localizationfeatures reconfigurable state estimation nodes that use Kalman Filters to fuse multiple sources of data, which is yet another reason to use it."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138bce-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 8542, "chroma:document": "We will setup one Extended Kalman Filter for local odometry, fusing wheel odometry and IMU data; a second one for global localization, fusing the local cartesian converted GPS coordinates, the wheel odometry and the IMU data; and a navsat_transform node to output cartesian odometry messages from GPS data. This is a common setup on robot_localization when using GPS data and more details around its configuration can be found inRL\u2019s docs.\n\nAconfiguration fileand alaunch fileare provided for this purpose. You may take a while before continuing to understand these two files and what they configure. Let\u2019s walk through the most relevant setting of each node.\n\n## Local Odometry\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138be2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 9203, "chroma:document": "## Local Odometry\uf0c1\n\nThe local odometry is provided by theekf_filter_node_odom, which publishes the transform betweenodomandbase_footprint, the base frame of the turtlebot\u2019s diff drive plugin in gazebo. The robot state publisher provides a static transform betweenbase_footprintandbase_link, however make sure to set the base frame properly in RL according to your configuration. Note that the EKFs are set to work in 2D mode, this is because nav2\u2019s costmap environment representation is 2-Dimensional, and several layers rely on thebase_linkframe being on the same plane as their global frame for the height related parameters to make sense. This is encoded in the following parameters:\n\nSince perREP 105the position of the robot in theodomframe has to be continuous over time, in this filter we just want to fuse the robot\u2019s speed measured by its wheels published/odom, and the imu heading published on/imu:\n\n## Global Odometry\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138bf6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 10113, "chroma:document": "## Global Odometry\uf0c1\n\nThe global odometry is provided by theekf_filter_node_map, which publishes the transform betweenmapandbase_footprint. This EKF is set to work in 2D mode as well. In addition to the IMU and wheel odometry data, this filter takes in the odometry output of the gps, published by thenavsat_transformnode on/odometry/gpsas an odometry message:\n\n## Navsat Transform\uf0c1\n\nThe navsat transform produces an odometry output with the position of the GPS in themapframe, which is ingested by the global EKF as said above. It exposes thedatumparameter to set the GPS coordinates and heading of the origin ofmap; if left undeclared it will be set automatically to the coordinates of the first validNavSatFixmessage it gets, and it may be changed in runtime as well calling the/datumservice."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c0a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 10909, "chroma:document": "In this tutorial we will go with the automaticdatuminitialization because there is no information about the environment stored in cartesian coordinates (a static map, semantic navigation waypoints, a 3D pointcloud map, etc), however if that\u2019s the case in your application you may fix thedatumso a given pair of coordinates produced by the GPS always correspond to the same cartesian coordinates in your reference system.\n\nThe node also exposes theyaw_offsetparameter to compensate for known errors that the IMU absolute yaw measurement may have with respect to the east. Since Gazebo\u2019s IMU follows the ENU convention this is set to0in the tutorial, but you may want to change it if you know beforehand there\u2019s a fixed offset in your data.\n\nHere\u2019s the full configuration for thenavsat_transformnode:\n\n## Localization Testing\uf0c1\n\nAs a sanity check that everything is working correctly, launch RL\u2019s launch file while Gazebo is still running:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c28-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 11847, "chroma:document": "On a different terminal launch mapviz using the pre-builtconfig filein the repo.Get a bing maps API keyand use it to display satellite pictures.\n\nYou should see the window below after properly setting the API key:\n\nFinally run the teleop twist keyboard node to teleoperate the simulated Turtlebot:\n\nWhen you have everything up and running, start teleoperating the Turtlebot and check that:\n\nThe gif below shows what you should see:\n\nSensors in a real robot may be less accurate than Gazebo\u2019s, especially GPSs and absolute heading measurements from IMUs. To mitigate this you can leverage robot_localization\u2019s EKFs to complement sensor\u2019s capabilities:\n\n## 2- Setup Navigation system\uf0c1\n\nOnce you have your localization system up and running it\u2019s time to set up Nav2. Since RL is already providing thetftree we don\u2019t need to launchamcl, thus we can remove its parameters from the params file and not launch Nav2\u2019s localization launch file.\n\nThere are three main possible setups for the global costmap:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c3c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 12784, "chroma:document": "There are three main possible setups for the global costmap:\n\nWe provide aNav2 params filewith the rolling costmap setup and alaunch fileto put it all together. Remember that the GPS setup of robot_localization was just a means for setting up the global localization system, however Nav2 is still a cartesian navigation stack and you may still use all its cartesian tools. To confirm that everything is working, launch the provided file (this launches gazebo and RL as well so close them if you have them running from the previous steps) and use rviz to send a goal to the robot:\n\nThe gif below shows what you should see Nav2 navigating the robot autonomously!\n\n## 3-  Interactive GPS Waypoint Follower\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c50-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 13446, "chroma:document": "## 3-  Interactive GPS Waypoint Follower\uf0c1\n\nNow that we have performed our complete system setup, let\u2019s leverage Nav2 GPS waypoint follower capabilities to navigate to goals that are expressed directly in GPS coordinates. For this demo we want to build an interactive interface similar to rviz\u2019s, that allows us to click over a map to make the robot navigate to the clicked location. For that we will use mapviz\u2019s point click publisher on thewgs84reference frame, which will publish aPointStampedmessage with the GPS coordinates of the point clicked over the satellite image. This is a great way to get started in your custom GPS navigation setup!\n\nFor this purpose we provide theinteractive_waypoint_followerpython node, which subscribes to mapviz\u2019s topic and calls the/follow_gps_waypointsaction server with the clicked point as goal using theBasicNavigatorinnav2_simple_commander. To run it source your workspace and with the rest of the system running type:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c64-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 14408, "chroma:document": "You can now click on the mapviz map the pose you want the robot to go. The gif below shows the robot navigating to the finish line going through some obstacles:\n\n## 4-  Logged GPS Waypoint Follower & Waypoint Logging\uf0c1\n\nFinally let\u2019s make a robot go through a set of predefined GPS waypoints. We provide awaypoint logging toolthat subscribes to the robot\u2019s GPS and IMU and offers a simple GUI to save the robot coordinates and heading on demand to ayamlfile with the format:\n\nLet\u2019s log some waypoints for the robot to follow. Source your workspace and with the rest of the system running type:\n\nIf you don\u2019t provide a path to save your waypoints, they will be saved in yourhomefolder by default with the namegps_waypoints.yaml. Once the node launches you should see a small GUI with a button to log waypoints, you may now move the robot around and click that button to record its position as the gif below shows:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c78-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 15321, "chroma:document": "After that you should get ayamlfile in the location you specified with the format shown above; let\u2019s now make the robot follow the logged waypoints. For this purpose we provide thelogged_waypoint_followernode, which takes in the path to the waypoints file as an argument and uses theBasicNavigatorinnav2_simple_commanderto send the logged goals to the/follow_gps_waypointsaction server. If not provided, the node uses thedefault waypointsin thenav2_gps_waypoint_follower_demopackage.\n\nTo run this node source your workspace and with the rest of the system running type:\n\nYou should now see the robot following the waypoints you previously logged:\n\n## Conclusion\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138c96-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 15969, "chroma:document": "## Conclusion\uf0c1\n\nThis tutorial discussed the usage of a GPS sensor for global localization using RL and thenavsat_transformnode, covering the setup of a gazebo simulation with a GPS equipped robot as well. It also went through the configuration changes in Nav2 for navigating with GPS localization, emphasizing on some different possibilities for setting up the global costmap. Finally it showcased the capabilities of Nav2\u2019s GPS waypoint follower as a demonstration on how to use the stack in outdoors environments.\n\nThe tutorial should be a good starting point for setting up autonomous navigation using Nav2 on an outdoors robot, however users should keep in mind that GPS is just a means for providing global localization to the stack, and that all cartesian tools in Nav2 are still available for going past the GPS waypoint follower and building custom autonomy applications according to each use case.\n\nHappy outdoors navigating!\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsource"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138caa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 16921, "chroma:document": "Language: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nsource\n\n/opt/ros/<ros2-distro>/setup.bash\n\nsudo\n\napt\n\ninstall\n\nros-\n\n$ROS_DISTRO\n\nrobot-localization\n\nsudo\n\napt\n\ninstall\n\nros-\n\n$ROS_DISTRO\n\nmapviz\n\nsudo\n\napt\n\ninstall\n\nros-\n\n$ROS_DISTRO\n\nmapviz-plugins\n\nsudo\n\napt\n\ninstall\n\nros-\n\n$ROS_DISTRO\n\ntile-map\n\n```\n\nLanguage: unknown\n\nFile: +z\n\n```\n\n<spherical_coordinates>\n\n<!-- currently gazebo has a bug: instead of outputting lat, long, altitude in ENU\n\n(x = East, y = North and z = Up) as the default configurations, it's outputting (-E)(-N)U,\n\ntherefore we rotate the default frame 180 so that it would go back to ENU\n\nsee: https://github.com/osrf/gazebo/issues/2022 -->\n\n<surface_model>\n\nEARTH_WGS84\n\n</surface_model>\n\n<latitude_deg>\n\n38.161479\n\n</latitude_deg>\n\n<longitude_deg>\n\n122.454630\n\n</longitude_deg>\n\n<elevation>\n\n488.0\n\n</elevation>\n\n<heading_deg>\n\n180\n\n</heading_deg>\n\n</spherical_coordinates>\n\n```\n\nLanguage: unknown\n\nFile: /gps/fix\n\n```\n\n<sensor\n\nname=\n\n\"tb3_gps\"\n\ntype=\n\n\"gps\"\n\n>\n\n<always_on>\n\ntrue"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138cbe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 17876, "chroma:document": "<sensor\n\nname=\n\n\"tb3_gps\"\n\ntype=\n\n\"gps\"\n\n>\n\n<always_on>\n\ntrue\n\n</always_on>\n\n<update_rate>\n\n1\n\n</update_rate>\n\n<pose>\n\n0\n\n0\n\n0\n\n0\n\n0\n\n0\n\n</pose>\n\n<gps>\n\n<position_sensing>\n\n<horizontal>\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n<mean>\n\n0.0\n\n</mean>\n\n<stddev>\n\n0.01\n\n</stddev>\n\n</noise>\n\n</horizontal>\n\n<vertical>\n\n<noise\n\ntype=\n\n\"gaussian\"\n\n>\n\n<mean>\n\n0.0\n\n</mean>\n\n<stddev>\n\n0.01\n\n</stddev>\n\n</noise>\n\n</vertical>\n\n</position_sensing>\n\n</gps>\n\n<plugin\n\nname=\n\n\"my_gps_plugin\"\n\nfilename=\n\n\"libgazebo_ros_gps_sensor.so\"\n\n>\n\n<ros>\n\n<remapping>\n\n~/out:=/gps/fix\n\n</remapping>\n\n</ros>\n\n</plugin>\n\n</sensor>\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\n<joint\n\nname=\n\n\"base_joint\"\n\ntype=\n\n\"fixed\"\n\n>\n\n<parent\n\nlink=\n\n\"base_link\"\n\n/>\n\n<child\n\nlink=\n\n\"base_footprint\"\n\n/>\n\n<origin\n\nxyz=\n\n\"0 0 -0.010\"\n\nrpy=\n\n\"0 0 0\"\n\n/>\n\n</joint>\n\n```\n\nLanguage: unknown\n\nFile: nav2_gps_waypoint_follower_demo\n\n```\n\nros2\n\nlaunch\n\nnav2_gps_waypoint_follower_demo\n\ngazebo_gps_world.launch.py\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138cd2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 18834, "chroma:document": "```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\nekf_filter_node_odom\n\n:\n\nros__parameters\n\n:\n\ntwo_d_mode\n\n:\n\ntrue\n\npublish_tf\n\n:\n\ntrue\n\nbase_link_frame\n\n:\n\nbase_footprint\n\nworld_frame\n\n:\n\nodom\n\n```\n\nLanguage: unknown\n\nFile: /imu\n\n```\n\nodom0\n\n:\n\nodom\n\nodom0_config\n\n:\n\n[\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\nimu0\n\n:\n\nimu\n\nimu0_config\n\n:\n\n[\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\n```\n\nLanguage: unknown\n\nFile: /odometry/gps\n\n```\n\nekf_filter_node_map\n\n:\n\nros__parameters\n\n:\n\ntwo_d_mode\n\n:\n\ntrue\n\npublish_tf\n\n:\n\ntrue\n\nbase_link_frame\n\n:\n\nbase_footprint\n\nworld_frame\n\n:\n\nmap\n\nodom1\n\n:\n\nodometry/gps\n\nodom1_config\n\n:\n\n[\n\ntrue\n\n,\n\ntrue\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138ce6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 19775, "chroma:document": "false\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\n```\n\nLanguage: unknown\n\nFile: navsat_transform\n\n```\n\nnavsat_transform\n\n:\n\nros__parameters\n\n:\n\nfrequency\n\n:\n\n30.0\n\ndelay\n\n:\n\n3.0\n\nmagnetic_declination_radians\n\n:\n\n0.0\n\nyaw_offset\n\n:\n\n0.0\n\nzero_altitude\n\n:\n\ntrue\n\nbroadcast_utm_transform\n\n:\n\ntrue\n\npublish_filtered_gps\n\n:\n\ntrue\n\nuse_odometry_yaw\n\n:\n\ntrue\n\nwait_for_datum\n\n:\n\nfalse\n\n# datum: [38.161491, -122.4546443, 0.0] # pre-set datum if needed, [lat, lon, yaw]\n\n```\n\nLanguage: unknown\n\nFile: navsat_transform\n\n```\n\nros2\n\nlaunch\n\nnav2_gps_waypoint_follower_demo\n\ndual_ekf_navsat.launch.py\n\n```\n\nLanguage: unknown\n\nFile: navsat_transform\n\n```\n\nros2\n\nlaunch\n\nnav2_gps_waypoint_follower_demo\n\nmapviz.launch.py\n\n```\n\nLanguage: unknown\n\nFile: navsat_transform\n\n```\n\nros2\n\nrun\n\nteleop_twist_keyboard\n\nteleop_twist_keyboard\n\n```\n\nLanguage: unknown\n\nFile: datum\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\n...\n\nrolling_window\n\n:\n\nTrue\n\nwidth\n\n:\n\n50\n\nheight\n\n:\n\n50\n\n```\n\nLanguage: unknown\n\nFile: datum\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d04-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 20720, "chroma:document": ":\n\n50\n\nheight\n\n:\n\n50\n\n```\n\nLanguage: unknown\n\nFile: datum\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\n...\n\nplugins\n\n:\n\n[\n\n\"static_layer\"\n\n,\n\n\"obstacle_layer\"\n\n,\n\n\"inflation_layer\"\n\n]\n\n```\n\nLanguage: unknown\n\nFile: datum\n\n```\n\nglobal_costmap\n\n:\n\nglobal_costmap\n\n:\n\nros__parameters\n\n:\n\n...\n\nwidth\n\n:\n\n50\n\nheight\n\n:\n\n50\n\norigin_x\n\n:\n\n25.0\n\norigin_y\n\n:\n\n25.0\n\n```\n\nLanguage: unknown\n\nFile: datum\n\n```\n\nros2\n\nlaunch\n\nnav2_gps_waypoint_follower_demo\n\ngps_waypoint_follower.launch.py\n\nuse_rviz:\n\n=\n\nTrue\n\n```\n\nLanguage: unknown\n\nFile: nav2_simple_commander\n\n```\n\nros2\n\nrun\n\nnav2_gps_waypoint_follower_demo\n\ninteractive_waypoint_follower\n\n```\n\nLanguage: unknown\n\nFile: yaml\n\n```\n\nwaypoints\n\n:\n\nlatitude\n\n:\n\n38.161491054181276\n\nlongitude\n\n:\n\n122.45464431092836\n\nyaw\n\n:\n\n0.0\n\nlatitude\n\n:\n\n38.161587576524845\n\nlongitude\n\n:\n\n122.4547994038464\n\nyaw\n\n:\n\n1.57\n\n```\n\nLanguage: unknown\n\nFile: yaml\n\n```\n\nros2\n\nrun\n\nnav2_gps_waypoint_follower_demo\n\ngps_waypoint_logger\n\n</path/to/yaml/file.yaml>\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d18-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating Using GPS Localization\uf0c1.txt", "start_index": 21692, "chroma:document": "</path/to/yaml/file.yaml>\n\n```\n\nLanguage: unknown\n\nFile: nav2_gps_waypoint_follower_demo\n\n```\n\nros2\n\nrun\n\nnav2_gps_waypoint_follower_demo\n\nlogged_waypoint_follower\n\n</path/to/yaml/file.yaml>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d2c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/DriveOnHeading\uf0c1.txt", "start_index": 0, "chroma:document": "Title: DriveOnHeading\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/DriveOnHeading.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: DriveOnHeading\n\n```\n\n<DriveOnHeading\n\ndist_to_travel=\n\n\"0.2\"\n\nspeed=\n\n\"0.05\"\n\nserver_name=\n\n\"backup_server\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{drive_on_heading_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d40-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Inflation Layer Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Inflation Layer Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/inflation.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d54-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Smoother Server\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Smoother Server\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nsmoother\n\nserver.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Smoother Server Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: plugin\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\nsmoother_plugins\n\n:\n\n[\n\n\"simple_smoother\"\n\n,\n\n\"curvature_smoother\"\n\n]\n\ncurvature_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_ceres_costaware_smoother/CeresCostawareSmoother\"\n\nsimple_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_smoother::SimpleSmoother\"\n\n```\n\nLanguage: unknown\n\nFile: plugin\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\ncostmap_topic\n\n:\n\nglobal_costmap/costmap_raw\n\nfootprint_topic\n\n:\n\nglobal_costmap/published_footprint\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nsmoother_plugins\n\n:\n\n[\n\n\"simple_smoother\"\n\n]\n\nsimple_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_smoother::SimpleSmoother\"\n\ntolerance\n\n:\n\n1.0e\n\n10\n\ndo_refinement\n\n:\n\nTrue\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d72-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SimpleProgressChecker\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SimpleProgressChecker\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/nav2_controller\n\nplugins/simple_progress_checker.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <nav2_controllerplugin>: nav2_controller plugin name defined in theprogress_checker_plugin_idparameter inController Server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d86-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Get Backtrace in ROS 2 / Nav2\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/get_backtrace.html#overview\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis document explains one set of methods for getting backtraces for ROS 2 and Nav2.\n\nThere are many ways to accomplish this, but this is a good starting point for new C++ developers without GDB experience.\n\nThe following steps show ROS 2 users how to modify the Nav2 stack to get traces from specific servers when they encounter a problem.\n\nThis tutorial applies to both simulated and physical robots.\n\nThis will cover how to get a backtrace from a specific node usingros2run, from a launch file representing a single node usingros2launch, and from a more complex orchestration of nodes.\n\nBy the end of this tutorial, you should be able to get a backtrace when you notice a server crashing in ROS 2.\n\n## Preliminaries\uf0c1\n\nGDB is the most popular debugger for C++ on Unix systems."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138d9a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 964, "chroma:document": "GDB is the most popular debugger for C++ on Unix systems.\n\nIt can be used to determine the reason for a crash and track threads.\n\nIt may also be used to add breakpoints in your code to check values in memory a particular points in your software.\n\nUsing GDB is a critical skill for all software developers working on C/C++.\n\nMany IDEs will have some kind of debugger or profiler built in, but with ROS, there are few IDEs to choose.\n\nTherefore it\u2019s important to understand how to use these raw tools you have available rather than relying on an IDE to provide them.\n\nFurther, understanding these tools is a fundamental skill of C/C++ development and leaving it up to your IDE can be problematic if you change roles and no longer have access to it or are doing development on the fly through an ssh session to a remote asset.\n\nUsing GDB luckily is fairly simple after you have the basics under your belt.\n\nThe first step is to add-gto your compiler flags for the ROS package you want to profile / debug."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138dae-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 1967, "chroma:document": "This flag builds debug symbols that GDB and valgrind can read to tell you specific lines of code in your project are failing and why.\n\nIf you do not set this flag, you can still get backtraces but it will not provide line numbers for failures.\n\nBe sure to remove this flag after debugging, it will slow down performance at run-time.\n\nAdding the following line to yourCMakeLists.txtfor your project should do the trick.\n\nIf your project already has aadd_compile_options(), you can simply add-gto it.\n\nThen simply rebuild your workspace with this packagecolconbuild--packages-select<package-name>.\n\nIt may take a little longer than usual to compile.\n\nNow you\u2019re ready to debug your code!\n\nIf this was a non-ROS project, at this point you might do something like below.\n\nHere we\u2019re launching a GDB session and telling our program to immediately run.\n\nOnce your program crashes, it will return a gdb session prompt denoted by(gdb).\n\nAt this prompt you can access the information you\u2019re interested in."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138dc2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 2965, "chroma:document": "However, since this is a ROS project with lots of node configurations and other things going on, this isn\u2019t a great option for beginners or those that don\u2019t like tons of commandline work and understanding the filesystem.\n\nBelow are sections to describe the 3 major situations you could run into with ROS 2-based systems.\n\nRead the section that best describes the problem you\u2019re attempting to solve.\n\n## From a Node\uf0c1\n\nJust as in our non-ROS example, we need to setup a GDB session before launching our ROS 2 node.\n\nWhile we could set this up through the commandline with some knowledge of the ROS 2 file system, we can instead use the launch--prefixoption the kind folks at Open Robotics provided for us.\n\n--prefixwill execute some bits of code before ourros2command allowing us to insert some information.\n\nIf you attempted to dogdbexrun--argsros2run<pkg><node>as analog to our example in the preliminaries, you\u2019d find that it couldn\u2019t find theros2command."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138dd6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 3923, "chroma:document": "If you\u2019re even more clever, you\u2019d find that trying to source your workspace would also fail for similar reasons.\n\nRather than having to revert to finding the install path of the executable and typing it all out, we can instead use--prefix.\n\nThis allows us to use the sameros2runsyntax you\u2019re used to without having to worry about some of the GDB details.\n\nJust as before, this prefix will launch a GDB session and run the node you requested with all the additional commandline arguments.\n\nYou should now have your node running and should be chugging along with some debug printing.\n\nOnce your server crashes, you\u2019ll see a prompt like below. At this point you can now get a backtrace.\n\nIn this session, typebacktraceand it will provide you with a backtrace.\n\nCopy this for your needs.\n\nFor example:\n\nIn this example you should read this in the following way, starting at the bottom:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138dea-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 4806, "chroma:document": "These traces take some time to get used to reading, but in general, start at the bottom and follow it up the stack until you see the line it crashed on.\n\nThen you can deduce why it crashed.\n\nWhen you are done with GDB, typequitand it will exit the session and kill any processes still up.\n\nIt may ask you if you want to kill some threads at the end, say yes.\n\n## From a Launch File\uf0c1\n\nJust as in our non-ROS example, we need to setup a GDB session before launching our ROS 2 launch file.\n\nWhile we could set this up through the commandline, we can instead make use of the same mechanics that we did in theros2runnode example, now using a launch file.\n\nIn your launch file, find the node that you\u2019re interested in debugging.\n\nFor this section, we assume that your launch file contains only a single node (and potentially other information as well).\n\nTheNodefunction used in thelaunch_rospackage will take in a fieldprefixtaking a list of prefix arguments."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138dfe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 5761, "chroma:document": "We will insert the GDB snippet here with one change from our node example, use ofxterm.xtermwill pop up a new terminal window to show and interact with GDB.\n\nWe do this because of issues handlingstdinon launch files (e.g. if you hit control+C, are you talking to GDB or launch?).\n\nSeethis ticketfor more information.\n\nSee below for an example debugging SLAM Toolbox.\n\nJust as before, this prefix will launch a GDB session, now inxtermand run the launch file you requested with all the additional launch arguments defined.\n\nOnce your server crashes, you\u2019ll see a prompt like below, now in thextermsession. At this point you can now get a backtrace.\n\nIn this session, typebacktraceand it will provide you with a backtrace.\n\nCopy this for your needs.\n\nSee the example trace in the section above for an example.\n\nThese traces take some time to get used to reading, but in general, start at the bottom and follow it up the stack until you see the line it crashed on.\n\nThen you can deduce why it crashed."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e1c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 6724, "chroma:document": "Then you can deduce why it crashed.\n\nWhen you are done with GDB, typequitand it will exit the session and kill any processes still up.\n\nIt may ask you if you want to kill some threads at the end, say yes.\n\n## From Large Project\uf0c1\n\nWorking with launch files with multiple nodes is a little different so you can interact with your GDB session without being bogged down by other logging in the same terminal.\n\nFor this reason, when working with larger launch files, its good to pull out the specific server you\u2019re interested in and launching it separately.\n\nThese instructions are targeting Nav2, but are applicable to any large project with many nodes of any type in a series of launch file(s).\n\nAs such, for this case, when you see a crash you\u2019d like to investigate, its beneficial to separate this server from the others.\n\nIf your server of interest is being launched from a nested launch file (e.g. an included launch file) you may want to do the following:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e30-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 7683, "chroma:document": "Alternatively, if you server of interest is being launched in these files directly (e.g. you see aNode,LifecycleNode, or inside aComponentContainer), you will need to separate this from the others:\n\nOnce your server crashes, you\u2019ll see a prompt like below in the specific server\u2019s terminal. At this point you can now get a backtrace.\n\nIn this session, typebacktraceand it will provide you with a backtrace.\n\nCopy this for your needs.\n\nSee the example trace in the section above for an example.\n\nThese traces take some time to get used to reading, but in general, start at the bottom and follow it up the stack until you see the line it crashed on.\n\nThen you can deduce why it crashed.\n\nWhen you are done with GDB, typequitand it will exit the session and kill any processes still up.\n\nIt may ask you if you want to kill some threads at the end, say yes.\n\n## From Nav2 Bringup\uf0c1\n\nTo debug directly from the nav2 bringup launch files you may want to do the following:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e44-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 8649, "chroma:document": "Once your server crashes, you\u2019ll see a prompt like below in the xterm window. At this point you can now get a backtrace.\n\nIn this session, typebacktraceand it will provide you with a backtrace.\n\nCopy this for your needs.\n\nSee the example trace in the section above for an example.\n\nThese traces take some time to get used to reading, but in general, start at the bottom and follow it up the stack until you see the line it crashed on.\n\nThen you can deduce why it crashed.\n\nWhen you are done with GDB, typequitand it will exit the session and kill any processes still up.\n\nIt may ask you if you want to kill some threads at the end, say yes.\n\n## Automatic backtrace on crash\uf0c1\n\nThebackward-cpplibrary provides beautiful stack traces, and thebackward_roswrapper simplifies its integration.\n\nJust add it as a dependency andfind_packageit in your CMakeLists and the backward libraries will be injected in all your executables and libraries.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: colconbuild--packages-select<package-name>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e58-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 9621, "chroma:document": "File: colconbuild--packages-select<package-name>\n\n```\n\nadd_compile_options\n\n(\n\ng\n\n)\n\n```\n\nLanguage: unknown\n\nFile: (gdb)\n\n```\n\ngdb\n\nex\n\nrun\n\n--args\n\n/path/to/exe/program\n\n```\n\nLanguage: unknown\n\nFile: ros2run\n\n```\n\nros2\n\nrun\n\n--prefix\n\n'gdb -ex run --args'\n\n<pkg>\n\n<node>\n\n--all-other-launch\n\narguments\n\n```\n\nLanguage: unknown\n\nFile: ros2run\n\n```\n\n(\n\ngdb\n\n)\n\n```\n\nLanguage: unknown\n\nFile: backtrace\n\n```\n\n(\n\ngdb\n\n)\n\nbacktrace\n\n#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50\n\n#1  0x00007ffff79cc859 in __GI_abort () at abort.c:79\n\n#2  0x00007ffff7c52951 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6\n\n#3  0x00007ffff7c5e47c in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6\n\n#4  0x00007ffff7c5e4e7 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6\n\n#5  0x00007ffff7c5e799 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6\n\n#6  0x00007ffff7c553eb in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e6c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 10596, "chroma:document": "#7  0x000055555555936c in std::vector<int, std::allocator<int> >::_M_range_check (\n\nthis\n\n=\n\n0x5555555cfdb0,\n\n__n\n\n=\n\n100\n\n)\n\nat\n\n/usr/include/c++/9/bits/stl_vector.h:1070\n\n#8  0x0000555555558e1d in std::vector<int, std::allocator<int> >::at (this=0x5555555cfdb0,\n\n__n\n\n=\n\n100\n\n)\n\nat\n\n/usr/include/c++/9/bits/stl_vector.h:1091\n\n#9  0x000055555555828b in GDBTester::VectorCrash (this=0x5555555cfb40)\n\nat\n\n/home/steve/Documents/nav2_ws/src/gdb_test_pkg/src/gdb_test_node.cpp:44\n\n#10 0x0000555555559cfc in main (argc=1, argv=0x7fffffffc108)\n\nat\n\n/home/steve/Documents/nav2_ws/src/gdb_test_pkg/src/main.cpp:25\n\n```\n\nLanguage: unknown\n\nFile: stdin\n\n```\n\nstart_sync_slam_toolbox_node\n\n=\n\nNode\n\n(\n\nparameters\n\n=\n\n[\n\nget_package_share_directory\n\n(\n\n\"slam_toolbox\"\n\n)\n\n+\n\n'/config/mapper_params_online_sync.yaml'\n\n,\n\n{\n\n'use_sim_time'\n\n:\n\nuse_sim_time\n\n}\n\n],\n\npackage\n\n=\n\n'slam_toolbox'\n\n,\n\nexecutable\n\n=\n\n'sync_slam_toolbox_node'\n\n,\n\nname\n\n=\n\n'slam_toolbox'\n\n,\n\nprefix\n\n=\n\n[\n\n'xterm -e gdb -ex run --args'\n\n],\n\noutput\n\n=\n\n'screen'"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e80-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Get Backtrace in ROS 2 _ Nav2\uf0c1.txt", "start_index": 11558, "chroma:document": "=\n\n[\n\n'xterm -e gdb -ex run --args'\n\n],\n\noutput\n\n=\n\n'screen'\n\n)\n\n```\n\nLanguage: unknown\n\nFile: xterm\n\n```\n\n(\n\ngdb\n\n)\n\n```\n\nLanguage: unknown\n\nFile: --ros-args-r__node:=<node_name>--params-file/absolute/path/to/params.yaml\n\n```\n\n(\n\ngdb\n\n)\n\n```\n\nLanguage: unknown\n\nFile: ros2launchnav2_bringuptb3_simulation_launch.pyuse_composition:=False\n\n```\n\n(\n\ngdb\n\n)\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138e9e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Related Projects\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Related Projects\uf0c1\n\nURL: https://docs.nav2.org/about/related_projects.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138eb2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Setting Up the Robot\u2019s Footprint\uf0c1 URL: https://docs.nav2.org/setup_guides/footprint/setup_footprint.html#configuring-the-robot-s-footprint Section: getting_started/index.html --------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138ec6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 264, "chroma:document": "## Footprint Introduction\uf0c1 The footprint outlines the robot\u2019s 2D shape when projected to the ground and is primarily used by Nav2 to avoid collisions during planning. The algorithms involved in this task makes sure that the robot does not collide with the obstacles in the costmap while it computes the robot\u2019s paths or plans. The footprint is set up using thefootprintorrobot_radiusparameter of the global and local costmaps which we tackled in the previous tutorials (Setting Up Sensors Guide). The value defined in thefootprintparameter is an ordered vector of 2-D points defining the robot\u2019s footprint with thebase_linkframe as the origin. The first and last points in the vector are joined into the last line segment to close the footprint\u2019s shape. As an alternative, you may also use therobot_radiusparameter wherein circular footprint is automatically generated and centered atbase_link.  In cases both thefootprintandrobot_radiusparameters have been defined in the configuration, thefootprintis used. For the global"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138eda-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 1230, "chroma:document": "in the configuration, thefootprintis used. For the global costmap footprint, the decision to choose between therobot_radius(circular) orfootprint(polygon) parameter depends on the robot, its environment, and the path planning algorithm you will use. Even if you are working with a non-circular robot, there may be situations where a circular footprint is acceptable. For example, path planning algorithms likeNavFnassume that the robot is circular since it only checks for collision per grid cell, so it will not be necessary to outline the robot\u2019s exact shape for its footprint. On the other hand, algorithms such asSmac Planner\u2019s Hybrid-A*perform collision checking on the robot\u2019s polygon-shaped footprint if possible and necessary. Hence, it might be useful to use a polygon-shaped footprint. Another example is having a small RC car sized robot roaming a warehouse. This robot is so small it won\u2019t need to make confined maneuvers \u2013 thusly approximating it with the largest cross-sectional radius is a good time-saving"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138eee-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 2190, "chroma:document": "with the largest cross-sectional radius is a good time-saving optimization. For the local costmap footprint, it is typical for non-circular robots to be set up withfootprint(polygon). Some situations where this is not recommended is when you do not have enough computing resources to implement collision avoidance algorithms on a polygon-shaped footprint. Another possible reason to userobot_radius(circular) for the local costmap is when the robot is very small relative to its environment such that precise collision avoidance is not necessary. However, generally the local trajectory planner should use the actual footprint polygon of the robot. Note that this can also be adjusted over time using the costmap\u2019s~/footprinttopic, which will update the polygon over time as needed due to changes in the robot\u2019s state, such as movement of an attached manipulator, picking up a pallet, or other actions that adjust a robot\u2019s shape. That polygon will then automatically be used by the planners and controllers."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f02-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 3200, "chroma:document": "## Configuring the Robot\u2019s Footprint\uf0c1 In this section, we will configure the footprint ofsam_botsuch thatfootprint(polygon) is used for the local costmap androbot_radius(circular) is used for the global costmap. We will utilize the default configuration file of Nav2 with a modified footprint parameter for the global and local costmaps. Under theconfigdirectory, create a new file namednav2_params.yaml. Next, copy the contents ofconfig/nav2_params.yamland paste them into the newly created file. The contents ofconfig/nav2_params.yamlare copied from the default configuration file of Nav2 but with changes in thefootprintandrobot_radiusparameters to match the shape ofsam_bot. Below is the code snippet fromnav2_params.yamldefining the local costmap footprint. In this configuration file, thefootprintparameter of the local costmap has already been set with a rectangular-shaped footprint. This box is centered at thebase_linkframe ofsam_bot. For the global costmap, we have already set therobot_radiusparameter to create"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f16-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 4160, "chroma:document": "costmap, we have already set therobot_radiusparameter to create a circular footprint that matchessam_bot\u2019s size and centered atbase_link. The parameter that was modified is shown in the code snippet below."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f2a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 4367, "chroma:document": "## Build, Run and Verification\uf0c1 We will now confirm that we have properly set upsam_bot\u2019s footprint. First, we launchlaunch/display.launch.pyto launch the robot state publisher, spawnsam_botin Gazebo, and visualizesam_botand its footprint in Rviz. The robot state publisher publishes thebase_link=>sensorstransforms defined insam_bot\u2019s URDF, while Gazebo\u2019s differential drive plugin publishes theodom=>base_linktransform. Open a new terminal and execute the lines below. After launchingdisplay.launch.py, RViz and Gazebo should open. RViz should showsam_bot, the frames ofsam_bot\u2019s parts, and theodomframe without errors. Gazebo should showsam_botwith a sphere and a cube detectable bysambot\u2019s lidar sensor. Next, we will publish themap=>odomtransform using thestatic_transform_publisher. We publish themap=>odomtransform as static in this guide as a simple way to publish the transform and visualize the footprint. Open a new terminal and execute the lines below. Themap=>odomtransform should now be being published and"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f3e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 5325, "chroma:document": "below. Themap=>odomtransform should now be being published and themapframe should be added in RViz without errors. Lastly, we will launch Nav2 using thenav2_params.yamlconfiguration file we just made andnavigation_launch.py, the built-in launch file ofnav2_bringup. Open a new terminal and execute the following: We should now be able to visualize the footprints in RViz, which will be discussed in the next section."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f5c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 5743, "chroma:document": "## Visualizing Footprint in RViz\uf0c1 To visualize the footprint of the local costmap, click the add button at the bottom-left part of the RViz window. Under theBytopictab, select thePolygonunder the/local_costmap/published_footprinttopic, as shown below. Set the fixed frame in RViz toodomand you should see the rectangular-shaped footprint ofsam_bot: On the other hand, for the global costmap, click the add button at the bottom-left part of the RViz window. Go toBytopictab then select thePolygonunder the/global_costmap/published_footprinttopic, as shown below. Set the fixed frame in RViz tomapand you should see the circular footprint ofsam_bot:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f70-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 6392, "chroma:document": "## Conclusion\uf0c1 In this guide, we have shown how to configure a circular and polygon-shaped footprint for your robot. This footprint is important since it plays a major role in Nav2\u2019s pathfinding algorithms function. As a demo, we have configured the costmap footprint parameters ofsam_bot. We set the local costmap to use a polygon-shaped footprint followingsam_bot\u2019s shape while we set the the global costmap to use a circular footprint. Lastly, we visualized and confirmed the footprints of the local and global costmaps in RViz.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: sam_bot\n\n```\n\n188\n\nresolution\n\n:\n\n0.05\n\n189\n\nfootprint\n\n:\n\n\"[\n\n[0.21,\n\n0.195],\n\n[0.21,\n\n0.195],\n\n[\n\n0.21,\n\n0.195],\n\n[\n\n0.21,\n\n0.195]\n\n]\"\n\n190\n\nplugins\n\n:\n\n[\n\n\"voxel_layer\"\n\n,\n\n\"inflation_layer\"\n\n]\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\n232\n\nuse_sim_time\n\n:\n\nTrue\n\n233\n\nrobot_radius\n\n:\n\n0.3\n\n234\n\nresolution\n\n:\n\n0.05\n\n```\n\nLanguage: unknown\n\nFile: base_link\n\n```\n\ncolcon\n\nbuild\n\n.\n\ninstall/setup.bash\n\nros2\n\nlaunch\n\nsam_bot_description"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f84-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up the Robot\u2019s Footprint\uf0c1.txt", "start_index": 7352, "chroma:document": ".\n\ninstall/setup.bash\n\nros2\n\nlaunch\n\nsam_bot_description\n\ndisplay.launch.py\n\n```\n\nLanguage: unknown\n\nFile: odom\n\n```\n\nros2\n\nrun\n\ntf2_ros\n\nstatic_transform_publisher\n\n0\n\n0\n\n0\n\n0\n\n0\n\n0\n\nmap\n\nodom\n\n```\n\nLanguage: unknown\n\nFile: nav2_bringup\n\n```\n\nros2\n\nlaunch\n\nnav2_bringup\n\nnavigation_launch.py\n\nparams_file:\n\n=\n\n<full/path/to/config/nav2_params.yaml>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138f98-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose and Pause Near Goal-Obstacle\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigate To Pose and Pause Near Goal-Obstacle\uf0c1\n\nURL: https://docs.nav2.org/behavior_trees/trees/nav_to_pose_and_pause_near_goal_obstacle.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\nCode Examples:\n\nLanguage: unknown\n\nFile: FollowPath\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<ControllerSelector\n\nselected_controller=\n\n\"{selected_controller}\"\n\ndefault_controller=\n\n\"FollowPath\"\n\ntopic_name=\n\n\"controller_selector\"\n\n/>\n\n<PlannerSelector\n\nselected_planner=\n\n\"{selected_planner}\"\n\ndefault_planner=\n\n\"GridBased\"\n\ntopic_name=\n\n\"planner_selector\"\n\n/>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"{selected_planner}\"\n\nerror_code_id="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138fac-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose and Pause Near Goal-Obstacle\uf0c1.txt", "start_index": 949, "chroma:document": "\"{path}\"\n\nplanner_id=\n\n\"{selected_planner}\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</RecoveryNode>\n\n</RateController>\n\n<ReactiveSequence\n\nname=\n\n\"MonitorAndFollowPath\"\n\n>\n\n<PathLongerOnApproach\n\npath=\n\n\"{path}\"\n\nprox_len=\n\n\"3.0\"\n\nlength_factor=\n\n\"2.0\"\n\n>\n\n<RetryUntilSuccessful\n\nnum_attempts=\n\n\"1\"\n\n>\n\n<SequenceStar\n\nname=\n\n\"CancelingControlAndWait\"\n\n>\n\n<CancelControl\n\nname=\n\n\"ControlCancel\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5.0\"\n\n/>\n\n</SequenceStar>\n\n</RetryUntilSuccessful>\n\n</PathLongerOnApproach>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"{selected_controller}\"\n\nerror_code_id=\n\n\"{follow_path_error_code}\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</RecoveryNode>\n\n</ReactiveSequence>\n\n</PipelineSequence>\n\n<ReactiveFallback"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138fc0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose and Pause Near Goal-Obstacle\uf0c1.txt", "start_index": 1906, "chroma:document": "</ReactiveSequence>\n\n</PipelineSequence>\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<Sequence\n\nname=\n\n\"ClearingActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5.0\"\n\n/>\n\n<BackUp\n\nbackup_dist=\n\n\"0.30\"\n\nbackup_speed=\n\n\"0.05\"\n\n/>\n\n</RoundRobin>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138fde-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/PipelineSequence\uf0c1.txt", "start_index": 0, "chroma:document": "Title: PipelineSequence\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/controls/PipelineSequence.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<PipelineSequence>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</PipelineSequence>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb138ff2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigate To Pose\uf0c1\n\nURL: https://docs.nav2.org/behavior_trees/trees/nav_to_pose_recovery.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\nCode Examples:\n\nLanguage: unknown\n\nFile: FollowPath\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<ControllerSelector\n\nselected_controller=\n\n\"{selected_controller}\"\n\ndefault_controller=\n\n\"FollowPath\"\n\ntopic_name=\n\n\"controller_selector\"\n\n/>\n\n<PlannerSelector\n\nselected_planner=\n\n\"{selected_planner}\"\n\ndefault_planner=\n\n\"GridBased\"\n\ntopic_name=\n\n\"planner_selector\"\n\n/>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"{selected_planner}\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n<Sequence>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139006-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose\uf0c1.txt", "start_index": 945, "chroma:document": "error_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n<Sequence>\n\n<WouldAPlannerRecoveryHelp\n\nerror_code=\n\n\"{compute_path_error_code}\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n</RecoveryNode>\n\n</RateController>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"{selected_controller}\"\n\nerror_code_id=\n\n\"{follow_path_error_code}\"\n\n/>\n\n<Sequence>\n\n<WouldAControllerRecoveryHelp\n\nerror_code=\n\n\"{follow_path_error_code}\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</Sequence>\n\n</RecoveryNode>\n\n</PipelineSequence>\n\n<Sequence>\n\n<Fallback>\n\n<WouldAControllerRecoveryHelp\n\nerror_code=\n\n\"{follow_path_error_code}\"\n\n/>\n\n<WouldAPlannerRecoveryHelp\n\nerror_code=\n\n\"{compute_path_error_code}\"\n\n/>\n\n</Fallback>\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13901a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigate To Pose\uf0c1.txt", "start_index": 1904, "chroma:document": "name=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<Sequence\n\nname=\n\n\"ClearingActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\nerror_code_id=\n\n\"{spin_error_code}\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5.0\"\n\n/>\n\n<BackUp\n\nbackup_dist=\n\n\"0.30\"\n\nbackup_speed=\n\n\"0.05\"\n\nerror_code_id=\n\n\"{backup_code_id}\"\n\n/>\n\n</RoundRobin>\n\n</ReactiveFallback>\n\n</Sequence>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139038-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/GloballyUpdatedGoal\uf0c1.txt", "start_index": 0, "chroma:document": "Title: GloballyUpdatedGoal\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/GloballyUpdatedGoal.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<GlobalUpdatedGoal/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13904c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/TwirlingCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: TwirlingCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/twirling.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: TwirlingCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139060-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docking Server\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Docking Server\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-docking-server.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\nNote:dock_pluginsand eitherdocksordock_databaseare required.\n\n## SimpleChargingDock Parameters\uf0c1\n\nSimple Charging Dock is a provided charging dock plugin that can handle many docks and common techniques.\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: isDocked()=true\n\n```\n\ndocking_server\n\n:\n\nros__parameters\n\n:\n\ncontroller_frequency\n\n:\n\n50.0\n\ninitial_perception_timeout\n\n:\n\n5.0\n\nwait_charge_timeout\n\n:\n\n5.0\n\ndock_approach_timeout\n\n:\n\n30.0\n\nundock_linear_tolerance\n\n:\n\n0.05\n\nundock_angular_tolerance\n\n:\n\n0.1\n\nmax_retries\n\n:\n\n3\n\nbase_frame\n\n:\n\n\"base_link\"\n\nfixed_frame\n\n:\n\n\"odom\"\n\ndock_backwards\n\n:\n\nfalse\n\ndock_prestaging_tolerance\n\n:\n\n0.5\n\n# Types of docks\n\ndock_plugins\n\n:\n\n[\n\n'nova_carter_dock'\n\n]\n\nnova_carter_dock\n\n:\n\nplugin\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13907e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docking Server\uf0c1.txt", "start_index": 929, "chroma:document": ":\n\n[\n\n'nova_carter_dock'\n\n]\n\nnova_carter_dock\n\n:\n\nplugin\n\n:\n\n'opennav_docking::SimpleChargingDock'\n\n# Also 'opennav_docking::SimpleNonChargingDock'\n\ndocking_threshold\n\n:\n\n0.05\n\nstaging_x_offset\n\n:\n\n0.7\n\nuse_external_detection_pose\n\n:\n\ntrue\n\nuse_battery_status\n\n:\n\nfalse\n\n# true\n\nuse_stall_detection\n\n:\n\nfalse\n\nexternal_detection_timeout\n\n:\n\n1.0\n\nexternal_detection_translation_x\n\n:\n\n0.18\n\nexternal_detection_translation_y\n\n:\n\n0.0\n\nexternal_detection_rotation_roll\n\n:\n\n1.57\n\nexternal_detection_rotation_pitch\n\n:\n\n1.57\n\nexternal_detection_rotation_yaw\n\n:\n\n0.0\n\nfilter_coef\n\n:\n\n0.1\n\n# Dock instances\n\ndocks\n\n:\n\n[\n\n'home_dock'\n\n]\n\nhome_dock\n\n:\n\ntype\n\n:\n\n'nova_carter_dock'\n\nframe\n\n:\n\nmap\n\npose\n\n:\n\n[\n\n0.0\n\n,\n\n0.0\n\n,\n\n0.0\n\n]\n\nid\n\n:\n\n'c67f50cb-e152-4720-85cc-5eb20bd85ce8'\n\ncontroller\n\n:\n\nk_phi\n\n:\n\n3.0\n\nk_delta\n\n:\n\n2.0\n\nv_linear_min\n\n:\n\n0.15\n\nv_linear_max\n\n:\n\n0.15\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139092-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Nav2 Behavior Trees\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Nav2 Behavior Trees\uf0c1\n\nURL: https://docs.nav2.org/behavior_trees/index.html\n\nSection: behavior_trees/index.html\n\n--------------------------------------------------------------------------------\n\nCode Examples:\n\nLanguage: unknown\n\nFile: nav2_bt_navigator\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<DistanceController\n\ndistance=\n\n\"1.0\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\n/>\n\n</DistanceController>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\n/>\n\n</PipelineSequence>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1390a6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Setting Up The URDF\uf0c1\n\nURL: https://docs.nav2.org/setup_guides/urdf/setup_urdf.html#urdf-and-the-robot-state-publisher\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## URDF and the Robot State Publisher\uf0c1\n\nAs discussed in the previous tutorial, one of the requirements for Navigation2 is the transformation frombase_linkto the various sensors and reference frames. This transformation tree can range from a simple tree with only one link from thebase_linktolaser_linkor a tree comprised of multiple sensors located in different locations, each having their own coordinate frame. Creating multiple publishers to handle all of these coordinate frame transformations may become tedious. Therefore, we will be making use of the Robot State Publisher package to publish our transforms."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1390ba-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 861, "chroma:document": "The Robot State Publisher is a package of ROS 2 that interacts with the tf2 package to publish all of the necessary transforms that can be directly inferred from the geometry and structure of the robot. We need to provide it with the correct URDF and it will automatically handle publishing the transforms. This is very useful for complex transformations but it is still recommended for simpler transform trees."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1390ce-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 1274, "chroma:document": "The Unified Robot Description Format (URDF) is an XML file that represents a robot model. In this tutorial, it will mainly be used to build transformations trees related with the robot geometry, but it also has other uses. One example is how it can be used in visualizing your robot model in RVIZ, a 3D Visualization tool for ROS, by defining visual components such as materials and meshes. Another example is how the URDF can be used to define the physical properties of the robot. These properties are then used in physics simulators such as Gazebo to simulate how your robot will interact in an environment.\n\nAnother major feature of URDF is that it also supports Xacro (XML Macros) to help you create a shorter and readable XML to help in defining complex robots. We can use these macros to eliminate the need for repeating blocks of XML in our URDF. Xacro is also useful in defining configuration constants which can be reused throughout the URDF.\n\n## Setting Up the Environment\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1390e2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 2228, "chroma:document": "## Setting Up the Environment\uf0c1\n\nIn this guide, we are assuming that you are already familiar with ROS 2 and how to setup your development environment, so we\u2019ll breeze through the steps in this section.\n\nLet\u2019s begin by installing some additional ROS 2 packages that we will be using during this tutorial.\n\nNext, create a directory for your project, initialize a ROS 2 workspace and give your robot a name. For ours, we\u2019ll be calling itsam_bot.\n\n## Writing the URDF\uf0c1\n\nNow that we have our project workspace set up, let\u2019s dive straight into writing the URDF. Below is an image of the robot we will be trying to build.\n\nNext, let us define some constants using XAcro properties that will be reused throughout the URDF."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1390f6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 2944, "chroma:document": "Here is a brief discussion on what these properties will represent in our urdf. Thebase_*properties all define the size of the robot\u2019s main chassis. Thewheel_radiusandwheel_widthdefine the shape of the robot\u2019s two back wheels. Thewheel_ygapadjusts the gap between the wheel and the chassis along the y-axis whilstwheel_zoffandwheel_xoffposition the back wheels along the z-axis and x-axis appropriately. Lastly, thecaster_xoffpositions the front caster wheel along the x-axis.\n\nLet us then define ourbase_link- this link will be a large box and will act as the main chassis of our robot. In URDF, alinkelement describes a rigid part or component of our robot. The robot state publisher then utilizes these definitions to determine coordinate frames for each link and publish the transformations between them."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139114-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 3754, "chroma:document": "We will also be defining some of the link\u2019s visual properties which can be used by tools such as Gazebo and Rviz to show us a 3D model of our robot. Amongst these properties are<geometry>which describes the link\u2019s shape and<material>which describes it\u2019s color.\n\nFor the code block block below, we access thebaseproperties from the robot constants sections we defined before using the${property}syntax. In addition, we also set the material color of the main chassis toCyan. Note that we set these parameters under the<visual>tag so they will only be applied as visual parameters which dont affect any collision or physical properties."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139128-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 4390, "chroma:document": "Next, let us define abase_footprintlink. Thebase_footprintlink is a virtual (non-physical) link which has no dimensions or collision areas. Its primary purpose is to enable various packages determine the center of a robot projected to the ground. For example, Navigation2 uses this link to determine the center of a circular footprint used in its obstacle avoidance algorithms. Again, we set this link with no dimensions and to which position the robot\u2019s center is in when it is projected to the ground plane."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13913c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 4901, "chroma:document": "After defining our base_link, we then add a joint to connect it tobase_link. In URDF, ajointelement describes the kinematic and dynamic properties between coordinate frames. For this case, we will be defining afixedjoint with the appropriate offsets to place ourbase_footprintlink in the proper location based on the description above. Remember that we want to set our base_footprint to be at the ground plane when projected from the center of the main chassis, hence we get the sum of thewheel_radiusand thewheel_zoffto get the appropriate location along the z-axis."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139150-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 5470, "chroma:document": "Now, we will be adding two large drive wheels to our robot. To make our code cleaner and avoid repetition, we will make use of macros to define a block of code that will be repeated with differing parameters. Our macro will have 3 params:prefixwhich simply adds a prefix to our link and joint names, andx_reflectandy_reflectwhich allows us to flip the positions of our wheels with respect to the x and y axis respectively. Within this macro, we can also define the visual properties of a single wheel. Lastly, we will also define acontinuousjoint to allow our wheels to freely rotate about an axis. This joint also connects our wheel to thebase_linkat the appropriate location.\n\nAt the end of this code block, we will be instantiating two wheels using the macro we just made through thexacro:wheeltags. Note that we also define the parameters to have one wheel on both sides at the back of our robot."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139164-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 6372, "chroma:document": "Next, we will be adding a caster wheel at the front of our robot. We will be modelling this wheel as a sphere to keep things simple. Again, we define the wheel\u2019s geometry, material and the joint to connect it tobase_linkat the appropriate location.\n\nAnd that\u2019s it! We have built a URDF for a simple differential drive robot. In the next section, we will focus on building the ROS Package containing our URDF, launching the robot state publisher, and visualizing the robot in RVIz.\n\n## Build and Launch\uf0c1\n\nLet\u2019s start this section by adding some dependencies that will be required once we build this project. Open up the root of your project directory and add the following lines to yourpackage.xml(preferably after the<buildtool_depend>tag)"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139182-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 7113, "chroma:document": "Next, let us create our launch file. Launch files are used by ROS 2 to bring up the necessary nodes for our package. From the root of the project, create a directory namedlaunchand adisplay.launch.pyfile within it. The launch file below launches a robot publisher node in ROS 2 that uses our URDF to publish the transforms for our robot. In addition, the launch file also automatically launches RVIZ so we can visualize our robot as defined by the URDF. Copy and paste the snippet below into yourdisplay.launch.pyfile.\n\nTo keep things simpler when we get to visualization, we have provided an RVIz config file that will be loaded when we launch our package. This configuration file initializes RVIz with the proper settings so you can view the robot immediately once it launches. Create a directory namedrvizin the root of your project and a file namedurdf_config.rvizunder it. Place the following as the contents ofurdf_config.rviz"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb139196-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 8047, "chroma:document": "Lastly, let us modify theCMakeLists.txtfile in the project root directory to include the files we just created during the package installation process. Add the following snippet toCMakeLists.txtfile preferably above theif(BUILD_TESTING)line:\n\nWe are now ready to build our project using colcon. Navigate to the project root and execute the following commands.\n\nAfter a successful build, execute the following commands to install the ROS 2 package and launch our project.\n\nROS 2 should now launch a robot publisher node and start up RVIZ using our URDF. We\u2019ll be taking a look at our robot using RVIZ in the next section.\n\n## Visualization using RVIZ\uf0c1\n\nRVIZ is a robot visualization tool that allows us to see a 3D model of our robot using its URDF. Upon a successful launch using the commands in the previous section, RVIZ should now be visible on your screen and should look like the image below. You may need to move around and manipulate the view to get a good look at your robot."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1391aa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 9032, "chroma:document": "As you can see, we have successfully created a simple differential drive robot and visualized it in RVIz. It is not necessary to visualize your robot in RVIz, but it\u2019s a good step in order to see if you have properly defined your URDF. This helps you ensure that the robot state publisher is publishing the correct transformations.\n\nYou may have noticed that another window was launched - this is a GUI for the joint state publisher. The joint state publisher is another ROS 2 package which publishes the state for our non-fixed joints. You can manipulate this publisher through the small GUI and the new pose of the joints will be reflected in RVIz. Sliding the bars for any of the two wheels will rotate these joints. You can see this in action by viewing RVIZ as you sweep the sliders in the Joint State Publisher GUI."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1391c8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 9855, "chroma:document": "At this point, you may already decide to stop with this tutorial since we have already achieved our objective of creating a URDF for a simple differential drive robot. The robot state publisher is now publishing the transforms derived from the URDF. These transforms can now be used by other packages (such as Nav2) to get information regarding the shape and structure of your robot. However, to properly use this URDF in a simulation, we need physical properties so that the robot reacts to physical environments like a real robot would. The visualization fields are only for visualization, not collision, so your robot will drive straight through obstacles. We\u2019ll get into adding these properties in our URDF in the next section.\n\n## Adding Physical Properties\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1391dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 10588, "chroma:document": "## Adding Physical Properties\uf0c1\n\nAs an additional section to this guide, we will be modifying our current URDF to include some of our robot\u2019s kinematic properties. This information may be used by physics simulators such as Gazebo to model and simulate how our robot will act in the virtual environment.\n\nLet us first define macros containing the inertial properties of the geometric primitives we used in our project. Place the snippet below after our constants section in the URDF:\n\nLet us start by adding collision areas to ourbase_linkusing the<collision>tag. We will also be using the box_inertia macro we defined before to add some inertial properties to ourbase_link. Include the following code snippet within<linkname=\"base_link\">tag of base_link in our URDF.\n\nNext, let us do the same for our wheel macros. Include the following code snippet within the<linkname=\"${prefix}_link\">tag of our wheel macros in our URDF."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb1391f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up The URDF\uf0c1.txt", "start_index": 11512, "chroma:document": "Lastly, let us add the similar properties to our spherical caster wheels. Include the following in the<linkname=\"front_caster\">tag of our caster wheel in the URDF.\n\nBuild your project and then launch RViz using the same commands in the previous section.\n\nYou can verify whether you have properly set up the collision areas by enablingCollisionEnabledunderRobotModelon the left pane (it may be easier to see if you also turn offVisualEnabled). For this tutorial we defined a collision area which is similar to our visual properties. Note that this may not always be the case since you may opt for simpler collision areas based on how your robot looks."}


