# embedding_metadata

key: chroma:document
string_value:
against access to null node pointer (#393)Allow to reconfigure durability for /tf topic broadcaster/listener (#383)Fix the rcl type used in the time jump. (#391)Fix linter errors (#385)fix accessing freed resources (#386)Allow reconfiguring qos of tf and tf_static topics through parameters (#381)Replace ROS_* logging macros and use RCLCPP_* instead (#380)Improve message filters error messages (#364)Clarify the role of child_frame_id and header.frame_id in the documentation. (#345)Remove usage of deprecated rclcpp::Duration constructor (#340)Remove messages_count member from tf2_ros::MessageFilter. (#335)Style fixup in tf2_ros. (#325)Update maintainers of the ros2/geometry2 fork. (#328)Update goal response callback signature (#323)Activate usual compiler warnings and fix errors (#270)Fixed memory leak in Buffer::waitForTransform (#281)fix time-reset test with Connext (#306)reenable FrameGraph server (#198)Use the usual style of parameters for static_transform_program (#300)Make static_transform_broadcaster


key: chroma:document
string_value:
(#300)Make static_transform_broadcaster consistent with its command line description (#294)Avoid using invalid std::list iterators (#293)Generate callbacks after updating message_ (#274)Moved unique_lock of messages_mutex_ to guarantee pointer (#279)Fix dependencies in tf2_ros. (#269)Split tf2_ros in tf2_ros and tf2_ros_py (#210)Contributors: Alejandro Hernández Cordero, Audrow Nash, Chris Lalancette, Dirk Thomas, Hunter L. Allen, Ivan Santiago Paunovic, Jacob Perron, Kazunari Tanaka, Martin Ganeff, Michael Carroll, Vikas Dhiman, ymd-stellatf2_ros_pyUse underscores instead of dashes in setup.cfg. (#403) (#404)Use global namespace for TransformListener topics (#390)Fix indentation of a comment in buffer.py (#371)Update rclpy.Rate TODO with url to issue (#324)Update maintainers of the ros2/geometry2 fork. (#328)Add deprecation warnings to lookup_transform to handle the passing of the incorrect Time object. (#319)change signature to show true arguments (#321)Handle when None passed to qos argument in the


key: chroma:document
string_value:
arguments (#321)Handle when None passed to qos argument in the constructor of TransformBroadcaster. (#320)Add type hints to tf2_ros_py code(#275) (#315)Clear callbacks_to_remove variable after removing (#303)Fix cache_time None check in buffer.py (#297)Split tf2_ros in tf2_ros and tf2_ros_py (#210)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Jacob Perron, Matthijs den Toom, ScottMcMichael, surfertastf2_sensor_msgsUpdate maintainers of the ros2/geometry2 fork. (#328)Activate usual compiler warnings and fix errors (#270)Split tf2_ros in tf2_ros and tf2_ros_py (#210)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Ivan Santiago Paunovictf2_toolsUse underscores instead of dashes in setup.cfg. (#403) (#404)Add wait time option to view_frames (#374)Cleanup tf2_tools to be more modern. (#351)Update maintainers of the ros2/geometry2 fork. (#328)Address security bug in yaml loading (#313)Split tf2_ros in tf2_ros and tf2_ros_py (#210)Contributors: Alejandro Hernández Cordero, Chris


key: chroma:document
string_value:
(#210)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Jacob Perron, Víctor Mayoral VilchestlsfSwitch to standard __VA_ARGS__. (#9)Enable basic warnings (#8)Contributors: Audrow Nash, Chris Lalancettetlsf_cppAdd in the Apache license to tlsf_cpp. (#108)Contributors: Chris Lalancettetopic_monitorUse is_alive for threads. (#510) (#513)Use underscores instead of dashes in setup.cfg (#502)Change index.ros.org -> docs.ros.org. (#496)Update deprecated qos policy value names (#468)Update the package.xml files with the latest Open Robotics maintainers (#466)Contributors: Chris Lalancette, Ivan Santiago Paunovic, Michael Jeronimotopic_statistics_demoChange index.ros.org -> docs.ros.org. (#496)Update logging macros (#476)Update the package.xml files with the latest Open Robotics maintainers (#466)Create new topic statistics demo package (#454)Contributors: Audrow Nash, Chris Lalancette, Michael Jeronimo, Prajakta GokhaletracetoolsUpdate QD to be more specific about public APINamespace tracetools C++


key: chroma:document
string_value:
QD to be more specific about public APINamespace tracetools C++ functions and macros and deprecate current onesAdd support for rcl_publish and rclcpp_publish tracepointsAdd instrumentation support for linking a timer to a nodeBring tracetools up to quality level 1Add lifecycle node state transition instrumentationDo not export tracetools if emptyAllow disabling tracetools status appContributors: Christophe Bedard, Ingo Lütkebohle, José Antonio Moraltracetools_launchAllow configuring tracing directory through environment variablesContributors: Christophe Bedardtracetools_testUpdate after namespacing C++ tracetools functions and macrosAdd tests for rcl_publish and rclcpp_publish tracepointsAllow asserting order of list of eventsAllow skipping test trace cleanup by setting an environment variableAdd test for timer-node linking instrumentationIncreased code coverage > 94% as part of QL1Add lifecycle node state transition instrumentation testContributors: Alejandro Hernández Cordero, Christophe Bedard, Ingo


key: chroma:document
string_value:
Alejandro Hernández Cordero, Christophe Bedard, Ingo Lütkebohletracetools_traceAdd support for rcl_publish and rclcpp_publish tracepointsFix flake8 blind except error by using more concrete typesAllow configuring tracing directory through environment variablesCleanly stop ros2trace/tracetools_trace tracing on SIGINTAdd instrumentation support for linking a timer to a nodeAdd lifecycle node state transition instrumentationContributors: Christophe Bedard, Ingo Lütkebohletrajectory_msgsChange index.ros.org -> docs.ros.org. (#149)updating quality declaration links (re:ros2/docs.ros2.org#52) (#145)Update QDs to QL 1 (#135)Update package maintainers. (#132)Updated Quality Level to 2 (#131)Update Quality levels to level 3 (#124)Finish up API documentation (#123)Add Security Vulnerability Policy pointing to REP-2006. (#120)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Michel Hidalgo, Stephen Brawner, brawner, shonigmannturtlesimIgnore key up events in teleop_turtle_key on Windows (#118)Update


key: chroma:document
string_value:
key up events in teleop_turtle_key on Windows (#118)Update maintainers (#106)Update goal response callback signature (#100)add holonomic motion for turtlesim (#98)add step value to turtlesim color parameters (#91)update Foxy turtle (#90)Contributors: Jacob Perron, Michel Hidalgo, Shane Loretzunique_identifier_msgsChange index.ros.org -> docs.ros.org (#21)Update QD to QL 1 (#17)Update Quality Declaration to QL2. (#15)Update Quality level to level 3 (#13)Add Security Vulnerability Policy pointing to REP-2006. (#11)Contributors: Chris Lalancette, Michel Hidalgo, Stephen Brawner, brawnerurdfWork around Windows min/max bug. (#21)Enable -Wall -Wextra -Wpedantic (#20)Add dependency on TinyXML2 (#19)Remove TinyXML dependency from urdf. (#17)Make urdf plugable and revive urdf_parser_plugin (#13)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzurdf_parser_pluginExport urdfdom_headers as urdf_parser_plugin dependency. (#25)Make urdf plugable and revive urdf_parser_plugin (#13)Contributors: Michel Hidalgo,


key: chroma:document
string_value:
revive urdf_parser_plugin (#13)Contributors: Michel Hidalgo, Shane Loretzvisualization_msgsChange index.ros.org -> docs.ros.org. (#149)updating quality declaration links (re:ros2/docs.ros2.org#52) (#145)Update QDs to QL 1 (#135)Update package maintainers. (#132)Updated Quality Level to 2 (#131)Update Quality levels to level 3 (#124)Add Security Vulnerability Policy pointing to REP-2006. (#120)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Michel Hidalgo, Stephen Brawner, brawner, shonigmannyaml_cpp_vendorAlways preserve source permissions in vendor packages (#22)Add an override flag to force vendored build (#21)Reapply “Use system installed yaml-cpp 0.6 if available (#8)” (#16)Revert “Use system installed yaml-cpp 0.6 if available (#8)” (#15)Use system installed yaml-cpp 0.6 if available (#8)Contributors: Ivan Santiago Paunovic, Scott K Logan, Sean Yenzstd_vendorExplicitly add emersonknapp as maintainer (#692)Always preserve source permissions in vendor packages (#645)Zstd should not install


key: chroma:document
string_value:
permissions in vendor packages (#645)Zstd should not install internal headers - some of them try include others that aren’t installed. We don’t use them. Avoid the situation (#631)Patch zstd 1.4.4 to include cmake_minimum_version bump to 2.8.12 (#579)Update the package.xml files with the latest Open Robotics maintainers (#535)Contributors: Emerson Knapp, Michael Jeronimo, Scott K Logan


key: chroma:document
string_value:
Title: Development Distribution

URL: https://docs.ros.org/en/jazzy/Releases/Development.html

Section: Installation

--------------------------------------------------------------------------------

Development DistributionBelow is the ROS 2 distribution that is currently in development.Kilted Kaiju (codename ‘kilted’; May, 2025)


key: chroma:document
string_value:
Title: Setting up a robot simulation (Advanced) URL: https://docs.ros.org/en/jazzy/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Advanced.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Setting up a robot simulation (Advanced)Goal:Extend a robot simulation with an obstacle avoider node.Tutorial level:AdvancedTime:20 minutesContentsBackgroundPrerequisitesTasks1 Updatingmy_robot.urdf2 Creating a ROS node to avoid obstacles3 Updating additional files4 Test the obstacle avoidance codeSummaryNext stepsBackgroundIn this tutorial you will extend the package created in the first part of the tutorial:Setting up a robot simulation (Basic). The aim is to implement a ROS 2 node that avoids obstacles using the robot’s distance sensors. This tutorial focuses on using robot devices with thewebots_ros2_driverinterface.PrerequisitesThis is a continuation of the first part of the tutorial:Setting up a robot simulation (Basic). It is mandatory to start with the first part to set up the custom packages and necessary files.This tutorial is compatible with version 2023.1.0 ofwebots_ros2and Webots R2023b, as well as upcoming versions.Tasks1 Updatingmy_robot.urdfAs mentioned inSetting up a robot simulation


key: chroma:document
string_value:
mentioned inSetting up a robot simulation (Basic),webots_ros2_drivercontains plugins to interface most of Webots devices with ROS 2 directly. These plugins can be loaded using the<device>tag in the URDF file of the robot. Thereferenceattribute should match the Webots devicenameparameter. The list of all existing interfaces and the corresponding parameters can be foundon the devices reference page. For available devices that are not configured in the URDF file, the interface will be automatically created and default values will be used for ROS parameters (e.g.updaterate,topicname, andframename).Inmy_robot.urdfreplace the whole contents with:PythonC++<?xml version="1.0" ?><robotname="My


key: chroma:document
string_value:
contents with:PythonC++<?xml version="1.0" ?><robotname="My robot"><webots><devicereference="ds0"type="DistanceSensor"><ros><topicName>/left_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><devicereference="ds1"type="DistanceSensor"><ros><topicName>/right_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><plugintype="my_package.my_robot_driver.MyRobotDriver"/></webots></robot><?xml version="1.0" ?><robotname="My robot"><webots><devicereference="ds0"type="DistanceSensor"><ros><topicName>/left_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><devicereference="ds1"type="DistanceSensor"><ros><topicName>/right_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><plugintype="my_robot_driver::MyRobotDriver"/></webots></robot>In addition to your custom plugin, thewebots_ros2_driverwill parse the<device>tags referring to theDistanceSensornodes and use the standard parameters in the<ros>tags to enable the sensors and name their topics.2 Creating a ROS node to avoid


key: chroma:document
string_value:
sensors and name their topics.2 Creating a ROS node to avoid obstaclesPythonC++The robot will use a standard ROS node to detect the wall and send motor commands to avoid it. In themy_package/my_package/folder, create a file namedobstacle_avoider.pywith this


key: chroma:document
string_value:
create a file namedobstacle_avoider.pywith this code:importrclpyfromrclpy.nodeimportNodefromsensor_msgs.msgimportRangefromgeometry_msgs.msgimportTwistMAX_RANGE=0.15classObstacleAvoider(Node):def__init__(self):super().__init__('obstacle_avoider')self.__publisher=self.create_publisher(Twist,'cmd_vel',1)self.create_subscription(Range,'left_sensor',self.__left_sensor_callback,1)self.create_subscription(Range,'right_sensor',self.__right_sensor_callback,1)def__left_sensor_callback(self,message):self.__left_sensor_value=message.rangedef__right_sensor_callback(self,message):self.__right_sensor_value=message.rangecommand_message=Twist()command_message.linear.x=0.1ifself.__left_sensor_value<0.9*MAX_RANGEorself.__right_sensor_value<0.9*MAX_RANGE:command_message.angular.z=-2.0self.__publisher.publish(command_message)defmain(args=None):rclpy.init(args=args)avoider=ObstacleAvoider()rclpy.spin(avoider)# Destroy the node explicitly# (optional - otherwise it will be done automatically# when the garbage collector destroys the


key: chroma:document
string_value:
be done automatically# when the garbage collector destroys the node object)avoider.destroy_node()rclpy.shutdown()if__name__=='__main__':main()This node will create a publisher for the command and subscribe to the sensors topics here:self.__publisher=self.create_publisher(Twist,'cmd_vel',1)self.create_subscription(Range,'left_sensor',self.__left_sensor_callback,1)self.create_subscription(Range,'right_sensor',self.__right_sensor_callback,1)When a measurement is received from the left sensor it will be copied to a member field:def__left_sensor_callback(self,message):self.__left_sensor_value=message.rangeFinally, a message will be sent to the/cmd_veltopic when a measurement from the right sensor is received. Thecommand_messagewill register at least a forward speed inlinear.xin order to make the robot move when no obstacle is detected. If any of the two sensors detect an obstacle,command_messagewill also register a rotational speed inangular.zin order to make the robot turn


key: chroma:document
string_value:
a rotational speed inangular.zin order to make the robot turn right.def__right_sensor_callback(self,message):self.__right_sensor_value=message.rangecommand_message=Twist()command_message.linear.x=0.1ifself.__left_sensor_value<0.9*MAX_RANGEorself.__right_sensor_value<0.9*MAX_RANGE:command_message.angular.z=-2.0self.__publisher.publish(command_message)The robot will use a standard ROS node to detect the wall and send motor commands to avoid it. In themy_package/include/my_packagefolder, create a header file namedObstacleAvoider.hppwith this


key: chroma:document
string_value:
create a header file namedObstacleAvoider.hppwith this code:#include<memory>#include"geometry_msgs/msg/twist.hpp"#include"rclcpp/rclcpp.hpp"#include"sensor_msgs/msg/range.hpp"classObstacleAvoider:publicrclcpp::Node{public:explicitObstacleAvoider();private:voidleftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg);voidrightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg);rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtrpublisher_;rclcpp::Subscription<sensor_msgs::msg::Range>::SharedPtrleft_sensor_sub_;rclcpp::Subscription<sensor_msgs::msg::Range>::SharedPtrright_sensor_sub_;doubleleft_sensor_value{0.0};doubleright_sensor_value{0.0};};In themy_package/srcfolder, create a source file namedObstacleAvoider.cppwith this code:#include"my_package/ObstacleAvoider.hpp"#define MAX_RANGE


key: chroma:document
string_value:
0.15ObstacleAvoider::ObstacleAvoider():Node("obstacle_avoider"){publisher_=create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",1);left_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/left_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis->leftSensorCallback(msg);});right_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/right_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis->rightSensorCallback(msg);});}voidObstacleAvoider::leftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){left_sensor_value=msg->range;}voidObstacleAvoider::rightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){right_sensor_value=msg->range;autocommand_message=std::make_unique<geometry_msgs::msg::Twist>();command_message->linear.x=0.1;if(left_sensor_value<0.9*MAX_RANGE||right_sensor_value<0.9*MAX_RANGE){command_message->angular.z=-2.0;}publisher_->publish(std::move(command_message));}intmain(intargc,char*argv[]){rclcpp::init(argc,argv);autoavoider=std::m


key: chroma:document
string_value:
(intargc,char*argv[]){rclcpp::init(argc,argv);autoavoider=std::make_shared<ObstacleAvoider>();rclcpp::spin(avoider);rclcpp::shutdown();return0;}This


key: chroma:document
string_value:
node will create a publisher for the command and subscribe to the sensors topics here:publisher_=create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",1);left_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/left_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis->leftSensorCallback(msg);});right_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/right_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis->rightSensorCallback(msg);});When a measurement is received from the left sensor it will be copied to a member field:voidObstacleAvoider::leftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){left_sensor_value=msg->range;}Finally, a message will be sent to the/cmd_veltopic when a measurement from the right sensor is received. Thecommand_messagewill register at least a forward speed inlinear.xin order to make the robot move when no obstacle is detected. If any of the two sensors detect an obstacle,command_messagewill also register a


key: chroma:document
string_value:
sensors detect an obstacle,command_messagewill also register a rotational speed inangular.zin order to make the robot turn right.voidObstacleAvoider::rightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){right_sensor_value=msg->range;autocommand_message=std::make_unique<geometry_msgs::msg::Twist>();command_message->linear.x=0.1;if(left_sensor_value<0.9*MAX_RANGE||right_sensor_value<0.9*MAX_RANGE){command_message->angular.z=-2.0;}publisher_->publish(std::move(command_message));}3 Updating additional filesYou have to modify these two other files to launch your new node.PythonC++Editsetup.pyand replace'console_scripts'with:'console_scripts':['my_robot_driver = my_package.my_robot_driver:main','obstacle_avoider = my_package.obstacle_avoider:main'],This will add an entry point for theobstacle_avoidernode.EditCMakeLists.txtand add the compilation and installation of theobstacle_avoider:cmake_minimum_required(VERSION3.5)project(my_package)if(NOTCMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD14)endif()# Besides


key: chroma:document
string_value:
Besides the package specific dependencies we also need the `pluginlib` and `webots_ros2_driver`find_package(ament_cmakeREQUIRED)find_package(rclcppREQUIRED)find_package(std_msgsREQUIRED)find_package(geometry_msgsREQUIRED)find_package(pluginlibREQUIRED)find_package(webots_ros2_driverREQUIRED)# Export the plugin configuration filepluginlib_export_plugin_description_file(webots_ros2_drivermy_robot_driver.xml)# Obstacle avoiderinclude_directories(include)add_executable(obstacle_avoidersrc/ObstacleAvoider.cpp)ament_target_dependencies(obstacle_avoiderrclcppgeometry_msgssensor_msgs)install(TARGETSobstacle_avoiderDESTINATIONlib/${PROJECT_NAME})install(DIRECTORYinclude/DESTINATIONinclude)# MyRobotDriver libraryadd_library(${PROJECT_NAME}SHAREDsrc/MyRobotDriver.cpp)target_include_directories(${PROJECT_NAME}PRIVATEinclude)ament_target_dependencies(${PROJECT_NAME}pluginlibrclcppwebots_ros2_driver)install(TARGETS${PROJECT_NAME}ARCHIVEDESTINATIONlibLIBRARYDESTINATIONlibRUNTIMEDESTINATIONbin)# Install additional


key: chroma:document
string_value:
Install additional directories.install(DIRECTORYlaunchresourceworldsDESTINATIONshare/${PROJECT_NAME}/)ament_export_include_directories(include)ament_export_libraries(${PROJECT_NAME})ament_package()Go to the filerobot_launch.pyand replace it


key: chroma:document
string_value:
to the filerobot_launch.pyand replace it with:importosimportlaunchfromlaunch_ros.actionsimportNodefromlaunchimportLaunchDescriptionfromament_index_python.packagesimportget_package_share_directoryfromwebots_ros2_driver.webots_launcherimportWebotsLauncherfromwebots_ros2_driver.webots_controllerimportWebotsControllerdefgenerate_launch_description():package_dir=get_package_share_directory('my_package')robot_description_path=os.path.join(package_dir,'resource','my_robot.urdf')webots=WebotsLauncher(world=os.path.join(package_dir,'worlds','my_world.wbt'))my_robot_driver=WebotsController(robot_name='my_robot',parameters=[{'robot_description':robot_description_path},])obstacle_avoider=Node(package='my_package',executable='obstacle_avoider',)returnLaunchDescription([webots,my_robot_driver,obstacle_avoider,launch.actions.RegisterEventHandler(event_handler=launch.event_handlers.OnProcessExit(target_action=webots,on_exit=[launch.actions.EmitEvent(event=launch.events.Shutdown())],))])This will create


key: chroma:document
string_value:
will create anobstacle_avoidernode that will be included in theLaunchDescription.4 Test the obstacle avoidance codeLaunch the simulation from a terminal in your ROS 2 workspace:LinuxWindowsmacOSFrom a terminal in your ROS 2 workspace run:colcon buildsource install/local_setup.bashros2 launch my_package robot_launch.pyFrom a terminal in your WSL ROS 2 workspace run:colcon buildexport WEBOTS_HOME=/mnt/c/Program\ Files/Webotssource install/local_setup.bashros2 launch my_package robot_launch.pyBe sure to use the/mntprefix in front of your path to the Webots installation folder to access the Windows file system from WSL.In a terminal of the host machine (not in the VM), if not done already, specify the Webots installation folder (e.g./Applications/Webots.app) and start the server using the following commands:export WEBOTS_HOME=/Applications/Webots.apppython3 local_simulation_server.pyNote that the server keeps running once the ROS 2 nodes are ended. You don’t need to restart it every time you want to launch a


key: chroma:document
string_value:
You don’t need to restart it every time you want to launch a new simulation. From a terminal in the Linux VM in your ROS 2 workspace, build and launch your custom package with:cd ~/ros2_wscolcon buildsource install/local_setup.bashros2 launch my_package robot_launch.pyYour robot should go forward and before hitting the wall it should turn clockwise. You can pressCtrl+F10in Webots or go to theViewmenu,OptionalRenderingandShowDistanceSensorRaysto display the range of the distance sensors of the robot.SummaryIn this tutorial, you extended the basic simulation with a obstacle avoider ROS 2 node that publishes velocity commands based on the distance sensor values of the robot.Next stepsYou might want to improve the plugin or create new nodes to change the behavior of the robot. You can also implement a reset handler to automatically restart your ROS nodes when the simulation is reset from the Webots interface:Setting up a Reset Handler.


key: chroma:document
string_value:
Code Examples:

Language: unknown

<?xml version="1.0" ?><robotname="My robot"><webots><devicereference="ds0"type="DistanceSensor"><ros><topicName>/left_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><devicereference="ds1"type="DistanceSensor"><ros><topicName>/right_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><plugintype="my_package.my_robot_driver.MyRobotDriver"/></webots></robot>

Language: unknown

<?xml version="1.0" ?><robotname="My robot"><webots><devicereference="ds0"type="DistanceSensor"><ros><topicName>/left_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><devicereference="ds1"type="DistanceSensor"><ros><topicName>/right_sensor</topicName><alwaysOn>true</alwaysOn></ros></device><plugintype="my_robot_driver::MyRobotDriver"/></webots></robot>


key: chroma:document
string_value:
Language: unknown importrclpyfromrclpy.nodeimportNodefromsensor_msgs.msgimportRangefromgeometry_msgs.msgimportTwistMAX_RANGE=0.15classObstacleAvoider(Node):def__init__(self):super().__init__('obstacle_avoider')self.__publisher=self.create_publisher(Twist,'cmd_vel',1)self.create_subscription(Range,'left_sensor',self.__left_sensor_callback,1)self.create_subscription(Range,'right_sensor',self.__right_sensor_callback,1)def__left_sensor_callback(self,message):self.__left_sensor_value=message.rangedef__right_sensor_callback(self,message):self.__right_sensor_value=message.rangecommand_message=Twist()command_message.linear.x=0.1ifself.__left_sensor_value<0.9*MAX_RANGEorself.__right_sensor_value<0.9*MAX_RANGE:command_message.angular.z=-2.0self.__publisher.publish(command_message)defmain(args=None):rclpy.init(args=args)avoider=ObstacleAvoider()rclpy.spin(avoider)# Destroy the node explicitly# (optional - otherwise it will be done automatically# when the garbage collector destroys the node


key: chroma:document
string_value:
automatically# when the garbage collector destroys the node object)avoider.destroy_node()rclpy.shutdown()if__name__=='__main__':main()


key: chroma:document
string_value:
Language: unknown

self.__publisher=self.create_publisher(Twist,'cmd_vel',1)self.create_subscription(Range,'left_sensor',self.__left_sensor_callback,1)self.create_subscription(Range,'right_sensor',self.__right_sensor_callback,1)

Language: unknown

def__left_sensor_callback(self,message):self.__left_sensor_value=message.range

Language: unknown

def__right_sensor_callback(self,message):self.__right_sensor_value=message.rangecommand_message=Twist()command_message.linear.x=0.1ifself.__left_sensor_value<0.9

MAX_RANGEorself.__right_sensor_value<0.9

MAX_RANGE:command_message.angular.z=

2.0self.__publisher.publish(command_message)

Language: unknown


key: chroma:document
string_value:
Language: unknown

#include<memory>#include"geometry_msgs/msg/twist.hpp"#include"rclcpp/rclcpp.hpp"#include"sensor_msgs/msg/range.hpp"classObstacleAvoider:publicrclcpp::Node{public:explicitObstacleAvoider();private:voidleftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg);voidrightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg);rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtrpublisher_;rclcpp::Subscription<sensor_msgs::msg::Range>::SharedPtrleft_sensor_sub_;rclcpp::Subscription<sensor_msgs::msg::Range>::SharedPtrright_sensor_sub_;doubleleft_sensor_value{0.0};doubleright_sensor_value{0.0};};

Language: unknown

#include"my_package/ObstacleAvoider.hpp"#define MAX_RANGE 0.15ObstacleAvoider::ObstacleAvoider():Node("obstacle_avoider"){publisher_=create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",1);left_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/left_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis


key: chroma:document
string_value:
>leftSensorCallback(msg);});right_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/right_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis

>rightSensorCallback(msg);});}voidObstacleAvoider::leftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){left_sensor_value=msg

>range;}voidObstacleAvoider::rightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){right_sensor_value=msg

>range;autocommand_message=std::make_unique<geometry_msgs::msg::Twist>();command_message

>linear.x=0.1;if(left_sensor_value<0.9

MAX_RANGE||right_sensor_value<0.9

MAX_RANGE){command_message

>angular.z=

2.0;}publisher_

>publish(std::move(command_message));}intmain(intargc,char

argv[]){rclcpp::init(argc,argv);autoavoider=std::make_shared<ObstacleAvoider>();rclcpp::spin(avoider);rclcpp::shutdown();return0;}

Language: unknown


key: chroma:document
string_value:
Language: unknown

publisher_=create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",1);left_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/left_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis

>leftSensorCallback(msg);});right_sensor_sub_=create_subscription<sensor_msgs::msg::Range>("/right_sensor",1,[this](constsensor_msgs::msg::Range::SharedPtrmsg){returnthis

>rightSensorCallback(msg);});

Language: unknown

voidObstacleAvoider::leftSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){left_sensor_value=msg

>range;}

Language: unknown

voidObstacleAvoider::rightSensorCallback(constsensor_msgs::msg::Range::SharedPtrmsg){right_sensor_value=msg

>range;autocommand_message=std::make_unique<geometry_msgs::msg::Twist>();command_message

>linear.x=0.1;if(left_sensor_value<0.9

MAX_RANGE||right_sensor_value<0.9

MAX_RANGE){command_message

>angular.z=

2.0;}publisher_

>publish(std::move(command_message));}


key: chroma:document
string_value:
2.0;}publisher_

>publish(std::move(command_message));}

Language: unknown 'console_scripts':['my_robot_driver = my_package.my_robot_driver:main','obstacle_avoider = my_package.obstacle_avoider:main'],


key: chroma:document
string_value:
Language: unknown cmake_minimum_required(VERSION3.5)project(my_package)if(NOTCMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD14)endif()# Besides the package specific dependencies we also need the `pluginlib` and `webots_ros2_driver`find_package(ament_cmakeREQUIRED)find_package(rclcppREQUIRED)find_package(std_msgsREQUIRED)find_package(geometry_msgsREQUIRED)find_package(pluginlibREQUIRED)find_package(webots_ros2_driverREQUIRED)# Export the plugin configuration filepluginlib_export_plugin_description_file(webots_ros2_drivermy_robot_driver.xml)# Obstacle avoiderinclude_directories(include)add_executable(obstacle_avoidersrc/ObstacleAvoider.cpp)ament_target_dependencies(obstacle_avoiderrclcppgeometry_msgssensor_msgs)install(TARGETSobstacle_avoiderDESTINATIONlib/${PROJECT_NAME})install(DIRECTORYinclude/DESTINATIONinclude)# MyRobotDriver


key: chroma:document
string_value:
MyRobotDriver libraryadd_library(${PROJECT_NAME}SHAREDsrc/MyRobotDriver.cpp)target_include_directories(${PROJECT_NAME}PRIVATEinclude)ament_target_dependencies(${PROJECT_NAME}pluginlibrclcppwebots_ros2_driver)install(TARGETS${PROJECT_NAME}ARCHIVEDESTINATIONlibLIBRARYDESTINATIONlibRUNTIMEDESTINATIONbin)# Install additional directories.install(DIRECTORYlaunchresourceworldsDESTINATIONshare/${PROJECT_NAME}/)ament_export_include_directories(include)ament_export_libraries(${PROJECT_NAME})ament_package()


key: chroma:document
string_value:
Language: unknown

importosimportlaunchfromlaunch_ros.actionsimportNodefromlaunchimportLaunchDescriptionfromament_index_python.packagesimportget_package_share_directoryfromwebots_ros2_driver.webots_launcherimportWebotsLauncherfromwebots_ros2_driver.webots_controllerimportWebotsControllerdefgenerate_launch_description():package_dir=get_package_share_directory('my_package')robot_description_path=os.path.join(package_dir,'resource','my_robot.urdf')webots=WebotsLauncher(world=os.path.join(package_dir,'worlds','my_world.wbt'))my_robot_driver=WebotsController(robot_name='my_robot',parameters=[{'robot_description':robot_description_path},])obstacle_avoider=Node(package='my_package',executable='obstacle_avoider',)returnLaunchDescription([webots,my_robot_driver,obstacle_avoider,launch.actions.RegisterEventHandler(event_handler=launch.event_handlers.OnProcessExit(target_action=webots,on_exit=[launch.actions.EmitEvent(event=launch.events.Shutdown())],))])


key: chroma:document
string_value:
Language: unknown colcon buildsource install/local_setup.bashros2 launch my_package robot_launch.py

Language: unknown colcon buildexport WEBOTS_HOME=/mnt/c/Program\ Files/Webotssource install/local_setup.bashros2 launch my_package robot_launch.py

Language: unknown

export WEBOTS_HOME=/Applications/Webots.apppython3 local_simulation_server.py

Language: unknown cd ~/ros2_wscolcon buildsource install/local_setup.bashros2 launch my_package robot_launch.py


key: chroma:document
string_value:
Title: End

of

Life Distributions

URL: https://docs.ros.org/en/jazzy/Releases/End

of

Life.html

Section: Installation

--------------------------------------------------------------------------------

End-of-Life DistributionsBelow is a list of historic ROS 2 distributions that are no longer supported.Galactic Geochelone (galactic)Foxy Fitzroy (foxy)Eloquent Elusor (eloquent)Dashing Diademata (dashing)Crystal Clemmys (crystal)Bouncy Bolson (bouncy)Ardent Apalone (ardent)Beta 3 (r2b3)Beta 2 (r2b2)Beta 1 (Asphalt)Alphas


key: chroma:document
string_value:
Title: Foxy Fitzroy (foxy)

URL: https://docs.ros.org/en/jazzy/Releases/Release

Foxy

Fitzroy.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Foxy Fitzroy (foxy)Table of ContentsSupported PlatformsInstallationNew features in this ROS 2 releaseChanges in Patch Release 8 (2022-09-28)Launch GroupAction scopes environmentChanges in Patch Release 7 (2022-02-08)Launch set_env frontend behavior changeFix launch frontend parserFix memory leaks and undefined behavior in rmw_fastrtps_dynamic_cppChanges in Patch Release 2 (2020-08-07)Bug in static_transform_publisherChanges since the Eloquent releaseClassic CMake vs. modern CMakeament_export_interfaces replaced by ament_export_targetsrosidl_generator_c|cpp namespace / API changesDefault working directory for ament_add_testDefault Console Logging FormatDefault Console Logging Output Streamlaunch_rosrclcpprclcpp_actionrclpyrmw_connext_cpprvizstd_msgsSecurity featuresKnown IssuesTimeline before the releaseFoxy Fitzroyis the sixth release of ROS 2.Supported PlatformsFoxy Fitzroy is primarily supported on the following platforms:Tier 1 platforms:Ubuntu 20.04 (Focal):amd64andarm64Mac macOS 10.14 (Mojave)Windows


key: chroma:document
string_value:
20.04 (Focal):amd64andarm64Mac macOS 10.14 (Mojave)Windows 10 (Visual Studio 2019)Tier 3 platforms:Ubuntu 20.04 (Focal):arm32Debian Buster (10):amd64,arm64andarm32OpenEmbedded Thud (2.6) / webOS OSE:arm32andx86For more information about RMW implementations, compiler / interpreter versions, and system dependency versions seeREP 2000.InstallationInstall Foxy FitzroyNew features in this ROS 2 releaseDuring the development theFoxy meta-ticketon GitHub contains an up-to-date state of the ongoing high-level tasks as well as references specific tickets with more details.Changes in Patch Release 8 (2022-09-28)Launch GroupAction scopes environmentTheSetEnvironmentVariableaction is now scoped to anyGroupActionit is returned from.For example, consider the following launch


key: chroma:document
string_value:
is returned from.For example, consider the following launch files,PythonXMLimportlaunchfromlaunch.actionsimportSetEnvironmentVariablefromlaunch.actionsimportGroupActionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnlaunch.LaunchDescription([SetEnvironmentVariable(name='my_env_var',value='1'),Node(package='foo',executable='foo',output='screen'),GroupAction([SetEnvironmentVariable(name='my_env_var',value='2'),]),])<launch><set_envname="my_env_var"value="1"/><nodepkg="foo"exec="foo"output="screen"/><group><set_envname="my_env_var"value="2"/></group></launch>Before patch release 8, the nodefoowill start withmy_env_var=2, but now it will start withmy_env_var=1.To opt-out of the new behavior, you can set the argumentscoped=Falseon theGroupAction.Related tickets:ros2#1244launch#630Changes in Patch Release 7 (2022-02-08)Launch set_env frontend behavior changelaunch#468inadvertently changed behavior to the scope of theset_envaction in frontend launch files. Changes to environment variables


key: chroma:document
string_value:
in frontend launch files. Changes to environment variables using theset_envaction are no longer scoped to parentgroupactions, and instead apply globally. Since it was backported, the change affects this release.We consider this change a regression and intend to fix the behavior in the next patch release and in future ROS distributions. We also plan to fix the behavior in Python launch files, which have never scoped setting environment variables properly.Related issues:ros2#1244launch#597Fix launch frontend parserA refactor of the launch frontend parser fixed someissues parsing special characters. As a result, there has been a small behavior change when it comes to parsing strings. For example, previously to pass a number as a string you would have to add extra quotation marks (two sets of quotation marks were needed if using a substitution):<!-- results in the string value "'3'" --><paramname="foo"value="''3''"/>After the refactor, the above will result in the the string"''3''"(note the extra set of


key: chroma:document
string_value:
will result in the the string"''3''"(note the extra set of quotation marks). Now, users should use thetypeattribute to signal that the value should be interpreted as a string:<paramname="foo"value="3"type="str"/>Related pull requests:launch#530launch_ros#265Fix memory leaks and undefined behavior in rmw_fastrtps_dynamic_cppAPI was changed in the following header files:rmw_fastrtps_dynamic_cpp/TypeSupport.hpprmw_fastrtps_dynamic_cpp/TypeSupport_impl.hppThough technically they are publically accessible, it is unlikely people are using them directly. Therefore, we decided to break API in order to fix memory leaks and undefined behavior.The fix was originally submitted inrmw_fastrtps#429and later backported to Foxy inrmw_fastrtps#577.Changes in Patch Release 2 (2020-08-07)Bug in static_transform_publisherDuring the development of Foxy, a bug was introduced into the tf2_ros static_transform_publisher program. The implementation of the order of the Euler angles passed to static_transform_publisher disagrees


key: chroma:document
string_value:
the Euler angles passed to static_transform_publisher disagrees with the documentation. Foxy patch release 2fixesthe order so that the implementation agrees with the documentation (yaw, pitch, roll). For users who have started using the initial Foxy release or patch release 1, this means that any launch files that use static_transform_publisher will have to have the command-line order swapped according to the new order. For users who are coming from ROS 2 Dashing, ROS 2 Eloquent, or ROS 1, no changes need to be made to port to Foxy patch release 2.Changes since the Eloquent releaseClassic CMake vs. modern CMakeIn “classic” CMake a package provides CMake variables like<pkgname>_INCLUDE_DIRSand<pkgname>_LIBRARIESwhen beingfind_package()-ed. Withament_cmakethat is achieved by callingament_export_include_directoriesandament_export_libraries. In combination withament_export_dependencies,ament_cmakeensures that all include directories and libraries of recursive dependencies are concatenated and included in these


key: chroma:document
string_value:
recursive dependencies are concatenated and included in these variables.In “modern” CMake a package provides an interface target instead (commonly named<pkgname>::<pkgname>) which in itself encapsulates all recursive dependencies. In order to export a library target to use modern CMakeament_export_targetsneeds to be called with an export name which is also used when installing the libraries usinginstall(TARGETS<libA><libB>EXPORT<export_name>...). The exported interface targets are available through the CMake variable<pkgname>_TARGETS. For library targets to be exportable like this they must not rely on classic functions affecting global state likeinclude_directories()but set the include directories on the target itself - for the build as well as install environment - using generator expressions, e.g.target_include_directories(<target>PUBLIC"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>""$<INSTALL_INTERFACE:include>").Whenament_target_dependenciesis used to add dependencies to a library target the


key: chroma:document
string_value:
used to add dependencies to a library target the function uses modern CMake targets when they are available. Otherwise it falls back to using classic CMake variables. As a consequence you should only export modern CMake targets if all dependencies are also providing modern CMake targets.Otherwise the exported interface target will contain the absolute paths to include directories / libraries in the generated CMake logic which makes the package non-relocatable.For examples how packages have been updated to modern CMake in Foxy seeros2/ros2#904.ament_export_interfaces replaced by ament_export_targetsThe CMake functionament_export_interfacesfrom the packageament_cmake_export_interfaceshas been deprecated in favor of the functionament_export_targetsin the new packageament_cmake_export_targets. See the GitHub ticketament/ament_cmake#237for more context.rosidl_generator_c|cpp namespace / API changesThe packagesrosidl_generator_candrosidl_generator_cpphave been refactored with many headers and sources moved into


key: chroma:document
string_value:
been refactored with many headers and sources moved into the new packagesrosidl_runtime_candrosidl_runtime_cpp. The intention is to remove run dependencies on the generator packages and therefore the code generation tools using Python. While moving the headers the include paths / namespaces were updated accordingly so in many cases changing include directives from the generator package to the runtime package is sufficient.The generated C / C++ code has also been refactored. The files ending in__struct.h|hpp,__functions.h,__traits.hpp, etc. have been moved into a subdirectorydetailbut most code only includes the header named after the interface without any of these suffixes.Some types regarding string and sequence bounds have also been renamed to match the naming conventions but they aren’t expected to be used in user code (above RMW implementation and type support packages)For more information seeros2/rosidl#446 (for C)andros2/rosidl#447 (for C++).Default working directory for ament_add_testThe default


key: chroma:document
string_value:
C++).Default working directory for ament_add_testThe default working directory for tests added withament_add_testhas been changed toCMAKE_CURRENT_BINARY_DIRto match the behavior of CMakeadd_test. Either update the tests to work with the new default or passWORKING_DIRECTORY${CMAKE_SOURCE_DIR}to restore the previous value.Default Console Logging FormatThe default console logging output format was changed to include the timestamp by default, see:https://github.com/ros2/rcutils/pull/190https://discourse.ros.org/t/ros2-logging-format/11549Default Console Logging Output StreamAs of Foxy, all logging messages at all severity levels get logged to stderr by default. This ensures that logging messages come out immediately, and brings the ROS 2 logging system into alignment with most other logging systems. It is possible to change the stream to stdout at runtime via the RCUTILS_LOGGING_USE_STDOUT environment variable, but all logging messages will still go to the same stream.


key: chroma:document
string_value:
but all logging messages will still go to the same stream. Seehttps://github.com/ros2/rcutils/pull/196for more details.launch_rosNode name and namespace parameters changedTheNodeaction parameters related to naming have been changed:node_namehas been renamed tonamenode_namespacehas been renamed tonamespacenode_executablehas been renamed toexecutableexec_namehas been added for naming the process associated with the node. Previously, users would have used thenamekeyword argument.The old parameters have been deprecated.These changes were made to make the launch frontend more idiomatic. For example, instead of<nodepkg="demo_nodes_cpp"exec="talker"node-name="foo"/>we can now write<nodepkg="demo_nodes_cpp"exec="talker"name="foo"/>This change also applies toComposableNodeContainer,ComposableNode, andLifecycleNode. For examples, see therelevant changes to the demos.Related pull request in launch_ros.rclcppChange in Advanced Subscription Callback SignatureWith the pull


key: chroma:document
string_value:
in Advanced Subscription Callback SignatureWith the pull requesthttps://github.com/ros2/rclcpp/pull/1047the signature of callbacks which receive the message info with the message has changed. Previously it used thermwtypermw_message_info_t, but now uses therclcpptyperclcpp::MessageInfo. The required changes are straightforward, and can be seen demonstrated in these pull requests:https://github.com/ros2/system_tests/pull/423/fileshttps://github.com/ros2/rosbag2/pull/375/fileshttps://github.com/ros2/ros1_bridge/pull/253/filesChange in Serialized Message Callback SignatureThe pull requestros2/rclcpp#1081introduces a new signature of the callbacks for retrieving ROS messages in serialized form. The previously used C-Structrcl_serialized_message_tis being superseded by a C++ data typerclcpp::SerializedMessage.The example nodes indemo_nodes_cpp, namelytalker_serialized_messageas well aslistener_serialized_messagereflect these changes.Breaking change in Node Interface getters’ signatureWith pull


key: chroma:document
string_value:
change in Node Interface getters’ signatureWith pull requestros2/rclcpp#1069, the signature of node interface getters has been modified to return shared ownership of node interfaces (i.e. anstd::shared_ptr) instead of a non-owning raw pointer. Required changes in downstream packages that relied on the previous signature are simple and straightforward: use thestd::shared_ptr::get()method.Deprecate set_on_parameters_set_callbackInstead, use therclcpp::Nodemethodsadd_on_set_parameters_callbackandremove_on_set_parameters_callbackfor adding and removing functions that are called when parameters are set.Related pull request:https://github.com/ros2/rclcpp/pull/1123Breaking change in Publisher getter signatureWith pull requestros2/rclcpp#1119, the signature of publisher handle getter has been modified to return shared ownership of the underlying rcl structure (i.e. anstd::shared_ptr) instead of a non-owning raw pointer. This was necessary to fix a segfault in certain circumstances. Required changes in downstream


key: chroma:document
string_value:
in certain circumstances. Required changes in downstream packages that relied on the previous signature are simple and straightforward: use thestd::shared_ptr::get()method.rclcpp_actionDeprecate ClientGoalHandle::async_result()Using this API, it is possible to run into a race condition causing an exception to be thrown. Instead, prefer to useClient::async_get_result(), which is safer.Seeros2/rclcpp#1120and the connected issue for more info.rclpySupport for multiple on parameter set callbacksUse theNodemethodsadd_on_set_parameters_callbackandremove_on_set_parameters_callbackfor adding and removing functions that are called when parameters are set.The methodset_parameters_callbackhas been deprecated.Related pull requests:https://github.com/ros2/rclpy/pull/457,https://github.com/ros2/rclpy/pull/504rmw_connext_cppConnext 5.1 locator kinds compatibility modeUp to and includingEloquent,rmw_connext_cppwas settingdds.transport.use_510_compatible_locator_kindsproperty totrue. This property is not being forced


key: chroma:document
string_value:
totrue. This property is not being forced anymore, and shared transport communication betweenFoxyand previous releases will stop working. Logs similar to:PRESParticipant_checkTransportInfoMatching:Warning:discoveredremoteparticipant'RTI Administration Console'usingthe'shmem'transportwithclassID16777216. ThisclassIDdoesnotmatchtheclassID2ofthesametransportinthelocalparticipant'talker'. Thesetwoparticipantswillnotcommunicateoverthe'shmem'transport. Checkthevalueoftheproperty'dds.transport.use_510_compatible_locator_kinds'inthelocalparticipant. Seehttps://community.rti.com/kb/what-causes-error-discovered-remote-participantforadditionalinfo.will be observed when this incompatibility happens.If compatibility is needed, it can be set up in an external QoS profiles files containing:<participant_qos><property><value><element><name>dds.transport.use_510_compatible_locator_kinds</name><value>1</value></element></value></property></participant_qos>Remember to set theNDDS_QOS_PROFILESenvironment variable to the QoS


key: chroma:document
string_value:
to set theNDDS_QOS_PROFILESenvironment variable to the QoS profiles file path. For more information, seeHowtoChangeTransportSettingsin5.2.0ApplicationsforCompatibilitywith5.1.0section ofTransport_Compatibility.rvizTools timestamp messages using ROS time‘2D Pose Estimate’, ‘2D Nav Goal’, and ‘Publish Point’ tools now timestamp their messages using ROS time instead of system time, in order for theuse_sim_timeparameter to have an effect on them.Related pull request:https://github.com/ros2/rviz/pull/519std_msgsDeprecation of messagesAlthough discouraged for a long time we have officially deprecated the following messages instd_msgs. There are copies


key: chroma:document
string_value:
deprecated the following messages instd_msgs. There are copies inexample_interfacesstd_msgs/msg/Boolstd_msgs/msg/Bytestd_msgs/msg/ByteMultiArraystd_msgs/msg/Charstd_msgs/msg/Float32std_msgs/msg/Float32MultiArraystd_msgs/msg/Float64std_msgs/msg/Float64MultiArraystd_msgs/msg/Int16std_msgs/msg/Int16MultiArraystd_msgs/msg/Int32std_msgs/msg/Int32MultiArraystd_msgs/msg/Int64std_msgs/msg/Int64MultiArraystd_msgs/msg/Int8std_msgs/msg/Int8MultiArraystd_msgs/msg/MultiArrayDimensionstd_msgs/msg/MultiArrayLayoutstd_msgs/msg/Stringstd_msgs/msg/UInt16std_msgs/msg/UInt16MultiArraystd_msgs/msg/UInt32std_msgs/msg/UInt32MultiArraystd_msgs/msg/UInt64std_msgs/msg/UInt64MultiArraystd_msgs/msg/UInt8std_msgs/msg/UInt8MultiArraySecurity featuresUse of security enclavesAs of Foxy, domain participants are no longer mapped directly to ROS nodes. As a result, ROS 2 security features (which are specific to domain participants) are also no longer mapped directly to ROS nodes. Instead, Foxy introduces the concept of a security “enclave”,


key: chroma:document
string_value:
Instead, Foxy introduces the concept of a security “enclave”, where an “enclave” is a process or group of processes that will share the same identity and access control rules.This means that security artifacts arenotretrieved based on the node name anymore but based on the Security enclave name. A node enclave name can be set by using the ROS argument--enclave, e.g.ros2rundemo_nodes_pytalker--ros-args--enclave/my_enclaveRelated design document:https://github.com/ros2/design/pull/274Note that permissions files are limited by the underlying transport packet size, so grouping many permissions under the same enclave willnotwork if the resulting permissions file exceed 64kB. Related issue[ros2/sros2#228]Renaming of the environment variablesEnvironment variables renamingName in EloquentName in FoxyROS_SECURITY_ROOT_DIRECTORYROS_SECURITY_KEYSTOREROS_SECURITY_NODE_DIRECTORYROS_SECURITY_ENCLAVE_OVERRIDEKnown Issues[ros2/ros2#922]Services’ performance is flaky forrclcppnodes using eProsima Fast-RTPS or ADLINK


key: chroma:document
string_value:
is flaky forrclcppnodes using eProsima Fast-RTPS or ADLINK CycloneDDS as RMW implementation. Specifically, service clients sometimes do not receive the response from servers.[ros2/rclcpp#1212]Ready reentrant Waitable objects can attempt to execute multiple times.Timeline before the releaseA few milestones leading up to the release:NoteThe dates below reflect an extension by roughly two weeks due to the coronavirus pandemic.Wed. April 22nd, 2020API and feature freeze forros_core[1]packages. Note that this includesrmw, which is a recursive dependency ofros_core. Only bug fix releases should be made after this point. New packages can be released independently.Mon. April 29th, 2020 (beta)Updated releases ofdesktop[2]packages available. Testing of the new features.Wed. May 27th, 2020 (release candidate)Updated releases ofdesktop[2]packages available.Wed. June 3rd, 2020Freeze rosdistro. No PRs for Foxy on therosdistrorepo will be merged (reopens after the release announcement).[1]Theros_corevariant described in


key: chroma:document
string_value:
the release announcement).[1]Theros_corevariant described in thevariantsrepository.[2](1,2)Thedesktopvariant described in thevariantsrepository.


key: chroma:document
string_value:
Code Examples:

Language: unknown

importlaunchfromlaunch.actionsimportSetEnvironmentVariablefromlaunch.actionsimportGroupActionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnlaunch.LaunchDescription([SetEnvironmentVariable(name='my_env_var',value='1'),Node(package='foo',executable='foo',output='screen'),GroupAction([SetEnvironmentVariable(name='my_env_var',value='2'),]),])

Language: unknown

<launch><set_envname="my_env_var"value="1"/><nodepkg="foo"exec="foo"output="screen"/><group><set_envname="my_env_var"value="2"/></group></launch>

Language: unknown <!-- results in the string value "'3'" --><paramname="foo"value="''3''"/>

Language: unknown

<paramname="foo"value="3"type="str"/>

Language: unknown

<nodepkg="demo_nodes_cpp"exec="talker"node

name="foo"/>

Language: unknown

<nodepkg="demo_nodes_cpp"exec="talker"name="foo"/>

Language: unknown


key: chroma:document
string_value:
Language: unknown

PRESParticipant_checkTransportInfoMatching:Warning:discoveredremoteparticipant'RTI Administration Console'usingthe'shmem'transportwithclassID16777216.

ThisclassIDdoesnotmatchtheclassID2ofthesametransportinthelocalparticipant'talker'.

Thesetwoparticipantswillnotcommunicateoverthe'shmem'transport.

Checkthevalueoftheproperty'dds.transport.use_510_compatible_locator_kinds'inthelocalparticipant.

Seehttps://community.rti.com/kb/what

causes

error

discovered

remote

participantforadditionalinfo.

Language: unknown

<participant_qos><property><value><element><name>dds.transport.use_510_compatible_locator_kinds</name><value>1</value></element></value></property></participant_qos>


key: chroma:document
string_value:
Title: Humble Hawksbill changelog

URL: https://docs.ros.org/en/jazzy/Releases/Humble

Hawksbill

Complete

Changelog.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Humble Hawksbill changelogThis page is a list of the complete changes in all ROS 2 core packages since the previous release.Table of


key: chroma:document
string_value:
Contentsaction_msgsaction_tutorials_cppaction_tutorials_interfacesaction_tutorials_pyactionlib_msgsament_clang_formatament_clang_tidyament_cmakeament_cmake_autoament_cmake_clang_formatament_cmake_clang_tidyament_cmake_copyrightament_cmake_coreament_cmake_cppcheckament_cmake_cpplintament_cmake_export_definitionsament_cmake_export_dependenciesament_cmake_export_include_directoriesament_cmake_export_interfacesament_cmake_export_librariesament_cmake_export_link_flagsament_cmake_export_targetsament_cmake_flake8ament_cmake_gen_version_hament_cmake_gmockament_cmake_google_benchmarkament_cmake_gtestament_cmake_include_directoriesament_cmake_librariesament_cmake_lint_cmakeament_cmake_mypyament_cmake_noseament_cmake_pclintament_cmake_pep257ament_cmake_pycodestyleament_cmake_pyflakesament_cmake_pytestament_cmake_pythonament_cmake_rosament_cmake_target_dependenciesament_cmake_testament_cmake_uncrustifyament_cmake_versionament_cmake_xmllintament_copyrightament_cppcheckament_cpplintament_flake8ament_index_cppament_index_p


key: chroma:document
string_value:
nt_cppcheckament_cpplintament_flake8ament_index_cppament_index_pythonament_lintament_lint_autoament_lint_cmakeament_lint_commonament_mypyament_packageament_pclintament_pep257ament_pycodestyleament_pyflakesament_uncrustifyament_xmllintbuiltin_interfacescamera_calibration_parserscamera_info_managerclass_loadercommon_interfacescompositioncomposition_interfacesdemo_nodes_cppdemo_nodes_cpp_nativedemo_nodes_pydiagnostic_msgsdomain_coordinatordummy_map_serverdummy_robot_bringupdummy_sensorsexample_interfacesexamples_rclcpp_async_clientexamples_rclcpp_cbg_executorexamples_rclcpp_minimal_action_clientexamples_rclcpp_minimal_action_serverexamples_rclcpp_minimal_clientexamples_rclcpp_minimal_compositionexamples_rclcpp_minimal_publisherexamples_rclcpp_minimal_serviceexamples_rclcpp_minimal_subscriberexamples_rclcpp_minimal_timerexamples_rclcpp_multithreaded_executorexamples_rclcpp_wait_setexamples_rclpy_executorsexamples_rclpy_guard_conditionsexamples_rclpy_minimal_action_clientexamples_rclpy_minimal_action_serverexample


key: chroma:document
string_value:
minimal_action_clientexamples_rclpy_minimal_action_serverexamples_rclpy_minimal_clientexamples_rclpy_minimal_publisherexamples_rclpy_minimal_serviceexamples_rclpy_minimal_subscriberexamples_rclpy_pointcloud_publisherexamples_tf2_pyfastrtps_cmake_modulegeometry_msgsgoogle_benchmark_vendorimage_toolsimage_transportinteractive_markersintra_process_demokdl_parserlaser_geometrylaunchlaunch_pytestlaunch_roslaunch_testinglaunch_testing_ament_cmakelaunch_testing_exampleslaunch_testing_roslaunch_xmllaunch_yamllibcurl_vendorlibstatistics_collectorlibyaml_vendorlifecyclelifecycle_msgslifecycle_pylogging_demomessage_filtersmimick_vendornav_msgspendulum_controlpendulum_msgspluginlibpybind11_vendorpython_cmake_moduleqt_gui_cppquality_of_service_demo_cppquality_of_service_demo_pyrclrcl_actionrcl_interfacesrcl_lifecyclercl_logging_interfacercl_logging_nooprcl_logging_spdlogrcl_yaml_param_parserrclcpprclcpp_actionrclcpp_componentsrclcpp_lifecyclerclpyrcpputilsrcutilsresource_retrieverrmwrmw_connextddsrmw_connextdds_commonrmw_


key: chroma:document
string_value:
tilsresource_retrieverrmwrmw_connextddsrmw_connextdds_commonrmw_connextddsmicrormw_cyclonedds_cpprmw_dds_commonrmw_fastrtps_cpprmw_fastrtps_dynamic_cpprmw_fastrtps_shared_cpprmw_implementationrmw_implementation_cmakerobot_state_publisherros2actionros2bagros2cliros2cli_test_interfacesros2componentros2doctorros2interfaceros2launchros2lifecycleros2lifecycle_test_fixturesros2multicastros2noderos2paramros2pkgros2runros2serviceros2testros2topicros2tracerosbag2rosbag2_compressionrosbag2_compression_zstdrosbag2_cpprosbag2_interfacesrosbag2_performance_benchmarkingrosbag2_pyrosbag2_storagerosbag2_storage_default_pluginsrosbag2_test_commonrosbag2_testsrosbag2_transportrosgraph_msgsrosidl_adapterrosidl_clirosidl_cmakerosidl_default_generatorsrosidl_default_runtimerosidl_generator_crosidl_generator_cpprosidl_generator_dds_idlrosidl_generator_pyrosidl_parserrosidl_runtime_crosidl_runtime_cpprosidl_runtime_pyrosidl_typesupport_crosidl_typesupport_cpprosidl_typesupport_fastrtps_crosidl_typesupport_fastrtps_cpprosidl_typesup


key: chroma:document
string_value:
esupport_fastrtps_crosidl_typesupport_fastrtps_cpprosidl_typesupport_interfacerosidl_typesupport_introspection_crosidl_typesupport_introspection_cpprosidl_typesupport_introspection_testsrpyutilsrqt_guirqt_gui_cpprqt_gui_pyrqt_py_commonrti_connext_dds_cmake_modulerttestrviz2rviz_assimp_vendorrviz_commonrviz_default_pluginsrviz_ogre_vendorrviz_renderingrviz_rendering_testsrviz_visual_testing_frameworksensor_msgssensor_msgs_pyshape_msgsshared_queues_vendorsqlite3_vendorsros2statistics_msgsstd_msgsstd_srvsstereo_msgstest_clitest_cli_remappingtest_communicationtest_interface_filestest_launch_rostest_launch_testingtest_msgstest_quality_of_servicetest_rclcpptest_rmw_implementationtest_securitytest_tf2test_tracetoolstest_tracetools_launchtf2tf2_bullettf2_eigentf2_eigen_kdltf2_geometry_msgstf2_kdltf2_msgstf2_pytf2_rostf2_ros_pytf2_sensor_msgstf2_toolstlsftlsf_cpptopic_monitortopic_statistics_demotracetoolstracetools_launchtracetools_testtracetools_tracetrajectory_msgsturtlesimurdfurdf_parser_pluginvisualization_msgsya


key: chroma:document
string_value:
ajectory_msgsturtlesimurdfurdf_parser_pluginvisualization_msgsyaml_cpp_vendorzstd_vendoraction_msgsUpdate


key: chroma:document
string_value:
maintainers to Chris Lalancette (#130)Contributors: Audrow Nashaction_tutorials_cppUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashaction_tutorials_interfacesUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashaction_tutorials_pyUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashactionlib_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greyament_clang_formatUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_clang_tidyUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)remove google style from clang-tidy default settings, removing need for default config file (#337)Improvements to ament_lint_clang_tidy. (#316)Contributors: Audrow


key: chroma:document
string_value:
to ament_lint_clang_tidy. (#316)Contributors: Audrow Nash, Steven! Ragnarök, William Woodallament_cmakeUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Add ament_cmake_gen_version_h package (#198)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretz, serge-nikulinament_cmake_autoUpdate forthcoming version in changelogFix typo in ament_auto_find_test_dependencies (#363)Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Add ament_auto_add_gtest (#344)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Daisuke Nishimatsu, Joshua Whitley, Shane Loretzament_cmake_clang_formatUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_cmake_clang_tidyUpdate forthcoming version in changelogsUpdate maintainers to Michael


key: chroma:document
string_value:
forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Improvements to ament_lint_clang_tidy. (#316)Contributors: Audrow Nash, Steven! Ragnarökament_cmake_copyrightIncrease the ament_cmake_copyright default timeout. (#355)Update forthcoming version in changelogs[ament_cmake_copyright] Add file exclusion support (#328) * [ament_cmake_copyright] Add file exclusion support In theament_copyrightCMake function, the optional list argumentEXCLUDEcan now be used as an exclusion specifier. * [ament_cmake_copyright] Fix function header typo Remove reference tocppcheckin theEXCLUDEarg description.Update maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancetteament_cmake_coreUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though


key: chroma:document
string_value:
a circular dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Support commands with executable targets (#352)doc/resource_index: Indent list subitems correctly (#342)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Michal Sojka, Scott K Logan, Shane Loretzament_cmake_cppcheckUpdate forthcoming version in changelogs[ament_cmake_cppcheck] Fix file exclusion behavior (#329) TheEXCLUDEargument of theament_cppcheckCMake function is a list, i.e. a multi-value keyword. As such, it needs to be placed out of the one-value keywords from thecmake_parse_argumentsfunction call.Update maintainers to Michael Jeronimo and Michel Hidalgo (#340)Add cppcheck libraries option (#323) * adding ament_cppcheck libraries option * pass libraries option via CMake Co-authored-by: William Wedler


key: chroma:document
string_value:
pass libraries option via CMake Co-authored-by: William Wedler <william.wedler@resquared.com>Contributors: Abrar Rahman Protyasha, Audrow Nash, Willament_cmake_cpplintUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_cmake_export_definitionsUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_export_dependenciesUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3


key: chroma:document
string_value:
to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Scott K Logan, Shane Loretzament_cmake_export_include_directoriesUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_export_interfacesUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_export_librariesUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t automatically


key: chroma:document
string_value:
between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Add note regarding interface libraries (#339)Update maintainers (#336)Contributors: Audrow Nash, Bjar Ne, Chris Lalancette, Scott K Logan, Shane Loretzament_cmake_export_link_flagsUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_export_targetsUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_flake8Update forthcoming version in changelogsUpdate maintainers to Michael


key: chroma:document
string_value:
forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Add custom config file support for flake8 (#331)Contributors: Audrow Nash, Kenji Miyakeament_cmake_gen_version_hAdd ament_generate_version_header and deprecate ament_cmake_gen_version_h (#377)Update forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Add ament_cmake_gen_version_h package (#198)Contributors: Audrow Nash, Shane Loretz, serge-nikulinament_cmake_gmockUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_google_benchmarkUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t


key: chroma:document
string_value:
dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Scott K Logan, Shane Loretzament_cmake_gtestUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_include_directoriesUpdate forthcoming version in changelogMake ament_include_directories_order a function to allow paths with backslashes on windows. (#371) * Repalce backslashes with forward slashes on Windows * Typo * Replace slashes in ARGN * Don’t quote * Check ARGN has values before trying to string(REPLACE them * Make ament_include_directories_order a functionUpdate maintainers to


key: chroma:document
string_value:
ament_include_directories_order a functionUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_librariesUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Scott K Logan, Shane Loretzament_cmake_lint_cmakeUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_cmake_mypyImprove documentation by clarifying the


key: chroma:document
string_value:
Nashament_cmake_mypyImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_cmake_noseUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Support commands with executable targets (#352)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_pclintImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_cmake_pep257Improve documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_cmake_pycodestyleImprove


key: chroma:document
string_value:
Audrow Nash, Bi0T1Nament_cmake_pycodestyleImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_cmake_pyflakesUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_cmake_pytestUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Fix misleading comment (#361)Use FindPython3 instead of FindPythonInterp (#355)Support commands with executable targets (#352)Mention other platforms in ‘pytest/pytest-cov not found’ warning (#337)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Christophe Bedard, Shane Loretzament_cmake_pythonUse sysconfig directly to determine python lib dir (#378)Update forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters


key: chroma:document
string_value:
linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Make ament_cmake_python symlink for symlink installs only (#357)Use FindPython3 instead of FindPythonInterp (#355)Make ament_python_install_package() match setuptools’ egg names. (#338)Drop ament_cmake_python outdated tests. (#340)Update maintainers (#336)Make ament_python_install_package() install console_scripts (#328)Contributors: Audrow Nash, Chris Lalancette, Michel Hidalgo, Scott K Logan, Shane Loretzament_cmake_rosRefactor domain_coordinator API to use a context manager (#12)Contributors: Timo Röhlingament_cmake_target_dependenciesUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of


key: chroma:document
string_value:
Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Fix bug packages with multiple configurations (#318)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_testUpdate forthcoming version in changelogResolve various ament_lint linter violations (#360) We can’t add ament_lint linters in ament_cmake in the traditional way without creating a circular dependency between the repositories. Even though we can’t automatically enforce linting, it’s still a good idea to try to keep conformance where possible.Update maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Scott K Logan, Shane Loretzament_cmake_uncrustifyUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_cmake_uncrustify] Add file exclude support (#330) In theament_uncrustifyCMake function, the optional


key: chroma:document
string_value:
(#330) In theament_uncrustifyCMake function, the optional list argumentEXCLUDEcan now be used as an exclusion specifier.Contributors: Abrar Rahman Protyasha, Audrow Nashament_cmake_versionUpdate forthcoming version in changelogUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#362)Use FindPython3 instead of FindPythonInterp (#355)Update maintainers (#336)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzament_cmake_xmllintUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_copyrightFix importlib_metadata warning on Python 3.10. (#365)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_copyright] Fix file exclusion behavior (#327) * [ament_copyright] Fix file exclusion behavior This commit fixes the faulty file exclusion behavior reported inhttps://github.com/ament/ament_lint/issues/326. Specifically, the exclusion list is matched against traversed


key: chroma:document
string_value:
Specifically, the exclusion list is matched against traversed files in thecrawlermodule. Changes inspired byhttps://github.com/ament/ament_lint/pull/299/. * Update excluded file path in copyright tests Since file names are not indiscriminately matched throughout the search tree anymore, the excluded files listed in the copyright tests need to be updated relative to the root of the package. * Add test cases to check exclusion behavior Specifically, these tests check for: - Incorrect exclusion of single filenames. - Correct exclusion of relatively/absolutely addressed filenames. - Correct exclusion of wildcarded paths. * Add unit tests for crawler module These unit tests make sure both search and exclusion behaviors are correctly demonstrated by theament_copyright.crawlermodule.Add SPDX identifiers to the licenses. (#315)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancetteament_cppcheckDisable cppcheck 2.x. (#345)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and


key: chroma:document
string_value:
version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Add cppcheck libraries option (#323) * adding ament_cppcheck libraries option * pass libraries option via CMake Co-authored-by: William Wedler <william.wedler@resquared.com>Contributors: Audrow Nash, Chris Lalancette, Willament_cpplintignore NOLINT comments with categories that come from clang-tidy (#339)Update forthcoming version in changelogsReapply patches Reapply parts of 232428752251de61e84ef013bcd643e35eb9038d that are still relevant.Update cpplint version Point to the forkhttps://github.com/cpplint/cpplintContains updates for modern C++ standards (e.g. C++14 and C++17).Update maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_copyright] Fix file exclusion behavior (#327) * [ament_copyright] Fix file exclusion behavior This commit fixes the faulty file exclusion behavior reported inhttps://github.com/ament/ament_lint/issues/326. Specifically, the exclusion list is matched against traversed files in


key: chroma:document
string_value:
the exclusion list is matched against traversed files in thecrawlermodule. Changes inspired byhttps://github.com/ament/ament_lint/pull/299/. * Update excluded file path in copyright tests Since file names are not indiscriminately matched throughout the search tree anymore, the excluded files listed in the copyright tests need to be updated relative to the root of the package. * Add test cases to check exclusion behavior Specifically, these tests check for: - Incorrect exclusion of single filenames. - Correct exclusion of relatively/absolutely addressed filenames. - Correct exclusion of wildcarded paths. * Add unit tests for crawler module These unit tests make sure both search and exclusion behaviors are correctly demonstrated by theament_copyright.crawlermodule.Contributors: Abrar Rahman Protyasha, Audrow Nash, Dirk Thomas, Jacob Perron, William Woodallament_flake8Remove use of distutils.version.LooseVersion. (#346)Update forthcoming version in changelogsIgnore .*/_* dirs in ament_flake8 (#335) Other


key: chroma:document
string_value:
in changelogsIgnore .*/_* dirs in ament_flake8 (#335) Other ament_* linters specifically ignore directories starting with a dot or underscore when crawling for files to lint. They also do so implicitly, so this change mimics that same pattern so that the behavior is consistent.Update maintainers to Michael Jeronimo and Michel Hidalgo (#340)Ignore flake8-blind-except B902 (#292)Contributors: Audrow Nash, Chris Lalancette, Scott K Loganament_index_cppInstall includes to include/ (#83)Remove ament_export_include_directories and ament_export_libraries (#81)Contributors: Shane Loretzament_index_pythonPrint warning when get_package_share_directory() does not exist (Fix#74) (#77)Fail lookups on invalid resource names (#69)Add get_package_share_path method (#73)Contributors: David V. Lu, rob-clarkeament_lintUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_lint_autoUpdate forthcoming version in changelogsUpdate maintainers to


key: chroma:document
string_value:
forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_lint_cmakeUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_copyright] Fix file exclusion behavior (#327) * [ament_copyright] Fix file exclusion behavior This commit fixes the faulty file exclusion behavior reported inhttps://github.com/ament/ament_lint/issues/326. Specifically, the exclusion list is matched against traversed files in thecrawlermodule. Changes inspired byhttps://github.com/ament/ament_lint/pull/299/. * Update excluded file path in copyright tests Since file names are not indiscriminately matched throughout the search tree anymore, the excluded files listed in the copyright tests need to be updated relative to the root of the package. * Add test cases to check exclusion behavior Specifically, these tests check for: - Incorrect exclusion of single filenames. - Correct exclusion of relatively/absolutely


key: chroma:document
string_value:
single filenames. - Correct exclusion of relatively/absolutely addressed filenames. - Correct exclusion of wildcarded paths. * Add unit tests for crawler module These unit tests make sure both search and exclusion behaviors are correctly demonstrated by theament_copyright.crawlermodule.Contributors: Abrar Rahman Protyasha, Audrow Nashament_lint_commonUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Fix typo in ament_lint_common/package.xml (#336)Contributors: Audrow Nash, Kenji Miyakeament_mypyImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_packageSet forthcoming for previous versionAdd support for appending to environment variables (#130) This works largely the same as ‘prepend-non-duplicate’, but instead puts the candidate value at the end of the target variable.Update maintainers to


key: chroma:document
string_value:
value at the end of the target variable.Update maintainers to Audrow Nash (#135)Make python executable variable ament_package specific (#134)Contributors: Audrow Nash, Scott K Logan, Shane Loretzament_pclintImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_copyright] Fix file exclusion behavior (#327) * [ament_copyright] Fix file exclusion behavior This commit fixes the faulty file exclusion behavior reported inhttps://github.com/ament/ament_lint/issues/326. Specifically, the exclusion list is matched against traversed files in thecrawlermodule. Changes inspired byhttps://github.com/ament/ament_lint/pull/299/. * Update excluded file path in copyright tests Since file names are not indiscriminately matched throughout the search tree anymore, the excluded files listed in the copyright tests need to be updated relative to the root of the package. * Add test cases to check


key: chroma:document
string_value:
relative to the root of the package. * Add test cases to check exclusion behavior Specifically, these tests check for: - Incorrect exclusion of single filenames. - Correct exclusion of relatively/absolutely addressed filenames. - Correct exclusion of wildcarded paths. * Add unit tests for crawler module These unit tests make sure both search and exclusion behaviors are correctly demonstrated by theament_copyright.crawlermodule.Contributors: Abrar Rahman Protyasha, Audrow Nash, Bi0T1Nament_pep257Improve documentation by clarifying the purpose of different tools (#357)Remove use of distutils.version.LooseVersion. (#346)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1N, Chris Lalancetteament_pycodestyleImprove documentation by clarifying the purpose of different tools (#357)Update forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash,


key: chroma:document
string_value:
Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nash, Bi0T1Nament_pyflakesUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashament_uncrustifyUpdate forthcoming version in changelogs[ament_uncrustify] Fix file exclusion behavior (#334) * [ament_uncrustify] Fix file exclusion behavior This PR fixes the file exclusion behavior reported in#326. Specifically, the exclusion list is matched against files/directories as the search path is traversed. Tries to maintain consistency with#327. * [ament_uncrustify] Add file exclusion tests * [ament_uncrustify] Remove erroneous pytest markerUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)[ament_uncrustify] Add ament_lint tests (#338) * Addament_linttests onament_uncrustify* Address linter warnings inament_uncrustifyContributors: Abrar Rahman Protyasha, Audrow Nashament_xmllintUpdate forthcoming version in changelogsUpdate maintainers to Michael Jeronimo and Michel


key: chroma:document
string_value:
in changelogsUpdate maintainers to Michael Jeronimo and Michel Hidalgo (#340)Contributors: Audrow Nashbuiltin_interfacesUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashcamera_calibration_parsersTests depend on rcpputils (#236)Remove YAML_CPP_DLL define (#231)Export a modern CMake target instead of variables and install includes to include/${PROJECT_NAME} (#218)Update maintainers (#173)Contributors: Akash, Alejandro Hernández Cordero, Shane Loretzcamera_info_managerExport a modern CMake target instead of variables and install includes to include/${PROJECT_NAME} (#218)Update maintainers (#173)Contributors: Alejandro Hernández Cordero, Shane Loretzclass_loaderInstall includes to include/ (#191)Fix include order for cpplint (#192)Update maintainers to Geoffrey Biggs and Michael Carroll (#190)Fix spelling mistake (#184)Contributors: Audrow Nash, David V. Lu!!, Jacob Perron, Shane Loretzcommon_interfacesUpdate maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow


key: chroma:document
string_value:
to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow NashcompositionUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Fixing deprecated subscriber callback warnings (#532)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancettecomposition_interfacesUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashdemo_nodes_cppUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Add how to fix the most vexing parse problem (#541) * use uniform initializationFixing deprecated subscriber callback warnings (#532)Update talker_loaned_message.cpp (#518)Revert “Use sizeof(char) in place for sizeof(void) (#515)” (#516)change how serialized message works with subscription (#497)Use sizeof(char) in place for sizeof(void) (#515)Fix small print issue in allocator tutorial. (#509)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancette, Michel Hidalgo, Tomoya Fujita, William Woodall, Zongbao


key: chroma:document
string_value:
Michel Hidalgo, Tomoya Fujita, William Woodall, Zongbao Fengdemo_nodes_cpp_nativeUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Fix typo in demo_nodes_cpp_native package description (#536)Contributors: Audrow Nash, Víctor Mayoral Vilchesdemo_nodes_pyCleanups in demo_nodes_py. (#555)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Fixed typo executor -> executors (#542)Update python nodes SIGINT handling (#539)Contributors: Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, ori155diagnostic_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greydomain_coordinatorUpdate maintainers to Michel Hidalgo (#13)Refactor domain_coordinator API to use a context manager (#12)Contributors: Audrow Nash, Timo Röhlingdummy_map_serverUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashdummy_robot_bringupUpdate maintainers to


key: chroma:document
string_value:
Audrow Nashdummy_robot_bringupUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashdummy_sensorsUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow Nashexample_interfacesUpdate maintainers to Mabel Zhang (#15)Add changelog (#14)Contributors: Audrow Nash, Ivan Santiago Paunovicexamples_rclcpp_async_clientUpdated maintainers (#329)Add example of how to prune old requests in client API (#322)Contributors: Aditya Pande, Ivan Santiago Paunovicexamples_rclcpp_cbg_executorImprove scheduling configuration of examples_rclcpp_cbg_executor package (#331)Added jitter measurement to examples_rclcpp_cbg_executor. (#328)Fix deprecated subscriber callbacks (#323)Remove use of get_callback_groups(). (#320)Contributors: Abrar Rahman Protyasha, Chris Lalancette, Ralph Langeexamples_rclcpp_minimal_action_clientUpdated maintainers (#329)Contributors: Aditya Pandeexamples_rclcpp_minimal_action_serverUpdated maintainers (#329)Contributors: Aditya


key: chroma:document
string_value:
maintainers (#329)Contributors: Aditya Pandeexamples_rclcpp_minimal_clientUpdated maintainers (#329)Add example of how to prune old requests in client API (#322)Contributors: Aditya Pande, Ivan Santiago Paunovicexamples_rclcpp_minimal_compositionUpdated maintainers (#329)Contributors: Aditya Pandeexamples_rclcpp_minimal_publisherAdd an example about how to use wait_for_all_acked (#316)Updated maintainers (#329)Add try&catch statement to unique network flow publisher example (#313)Add type adaption example (#300)Contributors: Aditya Pande, Audrow Nash, Barry Xu, Tomoya Fujitaexamples_rclcpp_minimal_serviceUpdated maintainers (#329)Contributors: Aditya Pandeexamples_rclcpp_minimal_subscriberUseconst&signature for read-only sub callbacks (#337)Updated maintainers (#329)Fix deprecated subscriber callbacks (#323)Add wait set examples (#315)Add type adaption example (#300)Contributors: Abrar Rahman Protyasha, Aditya Pande, Audrow Nash, carlossvgexamples_rclcpp_minimal_timerUpdated maintainers


key: chroma:document
string_value:
carlossvgexamples_rclcpp_minimal_timerUpdated maintainers (#329)Contributors: Aditya Pandeexamples_rclcpp_multithreaded_executorUpdated maintainers (#329)Fix deprecated subscriber callbacks (#323)Contributors: Abrar Rahman Protyasha, Aditya Pandeexamples_rclcpp_wait_setAdd wait set examples (#315)Contributors: carlossvgexamples_rclpy_executorsUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Update python nodes sigint/sigterm handling (#330)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovicexamples_rclpy_guard_conditionsUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_action_clientUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_action_serverUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow


key: chroma:document
string_value:
maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_clientUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329) * Updated maintainers * Removed authorContributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_publisherUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_serviceUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_minimal_subscriberUpdate maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Contributors: Aditya Pande, Audrow Nashexamples_rclpy_pointcloud_publisherUpdate maintainers to Aditya Pande and Shane Loretz (#332)Contributors: Audrow Nashexamples_tf2_pyUpdate maintainers to Alejandro Hernandez Cordero and Chris Lalancette (#481)Use underscores instead of dashes in setup.cfg. (#403)Contributors: Audrow


key: chroma:document
string_value:
instead of dashes in setup.cfg. (#403)Contributors: Audrow Nashfastrtps_cmake_moduleUpdate maintainers to Shane Loretz (#83)Contributors: Audrow Nashgeometry_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greygoogle_benchmark_vendorAdd git buildtool dependency.Use git hash for google_benchmark_vendor (#20)Update to google benchmark version 1.6.1 (#19)Update maintainers to Audrow Nash (#18)Update google_benchmark to v1.5.3 (#16) 1. Change google_benchmark version from v1.5.2 to v1.5.3. Because v1.5.2 can not build with GCC 11 2. Removed shrink-tz-offset-size.patch because of this patch was merged in google-benchmark repo.Add changelog (#15)Shrink the size of the tz_offset variable. (#13)Update the patching to work on Windows without admin. (#11)Always preserve source permissions in vendor packages. (#12)Update package maintainers. (#10)Upgrade google benchmark from v1.5.1


key: chroma:document
string_value:
package maintainers. (#10)Upgrade google benchmark from v1.5.1 to v1.5.2 to include QNX patch. (#9)Set the SOVERSION on benchmark libraries. (#8)Set minimum criteria for system package. (#3)Work around warnings building Google Benchmark w/Clang. (#2)Initial google_benchmark_vendor package. (#1)Initial commit.Contributors: Ahmed Sobhy, Audrow Nash, Chris Lalancette, Homalozoa X, Ivan Santiago Paunovic, Michel Hidalgo, Scott K Logan, Shane Loretz, Steven! Ragnarökimage_toolsInstall includes to include/${PROJECT_NAME} (#548)Fix include order and relative paths for cpplint (#551)Reduce the number of OpenCV libraries image_tools links against. (#549)Adds copy constructor and assignment operator to ROSCvMatContainer (#546)Fixes for uncrustify 0.72 (#545)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Fixing deprecated subscriber callback warnings (#532)ambigulity: unknown type name ‘nullptr_t’ (#528)Add type masquerading demos (#482)Add support for


key: chroma:document
string_value:
(#528)Add type masquerading demos (#482)Add support for visualizing yuv422 (#499)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancette, Gonzo, Jacob Perron, Shane Loretz, William Woodall, joshua-qnx, xwnbimage_transportImage transport publisher crash fixes (#235)Simple IT plugins shutdown (#225)Remove PLUGINLIB__DISABLE_BOOST_FUNCTIONS definition. (#226)Fix include order for cpplint (#221) Relates tohttps://github.com/ament/ament_lint/pull/324Export a modern CMake target instead of variables and install includes to include/${PROJECT_NAME} (#218)Fix SimpleSubscriberPlugin (#195)Make sure to mark overridden methods as ‘override’. (#192)Expose subscription options (#186)fix mistyping ‘cammera_publisher.hpp -> camera_publisher.hpp’ (#177)Update maintainers (#173)make CameraPublisher::getNumSubscribers() work (#163)Contributors: Alejandro Hernández Cordero, Audrow Nash, Chris Lalancette, Hye-Jong KIM, Ivan Santiago Paunovic, Jacob Perron, Michael Ferguson, RoboTech Vision, Shane


key: chroma:document
string_value:
Jacob Perron, Michael Ferguson, RoboTech Vision, Shane Loretzinteractive_markersDo not publish if context is invalid during shutdown (#89)Install includes to include/ and misc CMake fixes (#85)Fix deprecation warning introduced after client API update (#83)Fix deprecated sub callback warnings (#84)Include tf2_geometry_msgs.hpp instead of the h file. (#82)Contributors: Abrar Rahman Protyasha, Chris Lalancette, Ivan Santiago Paunovic, Jacob Perron, Shane Loretzintra_process_demoAdd opencv_imgproc dependency for cv::putText (#554)Install includes to include/${PROJECT_NAME} (#548)Fix include order and relative paths for cpplint (#551)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Fixing deprecated subscriber callback warnings (#532)Revert “Add type masquerading demos (#482)” (#520)Add type masquerading demos (#482)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancette, Jacob Perron, Shane Loretz, William Woodallkdl_parserDepend on


key: chroma:document
string_value:
Jacob Perron, Shane Loretz, William Woodallkdl_parserDepend on orocos-kdl vendor packages  (#58)Install includes to include/ and misc CMake fixes (#61)Update to uncrustify 0.72 (#60)Contributors: Chris Lalancette, Jacob Perron, Shane Loretzlaser_geometryInstall headers to include/${PROJECT_NAME} (#86)Explicit cast to double to prevent loss of precisionFix Duration casting issue leading to no undistortionFix building on running on Windows Debug (#82)Update python code and tests for ros2 (#80)Contributors: Chris Lalancette, Jonathan Binney, Marco Lampacrescia, Shane LoretzlaunchSandbox environment in tests to fix repeated job failures (#609)Start Python faster in test_execute_processs_shutdown to avoid flakey failures (#608)Fix warnings from importlib_metdata on Python 3.10. (#606)Add boolean substitutions (#598)Support scoping environment variables (#601)Fix awaiting shutdown in launch context (#603)Fix parse respawn var (#569)Make the logged command pretty in ExecuteLocal (#594)‘output’ is expanded as a


key: chroma:document
string_value:
command pretty in ExecuteLocal (#594)‘output’ is expanded as a substitution in XML/YAML files (#577)Skip warning test if warning already happend (#585)Use asyncio.wait with timeout rather than sleep (#576)Make test_parser compatible with Python older than 3.8 (#575)Propagate exceptions of completed actions to launch service main loop (#566)Warn when loading launch extensions fails (#572)Add in two fixes for Jammy (#571)Evaluate math symbols and functions in python expression (#557)Document TimerAction params (#558)Improve launch arguments introspection (#556)Update maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)First prototype of native pytest plugin for launch based tests (#528)Allow for raw path specification in IncludeLaunchDescription (#544)Adding Executable description class (#454)event handlers: Allow to match the target action with a callable and not only with an object instance (#540)Add AppendEnvironmentVariable action (#543)Document EnvironmentVariable substitution


key: chroma:document
string_value:
action (#543)Document EnvironmentVariable substitution resolution context caveat (#541)Feature clear launch configs (#515)Add examples to ExecuteProcess docs (#525)FixDeclareLaunchArgumentxml parsing and constructor (#529)Fix pytest run on Windows (#526)Improving docs (#523)Add filtering mechanism for executable prefix application (#522)Make each parser extension provide a set of file extensions (#516)Add missing exec dependency on PyYAML (#493)Refactor TimerAction to allow RosTimer to extend (#512)Improve (Not)Equals condition type hinting (#510)Contributors: Aditya Pande, Audrow Nash, Cameron Miller, Chris Lalancette, Christophe Bedard, David V. Lu!!, Derek Chopp, HMellor, Immanuel Martini, Ivan Santiago Paunovic, Jacob Perron, Kenji Miyake, Khush Jain, Kosuke Takeuchi, Rebecca Butler, Scott K Logan, Shane Loretz, roger-strain, tumtomlaunch_pytestUpdate maintainers to Aditya Pande and Michel Hidalgo (#559)[launch_pytest] Modify how wait_for_output()/wait_for_stderr() work, add assert_*() alternatives


key: chroma:document
string_value:
work, add assert_*() alternatives (#553)Updated maintainers (#555)[launch_pytest] Fix issue when colcon –retest-until-fail flag is used (#552)First prototype of native pytest plugin for launch based tests (#528)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunoviclaunch_rosFix importlib_metadata warning on Python 3.10. (#307)Use correct namespace when evaluating parameter files for composable nodes (#303)Handle empty strings when evaluating parameters (#300)Add parameter substitution (#297)fix bug in warning when an entry point fails to load (#243)More Helpful Error Messages (#275)Update maintainers in setup.py (#287)Set parameters from file for composable nodes (#281)Update package maintainers (#284)Update node name matcher (#282)Support both parameter file configurations for composable nodes (#259)Handle substitutions in RosTimer (#264)Add SetParametersFromFile action (#260)Properly support ros_args attribute through launch frontends (#253)Add ‘push_ros_namespace’ alias to ‘push-ros-namespace’


key: chroma:document
string_value:
(#253)Add ‘push_ros_namespace’ alias to ‘push-ros-namespace’ (#250)Add ros_arguments option to Node action (#249)Refactor RosTimer to extend TimerAction (#248)ROS Timer Action (#244)Support container in frontend (#235)Fix a small typo in a comment (#237)Better document parameter handling in Node (#234)Make ‘ros2 launch’ work again. (launch #201)Added LaunchLogger class (launch #145)Changed logger.warn (deprecated) to logger.warning. (launch #199)Added Plumb rclpy.init context to get_default_launch_description. (launch #193)Added normalize_parameters and evaluate_paramters. (launch #192)Added normalize_remap_rule and types. (launch #173)Renamed transitions to match changes inlifecycle_msgs(launch #153)Added support for passing parameters as a dictionary to a Node (launch #138)Made various fixes and added tests for remappings passed to Node actions (launch #137)Contributors: Aditya Pande, Audrow Nash, Chris Lalancette, Christophe Bedard, David V. Lu!!, Felix Divo, Jacob Perron, Kenji Miyake, Michel Hidalgo,


key: chroma:document
string_value:
Lu!!, Felix Divo, Jacob Perron, Kenji Miyake, Michel Hidalgo, Rebecca Butler, William Woodalllaunch_testingRemoved the deprecatedready_fnfeature (#589)Added case for instances of ExecuteLocal in resolveProcess function (#587)Add compatitibility with pytest 7 (#592)Renamed three files from example_processes (#573)Fix launch_testing README.md proc keyword to process. (#554) (#560)Declare frontend group dependency & use explicit dependencies in launch_testing (#520)Update maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)First prototype of native pytest plugin for launch based tests (#528)Adding Executable description class (#454)Add a “hello world” style example (#532)Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Khush Jain, Matt Lanting, Shane Loretz, William Woodall, roger-strainlaunch_testing_ament_cmake[launch_testing_ament_cmake] Add test label (#584)Update maintainers to Aditya Pande and Michel Hidalgo (#559)Updated


key: chroma:document
string_value:
maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)Contributors: Aditya Pande, Audrow Nash, Keisuke Shimalaunch_testing_examplesReadded WaitForTopics utility (#333)Final batch of examples (#327)Update maintainers to Aditya Pande and Shane Loretz (#332)Updated maintainers (#329)Reverted WaitForTopics utility usage (#326)Moved examples (#324)Contributors: Aditya Pande, Audrow Nashlaunch_testing_rosAddhzparam totalker.pyto fix wait_for_topic_launch_test (#309)Revert WaitForTopics (#288)Update maintainers in setup.py (#287)Move pytest entrypoints to own module (#278)Update package maintainers (#284)Check that future is done, and always call rclpy.shutdown (#273)Revert “launch testing : Wait for topics to publish (#274)” (#276)Add WaitForTopics utility for waiting on publishers (#274)Remove unused code, Future.result() already raises (#270)Add timeout to wait for service response in example (#271)Add examples (#263)Contributors: Aditya Pande, Audrow Nash, Jacob Perron, Jorge Perez,


key: chroma:document
string_value:
Aditya Pande, Audrow Nash, Jacob Perron, Jorge Perez, Michel Hidalgo, Shane Loretzlaunch_xmlFix sphinx directive to cross-ref Launch method (#605)Add boolean substitutions (#598)Support scoping environment variables (#601)‘output’ is expanded as a substitution in XML/YAML files (#577)Declare frontend group dependency & use explicit dependencies in launch_testing (#520)Update maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)Add AppendEnvironmentVariable action (#543)Feature clear launch configs (#515)FixDeclareLaunchArgumentxml parsing and constructor (#529)Add ‘launch’ to sets of launch file extensions (#518)Make each parser extension provide a set of file extensions (#516)Contributors: Abrar Rahman Protyasha, Aditya Pande, Audrow Nash, Christophe Bedard, Derek Chopp, Ivan Santiago Paunovic, Jacob Perron, Kenji Miyake, Khush Jainlaunch_yamlFix sphinx directive to cross-ref Launch method (#605)Add boolean substitutions (#598)Support scoping environment variables (#601)‘output’


key: chroma:document
string_value:
(#598)Support scoping environment variables (#601)‘output’ is expanded as a substitution in XML/YAML files (#577)Declare frontend group dependency & use explicit dependencies in launch_testing (#520)Update maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)Add AppendEnvironmentVariable action (#543)Feature clear launch configs (#515)Add ‘launch’ to sets of launch file extensions (#518)Make each parser extension provide a set of file extensions (#516)Contributors: Abrar Rahman Protyasha, Aditya Pande, Audrow Nash, Christophe Bedard, Derek Chopp, Jacob Perron, Kenji Miyake, Khush Jainlibcurl_vendorUpdate to curl 7.81. (#74)Update maintainers (#66)Contributors: Audrow Nash, Chris Lalancettelibstatistics_collectorBump pascalgn/automerge-action from 0.14.3 to 0.15.2Bump ros-tooling/setup-ros from 0.2.2 to 0.3.0Bump actions/upload-artifact from 2.3.1 to 3Bump actions/upload-artifact from 2.2.4 to 2.3.1Bump actions/checkout from 2 to 3Bump ros-tooling/setup-ros from 0.2.1 to 0.2.2


key: chroma:document
string_value:
from 2 to 3Bump ros-tooling/setup-ros from 0.2.1 to 0.2.2 (#123)Install includes to include/${PROJECT_NAME} (#122)Bump codecov/codecov-action from 2.0.3 to 2.1.0Bump pascalgn/automerge-action from 0.14.2 to 0.14.3Bump codecov/codecov-action from 2.0.2 to 2.0.3Use rosidl_get_typesupport_target() (#116)Bump codecov/codecov-action from 2.0.1 to 2.0.2Bump codecov/codecov-action from 1.5.2 to 2.0.1Bump actions/upload-artifact from 1 to 2.2.4Bump codecov/codecov-action from 1.5.1 to 1.5.2Bump codecov/codecov-action from 1.3.1 to 1.5.1Bump ros-tooling/setup-ros from 0.2.0 to 0.2.1Bump pascalgn/automerge-action from 0.14.1 to 0.14.2Bump ros-tooling/setup-ros from 0.1 to 0.2.0Bump pascalgn/automerge-action from 0.13.1 to 0.14.1Fix autoapprovePackage.json explicitly owned by emerson to minimize notificationsBump hmarr/auto-approve-action from v2.0.0 to v2.1.0Bump codecov/codecov-action from v1.2.1 to v1.3.1Contributors: Chris Lalancette, Emerson Knapp, Shane Loretz, dependabot[bot]libyaml_vendorAdd a buildtool


key: chroma:document
string_value:
Shane Loretz, dependabot[bot]libyaml_vendorAdd a buildtool dependency on git. (#48)Install headers to include/${PROJECT_NAME} (#46)Merge pull request#43from ros2/update-maintainersUpdate maintainers to Audrow NashContributors: Audrow Nash, Shane Loretz, Steven! RagnaröklifecycleMake lifecycle demo automatically exit when done (#558)Use default on_activate()/on_deactivate() implemenetation of Node (#552)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Fix use of future in lifecycle demo (#534)Fixing deprecated subscriber callback warnings (#532)Contributors: Abrar Rahman Protyasha, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, Shane Loretzlifecycle_msgsUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashlifecycle_pyCreate changelog for lifecycle_pyAdd rclpy lifecycle demo (#547)Contributors: Audrow Nash, Ivan Santiago Paunoviclogging_demoUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Use


key: chroma:document
string_value:
(#543)Additional fixes for documentation in demos. (#538)Use rosidl_get_typesupport_target() (#529)Contributors: Audrow Nash, Chris Lalancette, Shane Loretzmessage_filtersUse RCL_ROS_TIME for message_traits::TimeStamp  (#72)Install includes to include/${PROJECT_NAME} (#71)Update maintainers (#67)Suppress rclcpp deprecation warnings in unit tests (#62)Add missing overrides to subscriber.h (#60)Add lifecycle node support (#59)Correct package.xml and CMakeLists.txt (#58)Expose Subscription Options - V2 (#56)Contributors: Abrar Rahman Protyasha, Audrow Nash, Hunter L. Allen, Kenji Brameld, Michel Hidalgo, Rebecca Butler, Shane Loretzmimick_vendorsupport pi zero (#24)Update maintainers to Geoffrey Biggs (#23)Update to latest commit for Apple M1 support (#20)Contributors: Audrow Nash, Brett Downing, Christophe Bedardnav_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash,


key: chroma:document
string_value:
Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greypendulum_controlFix include order and relative paths for cpplint (#551)Remove the malloc_hook from the pendulum_demo. (#544)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Fix documentation for pendulum_control. (#537)Contributors: Audrow Nash, Chris Lalancette, Jacob Perronpendulum_msgsUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Contributors: Audrow NashpluginlibInstall includes to include/${PROJECT_NAME} and remove ament_target_dependencies calls (#226)Require <memory> (#225)Move LibraryLoadExceptions down a level for more accurate error messages (#221)Update maintainers to Chris Lalancette (#223)extend termination condition to avoid infinite loop if package.xml is not found (#220)Remove deprecated headers. (#217)Contributors: Alberto Soragna, Audrow Nash, Chris Lalancette, David V. Lu!!, Shane Loretzpybind11_vendorUse sha256 hash instead of tag


key: chroma:document
string_value:
Shane Loretzpybind11_vendorUse sha256 hash instead of tag (#12)Install headers to include/${PROJECT_NAME} (#11)Update pybind11 to 2.7.1. (#10) This is the version that is shipped in Ubuntu 22.04.Contributors: Chris Lalancette, Shane Loretzpython_cmake_modulerequire Python 3.6 as we use format strings in various places (#10)Document all variables set by this module (#5)Add changelog (#4)Contributors: Ivan Santiago Paunovic, Shane Loretz, William Woodallqt_gui_cppInstall headers to include${PROJECT_NAME} (#259)Export targets instead of old-style CMake variables (#257)FindPython3 explicitly instead of FindPythonInterp implicitly (#254)Contributors: Shane Loretzquality_of_service_demo_cppInstall includes to include/${PROJECT_NAME} (#548)Fix include order and relative paths for cpplint (#551)Fixes for uncrustify 0.72 (#545)Update maintainers to Audrow Nash and Michael Jeronimo (#543)Additional fixes for documentation in demos. (#538)Fixing deprecated subscriber callback warnings (#532)Initialize message


key: chroma:document
string_value:
subscriber callback warnings (#532)Initialize message correctly (#522)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Jacob Perron, Shane Loretzquality_of_service_demo_pyUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Update python nodes SIGINT handling (#539)Contributors: Audrow Nash, Ivan Santiago Paunovicrcladd content-filtered-topic interfaces (#894)Add additional null check for timer argument (#973)Allow forward slashes within a parameter name rule in argument parsing (#860)Suppress false positive from clang-tidy (#951)Fix missing terminating 0 in rcl_context_impl_t.argv (#969)test_publisher_wait_all_ack depends on rcpputils (#968)Micro-optimizations in rcl (#965)If timer canceled, rcl_timer_get_time_until_next_call returns TIMER_CANCELED (#963)Add Events Executor (#839)Remove fastrtps customization on test_events (#960)Add client/service QoS getters (#941)introduce ROS_DISABLE_LOAN_MSG to disable can_loan_messages. (#949)Install includes it


key: chroma:document
string_value:
to disable can_loan_messages. (#949)Install includes it include/${PROJECT_NAME} (#959)Make rcl_difference_times args const (#955)Update inject_on_return test skipping logic (#953)Fix jump callbacks being called when zero time jump thresholds used (#948)Only change the default logger level if default_logger_level is set (#943)Add Library for wait_for_entity_helpers to deduplicate compilation (#942)Increase Windows timeout 15 -> 25 ms (#940)test should check specified number of entities. (#935)Fix up documentation build for rcl when using rosdoc2 (#932)Include rmw_event_t instead of forward declaring it (#933)Add rcl_publisher_wait_for_all_acked support. (#913)Add tracing instrumentation for rcl_take. (#930)Fix #include in C++ typesupport example in rcl_subscription_init docblock. (#927)Update includes after rcutils/get_env.h deprecation. (#917)Use proper rcl_logging return value type and compare to constant. (#916)Contributors: Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Haowei Wen, Ivan


key: chroma:document
string_value:
Lihui, Chris Lalancette, Christophe Bedard, Haowei Wen, Ivan Santiago Paunovic, Jafar Abdi, Michel Hidalgo, Miguel Company, NoyZuberi, Scott K Logan, Shane Loretz, Tomoya Fujita, William Woodall, iRobot ROS, mauropassercl_actionAdd Events Executor (#839)Install includes it include/${PROJECT_NAME} (#959)Fix up documentation build for rcl_action when using rosdoc2 (#937)Fix expired goals capacity of action server (#931)Wait for action server in rcl_action comm tests. (#919)Contributors: Michel Hidalgo, Shane Loretz, iRobot ROS, spiralrayrcl_interfacesUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashrcl_lifecycleInstall includes it include/${PROJECT_NAME} (#959)[rcl_lifecycle] Do not share transition event message between nodes (#956)Update maintainers to Ivan Paunovic and William Woodall (#952)Fix up documentation build for rcl_lifecycle when using rosdoc2 (#938)Rename variable to fix name shadowing warning (#929)Contributors: Alberto Soragna, Audrow Nash, Ivan Santiago Paunovic, Michel


key: chroma:document
string_value:
Alberto Soragna, Audrow Nash, Ivan Santiago Paunovic, Michel Hidalgo, Shane Loretzrcl_logging_interfaceInstall includes to include/${PROJECT_NAME} (#85)Fix include order for cpplint (#84) Relates tohttps://github.com/ament/ament_lint/pull/324Update maintainers to Chris Lalancette (#83)Fix renamedrcpputilsheader (#81)Add Doxyfile to rcl_logging_interface package (#80)Update includes after rcutils/get_env.h deprecation (#75)Contributors: Abrar Rahman Protyasha, Audrow Nash, Christophe Bedard, Jacob Perron, Michel Hidalgo, Shane Loretzrcl_logging_noopUpdate maintainers to Chris Lalancette (#83)Contributors: Audrow Nashrcl_logging_spdlogFix include order for cpplint (#84) Relates tohttps://github.com/ament/ament_lint/pull/324Update maintainers to Chris Lalancette (#83)Fix renamedrcpputilsheader (#81)Update includes after rcutils/get_env.h deprecation (#75)Contributors: Abrar Rahman Protyasha, Audrow Nash, Christophe Bedard, Jacob Perronrcl_yaml_param_parserInstall includes it include/${PROJECT_NAME}


key: chroma:document
string_value:
includes it include/${PROJECT_NAME} (#959)Update maintainers to Ivan Paunovic and William Woodall (#952)Tweak rcl_yaml_param_parser documentation (#939)Contributors: Audrow Nash, Michel Hidalgo, Shane Loretzrclcppremove DEFINE_CONTENT_FILTER cmake option (#1914)remove things that were deprecated during galactic (#1913)add take_data_by_entity_id API to waitable (#1892)add content-filtered-topic interfaces (#1561)[NodeParameters] Set name in param info pre-check (#1908)Add test-dep ament_cmake_google_benchmark (#1904)Add publish by loaned message in GenericPublisher (#1856)Add missing ament dependency on rcl_interfaces (#1903)Update data callback tests to account for all published samples (#1900)Increase timeout for acknowledgments to account for slower Connext settings (#1901)clang-tidy: explicit constructors (#1782)Add client/service QoS getters (#1784)Fix a bunch more rosdoc2 issues in rclcpp. (#1897)time_until_trigger returns max time if timer is cancelled (#1893)Micro-optimizations in rclcpp


key: chroma:document
string_value:
time if timer is cancelled (#1893)Micro-optimizations in rclcpp (#1896)spin_all with a zero timeout. (#1878)Add RMW listener APIs (#1579)Remove fastrtps customization on tests (#1887)Install headers to include/${PROJECT_NAME} (#1888)Use ament_generate_version_header (#1886)use universal reference to support rvalue. (#1883)fix one subscription can wait_for_message twice (#1870)Add return value version of get_parameter_or (#1813)Cleanup time source object lifetimes (#1867)add is_spinning() method to executor base classCleanup the TypeAdapt tests (#1858)Cleanup includes (#1857)Fix include order and relative paths for cpplint (#1859)Rename stringstream in macros to a more unique name (#1862)Add non transform capabilities for intra-process (#1849)Fix rclcpp documentation build (#1779)Use UninitializedStaticallyTypedParameterException (#1689)Add wait_for_all_acked support (#1662)Add tests for function templates of declare_parameter (#1747)Fixes for uncrustify 0.72 (#1844)use private member to keep the all


key: chroma:document
string_value:
for uncrustify 0.72 (#1844)use private member to keep the all reference underneath. (#1845)Make node base sharable (#1832)Add Clock::sleep_for() (#1828)Synchronize rcl and std::chrono steady clocks in Clock::sleep_until (#1830)Use rclcpp::guard_condition (#1612)Call CMake function to generate version header (#1805)Use parantheses around logging macro parameter (#1820)Remove author by request (#1818)Update maintainers (#1817)min_forward & min_backward thresholds must not be disabled (#1815)Re-add Clock::sleep_until (#1814)Fix lifetime of context so it remains alive while its dependent node handles are still in use (#1754)Add the interface for pre-shutdown callback (#1714)Take message ownership from moved LoanedMessage (#1808)Suppress clang dead-store warnings in the benchmarks. (#1802)Wait for publisher and subscription to match (#1777)Fix unused QoS profile for clock subscription and make ClockQoS the default (#1801)Fix dangerous std::bind capture in TimeSource implementation. (#1768)Fix dangerous std::bind


key: chroma:document
string_value:
in TimeSource implementation. (#1768)Fix dangerous std::bind capture in ParameterEventHandler implementation. (#1770)Handle sigterm, in the same way sigint is being handled. (#1771)rclcpp::Node copy constructor: make copy of node_waitables_ member. (#1799)Extend NodeGraph to match what rcl provides. (#1484)Context::sleep_for(): replace recursion with do-while to avoid potential stack-overflow. (#1765)extend_sub_namespace(): Verify string::empty() before calling string::front(). (#1764)Deprecate thevoidshared_ptr<MessageT>subscription callback signatures. (#1713)Remove can_be_nullptr assignment check for QNX case. (#1752)Update client API to be able to remove pending requests. (#1734)Fix: Allow to add a node while spinning in the StaticSingleThreadedExecutor. (#1690)Add tracing instrumentation for executor and message taking. (#1738)Fix: Reset timer trigger time before execute in StaticSingleThreadedExecutor. (#1739)Use FindPython3 and make python3 dependency explicit. (#1745)Use


key: chroma:document
string_value:
FindPython3 and make python3 dependency explicit. (#1745)Use rosidl_get_typesupport_target(). (#1729)Fix returning invalid namespace if sub_namespace is empty. (#1658)Add free function to wait for a subscription message. (#1705)Use rcpputils/scope_exit.hpp and remove rclcpp/scope_exit.hpp. (#1727)Remove unsafe get_callback_groups API. Callers should change to using for_each_callback_group(), or store the callback groups they need internally.Add in callback_groups_for_each. The main reason to add this method in is to make accesses to the callback_groups_ vector thread-safe.  By having a callback_groups_for_each that accepts a std::function, we can just have the callers give us the callback they are interested in, and we can take care of the locking. The rest of this fairly large PR is cleaning up all of the places that use get_callback_groups() to instead use callback_groups_for_each().Use a different mechanism to avoid timers being scheduled multiple times by the MultiThreadedExecutor (#1692)Fix windows CI


key: chroma:document
string_value:
times by the MultiThreadedExecutor (#1692)Fix windows CI (#1726) Fix bug in AnyServiceCallback introduced in#1709.Support to defer to send a response in services. (#1709) Signed-off-by: Ivan Santiago Paunovic <ivanpauno@ekumenlabs.com>Fix documentation bug. (#1719) Signed-off-by: William Woodall <william@osrfoundation.org>Removed left overis_initialized()implementation (#1711) Leftover fromhttps://github.com/ros2/rclcpp/pull/1622Fixed declare parameter methods for int and float vectors (#1696)Cleaned up implementation of the intra-process manager (#1695)Added the node name to an executorruntime_error(#1686)Fixed a typo “Attack” -> “Attach” (#1687)Removed use of std::allocator<>::rebind (#1678) rebind is deprecated in c++17 and removed in c++20Allow declare uninitialized parameters (#1673)Fix syntax issue with gcc (#1674)[service] Don’t use a weak_ptr to avoid leaking (#1668)Fix doc typo (#1663)[rclcpp] Type Adaptation feature (#1557)Do not attempt to use void allocators for memory allocation. (#1657)Keep


key: chroma:document
string_value:
to use void allocators for memory allocation. (#1657)Keep custom allocator in publisher and subscription options alive. (#1647)Fix get_publishers_subscriptions_info_by_topic test in test_node.cpp (#1648)Use OnShutdown callback handle instead of OnShutdown callback (#1639)use dynamic_pointer_cast to detect allocator mismatch in intra process manager (#1643)Contributors: Abrar Rahman Protyasha, Ahmed Sobhy, Alberto Soragna, Andrea Sorbini, Audrow Nash, Barry Xu, Bi0T1N, Chen Lihui, Chris Lalancette, Christophe Bedard, Doug Smith, Emerson Knapp, Gaël Écorchard, Geoffrey Biggs, Gonzo, Grey, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Karsten Knese, Kenji Miyake, M. Hofstätter, M. Mostafa Farzan, Mauro Passerino, Michel Hidalgo, Miguel Company, Nikolai Morin, Petter Nilsson, Scott K Logan, Shane Loretz, Steve Macenski, Tomoya Fujita, William Woodall, Yong-Hao Zou, iRobot ROS, livanov93, mauropasserclcpp_actionremove things that were deprecated during galactic (#1913)add take_data_by_entity_id API to


key: chroma:document
string_value:
during galactic (#1913)add take_data_by_entity_id API to waitable (#1892)Fix rosdoc2 issues (#1897)Add RMW listener APIs (#1579)Install headers to include/${PROJECT_NAME} (#1888)Fix include order and relative paths for cpplint (#1859)Fixes for uncrustify 0.72 (#1844)Use rclcpp::guard_condition (#1612)Remove author by request (#1818)Update maintainers (#1817)Suppress clang dead-store warnings in the benchmarks. (#1802)Deprecate thevoidshared_ptr<MessageT>subscription callback signatures (#1713)Use rcpputils/scope_exit.hpp and remove rclcpp/scope_exit.hpp. (#1727)Fixed occasionally missing goal result caused by race condition (#1677)Bump the benchmark timeout for benchmark_action_client (#1671)Returns CancelResponse::REJECT while goal handle failed to transit to CANCELING state (#1641)Fix action server deadlock issue that caused by other mutexes locked in CancelCallback (#1635)Contributors: Abrar Rahman Protyasha, Alberto Soragna, Chris Lalancette, Christophe Bedard, Jacob Perron, Kaven Yau, Shane Loretz,


key: chroma:document
string_value:
Christophe Bedard, Jacob Perron, Kaven Yau, Shane Loretz, Tomoya Fujita, William Woodall, iRobot ROS, mauropasserclcpp_componentsSelect executor in node registration (#1898)Fix rosdoc2 issues in rclcpp (#1897)Fix bugprone-exception-escape in node_main.cpp.in (#1895)small improvements to node_main.cpp.inInstall headers to include/${PROJECT_NAME} (#1888)Use spin() in component_manager_isolated.hpp (#1881)add use_global_arguments for node options of component nodes (#1776)Add rclcpp_components::component (#1855)Add parameter to configure number of thread (#1708)remove RCLCPP_COMPONENTS_PUBLIC in class ComponentManagerIsolated (#1843)create component_container_isolated (#1781)Remove author by request (#1818)Update maintainers (#1817)Suppress clang dead-store warnings in the benchmarks. (#1802)Update client API to be able to remove pending requests. (#1734)Deprecate method names that use CamelCase in rclcpp_components. (#1716)Added a hook to generate node options in ComponentManager (#1702)Contributors: Alberto


key: chroma:document
string_value:
node options in ComponentManager (#1702)Contributors: Alberto Soragna, Chris Lalancette, Daisuke Nishimatsu, Hirokazu Ishida, Ivan Santiago Paunovic, Jacob Perron, Rebecca Butler, Shane Loretz, gezprclcpp_lifecycleremove things that were deprecated during galactic (#1913)Fix rosdoc2 issues (#1897)Install headers to include/${PROJECT_NAME} (#1888)LifecycleNode::on_deactivate deactivate all managed entities. (#1885)Automatically transition lifecycle entities when node transitions (#1863)Remove author by request (#1818)Update maintainers (#1817)Suppress clang dead-store warnings in the benchmarks. (#1802)Update forward declarations ofrcl_lifecycletypes (#1788)Deprecate thevoidshared_ptr<MessageT>subscription callback signatures (#1713)Update client API to be able to remove pending requests. (#1734)Change log level for lifecycle_publisher. (#1715)Fix: RCLCPP_PUBLIC -> RCLCPP_LIFECYCLE_PUBLIC (#1732)Use rcpputils/scope_exit.hpp and remove rclcpp/scope_exit.hpp (#1727)Remove unsafe get_callback_groups API.


key: chroma:document
string_value:
(#1727)Remove unsafe get_callback_groups API. Callers should change to using for_each_callback_group(), or store the callback groups they need internally.Add in callback_groups_for_each. The main reason to add this method in is to make accesses to the callback_groups_ vector thread-safe.  By having a callback_groups_for_each that accepts a std::function, we can just have the callers give us the callback they are interested in, and we can take care of the locking. The rest of this fairly large PR is cleaning up all of the places that use get_callback_groups() to instead use callback_groups_for_each().Fix destruction order in lifecycle benchmark (#1675)[rclcpp] Type Adaptation feature (#1557)Contributors: Abrar Rahman Protyasha, Alberto Soragna, Audrow Nash, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Michel Hidalgo, Shane Loretz, Tomoya Fujita, William WoodallrclpyMake rclpy dependencies explicit (#906)Avoid exception in Node constructor when use override for ‘use_sim_time’


key: chroma:document
string_value:
in Node constructor when use override for ‘use_sim_time’ (#896)time_until_next_call returns max if timer is canceled. (#910)Properly implement action server/client handle cleanup. (#905)Make sure to take out contexts on Action{Client,Server}. (#904)Make sure to free the goal_status_array when done using it. (#902)Bugfix to Node.destroy_rate() result (#901)Remove fastrtps customization on tests (#895)fix typo (#890)Document that Future.result() may return None (#884)update doc release number (#885)Fix multi-threaded race condition in client.call_async (#871)Fix include order for cpplint (#877)Bugfix/duration to msg precision (#876)Update to pybind11 2.7.1 (#874)QoS history depth is only available with KEEP_LAST (#869)Implement managed nodes. (#865)Make rclpy.try_shutdown() behavior to follow rclpy.shutdown() more closely. (#868)Update TopicEndpointTypeEnum.__str__() method to include history kind and history depth. (#849)Add Clock.sleep_for() using Clock.sleep_until(). (#864)Add Clock.sleep_until() (#858)Add


key: chroma:document
string_value:
Clock.sleep_until(). (#864)Add Clock.sleep_until() (#858)Add __enter__ and __exit__ to JumpHandle. (#862)Don’t override rclpy._rclpy_pybind11 docs. (#863)Improve JumpThreshold documentation and forbid zero durations. (#861)Fix time.py and clock.py circular import. (#860)Make context.on_shutdown() allow free functions. (#859)Fix automatically declared parameters descriptor type. (#853)Shutdown asynchronously when sigint is received. (#844)Update maintainers. (#845)Add entities to callback group before making them available to the executor to avoid a race condition. (#839)Avoid race condition in client.call(). (#838)Handle sigterm. (#830)Use pybind11 for signal handling, and delete now unused rclpy_common, pycapsule, and handle code. (#814)Fix memory leak in Service::take_request() and Client::take_response(). (#828)Add Publisher.wait_for_all_acked(). (#793)Only add one done callback to a future in Executor. (#816)Add convert function from ParameterValue to Python builtin. (#819)Call Context._logging_fini() in


key: chroma:document
string_value:
to Python builtin. (#819)Call Context._logging_fini() in Context.try_shutdown(). (#800)Lift LoggingSeverity enum as common dependency to logging and rcutils_logger modules (#785)Set Context.__context to None in __init__(). (#812)Remove unused function make_mock_subscription. (#809)Removed common.c/h (#789)Allow declaring uninitialized parameters (#798)Reject cancel request if failed to transit to CANCEL_GOAL state (#791)Deleted handle as it should no longer be used (#786)Removed some functions in common.c and replaced them in utils.cpp (#787)Moved exception.cpp/hpp to the _rclpy_pybind11 module (#788)Print ‘Infinite’ for infinite durations in topic endpoint info (#722)Break log function execution ASAP if configured severity is too high (#776)Convert Node and Context to use C++ Classes (#771)Misc action server improvements (#774)Misc action goal handle improvements (#767)Convert Guardcondition to use C++ classes (#772)Removed unused structsrclpy_client_tandrclpy_service_t(#770)Convert WaitSet to use C++


key: chroma:document
string_value:
WaitSet to use C++ Classes (#769)Convert ActionServer to use C++ Classes (#766)Convert ActionClient to use C++ classes (#759)Use py::class_ for rcl_action_goal_handle_t (#751)Convert Publisher and Subscription to use C++ Classes (#756)Rename QoS*Policy enum’s to *Policy (#379)Use params from node ‘/**’ from parameter YAML file (#370)Updated to use params from node ‘/**’ from parameter YAML file. (#399)Contributors: Alejandro Hernández Cordero, Anthony, Artem Shumov, Auguste Lalande, Barry Xu, Chris Lalancette, Emerson Knapp, Erki Suurjaak, Greg Balke, Ivan Santiago Paunovic, Jacob Perron, Lei Liu, Louise Poubel, Miguel Company, Shane Loretz, Tomoya Fujita, ksuszkarcpputilsInstall includes to include/${PROJECT_NAME} (#160)Fix include order for cpplint (#158)[path] Declare the default assignment operator (#156)Fixes for uncrustify 0.72 (#154)Fix the BSD license headers to use the standard one. (#153)Update maintainers to Chris Lalancette (#152)Add checked convert_to_nanoseconds() function (#145)Add missing


key: chroma:document
string_value:
checked convert_to_nanoseconds() function (#145)Add missing sections in docs/FEATURES.md TOC (#151)[env] Addset_env_varfunction (#150)Add missing cstddef include (#147)Add accumulator test to CMakeLists.txt (#144)rcpputils::fs: Fix doxygen parameter identifier (#142)Make thread safety macro C++ standards compliant (#141)Fix API documentation for cleanrosdoc2build (#139)ImprovercppmathDoxygen documentation (#138)Improve documentation of utilities in docs/FEATURES.md (#137)Includercppmathutilities in docs/FEATURES.md (#136)FixIllegalStateExceptionreference in FEATURES (#135)migrate rolling mean from ros2_controllers to rcppmath (#133)Update includes after rcutils/get_env.h deprecation (#132)Contributors: Abrar Rahman Protyasha, Audrow Nash, Barry Xu, Chris Lalancette, Christophe Bedard, Jacob Perron, Karsten Knese, Octogonapus, Shane LoretzrcutilsUpdate launch test for change related to enviroment variables in launch (#354)Remove dst_size from strlen usage (#353)Install headers to include${PROJECT_NAME}


key: chroma:document
string_value:
strlen usage (#353)Install headers to include${PROJECT_NAME} (#351)Use static_cast instead of C-style cast (#349)Fixing up documentation build when using rosdoc2 (#344)Stop double-defining structs. (#333)Use FindPython3 explicitly instead of FindPythonInterp implicitly (#345)Fix build on Android (#342)Deprecate get_env.h and move content to env.{h,c} (#340)Contributors: Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Shane Loretz, William Woodallresource_retrieverInstall headers to include/${PROJECT_NAME} (#72)Fix include order for cpplint (#69)Update maintainers (#66)Remove the deprecated retriever.h header (#63)Contributors: Audrow Nash, Chris Lalancette, Jacob Perron, Shane LoretzrmwAdd content filtered topics support. (#302)Add sequence numbers to rmw_message_info_t. (#318)Add rmw_feature_supported(). (#318)Add EventsExecutor (#286)Document that rmw_wait() SHOULD use a monotonic clock (#316)Install headers to include/${PROJECT_NAME} (#317)Update


key: chroma:document
string_value:
(#316)Install headers to include/${PROJECT_NAME} (#317)Update rmw_server_is_available() API documentation. (#277)Add client/service QoS getters. (#314)Fix up documentation build for rmw when using rosdoc2 (#313)Fix up errors in doxygen documentation (#311)Fix copy-paste error in API doc for rmw_get_gid_for_publisher (#310)Add rmw_publisher_wait_for_all_acked support. (#296)Contributors: Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Michel Hidalgo, Shane Loretz, iRobot ROS, mauropassermw_connextddsExclude missing sample info fields when building rmw_connextddsmicro (#79)Update launch_testing_ros output filter prefixes for Connext6 (#80)Add support for user-specified content filters (#68)add stub for content filtered topic (#77)Add rmw listener apis (#44)Add client/service QoS getters. (#67)Add rmw_publisher_wait_for_all_acked support. (#20)Contributors: Andrea Sorbini, Barry Xu, Chen Lihui, Ivan Santiago Paunovic, iRobot ROS, mauropassermw_connextdds_commonExclude


key: chroma:document
string_value:
Paunovic, iRobot ROS, mauropassermw_connextdds_commonExclude missing sample info fields when building rmw_connextddsmicro (#79)Properly initialize CDR stream before using it for filtering (#81)Add support for user-specified content filters (#68)add stub for content filtered topic (#77)Add sequence numbers to message info structure (#74)Add rmw listener apis (#44)Fix cpplint errors (#69)Add client/service QoS getters. (#67)Update rmw_context_impl_t definition (#65)Use the new rmw_dds_common::get_security_files API (#61)Add rmw_publisher_wait_for_all_acked support. (#20)Support extended signature formessage_type_support_callbacks_t::max_serialized_size()fromrosidl_typesupport_fastrtps_cpp. (#14)Update includes after rcutils/get_env.h deprecation. (#55)Always modify UserObjectQosPolicy regardless of override policy. (#53)Improved conversion of time values between ROS and DDS formats. (#43)Allow sharing DomainParticipant with C++ applications. (#25)Add environment variable to control override of


key: chroma:document
string_value:
(#25)Add environment variable to control override of DomainParticipantQos. (#41)Contributors: Andrea Sorbini, Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Michel Hidalgo, Miguel Company, iRobot ROS, mauropassermw_connextddsmicroExclude missing sample info fields when building rmw_connextddsmicro (#79)Add support for user-specified content filters (#68)add stub for content filtered topic (#77)Add sequence numbers to message info structure (#74)Add rmw listener apis (#44)Add client/service QoS getters. (#67)Add rmw_publisher_wait_for_all_acked support. (#20)Contributors: Andrea Sorbini, Barry Xu, Chen Lihui, Ivan Santiago Paunovic, iRobot ROS, mauropassermw_cyclonedds_cppFix get_topic_name and handling long service namesAdd serialization for SDK_DATAAdditional checks for loan APIDepend on just rmw_dds_common::rmw_dds_common_library (#385)Fix error message in rmw_init_options_copy(). (#380)Add content filter topic feature empty stub. (#289)Update to work


key: chroma:document
string_value:
content filter topic feature empty stub. (#289)Update to work with Cyclone 0.9.0 and Iceoryx 2.0 (#379)Fill message info sequence numbers as unsupported, add rmw_feature_supported() implementation. (#381)Fix a warning by making a pointer nullptr. (#375)Bump QDs to QL2 (#371)Add EventsExecutor (#256)Call dissociate_reader in rmw_destroy_subscriptionWrap creation of new serdata_rmw within a try-catch blockFix memory leak in error scenario on the publish side with SHMFix memory leaks on the take side with SHMrename _cyclonedds_has_shm to follow the conventionAdd iceoryx_binding_c as dependency to rmw_cyclonedds_cppRelease iox_chunk to iceoryx in serdata_free if the iox_chunk is still availableUpdate iceoryx_subscriber also when constructing the serdata from the iox chunkFix cpplint errors (#363)Updates for uncrustify 0.72 (#358)Export only rmw::rmw to downstream targets (#360)Export modern CMake targets (#357)Free with the same allocator in rmw_destroy_node (#355)Add client/service QoS getters. (#343)Updated


key: chroma:document
string_value:
(#355)Add client/service QoS getters. (#343)Updated version number and quality level. (#349)Update package maintainers. (#351)Fix undesired memory initialization in zero-copy data path. (#348)Fix QoS depth settings for clients/service being ignored. (#340)Link to Cyclone DDS in Quality Declaration. (#342)Update rmw_context_impl_t definition (#337)Add quality declaration for rmw_cyclonedds_cpp (#335)Fix use of deprecated is_loan_available (#336)Add -latomic for RISC-V (#332)Add pub/sub init, publish and take instrumentation using tracetools (#329)Pass the CRL down to CycloneDDS if it exists (#325)Use the new rmw_dds_common::get_security_files API (#323)Add rmw_publisher_wait_for_all_acked support. (#294)Fix zero copy issues. (#309)Handle allocation errors during message deserialization. (#313)Update includes after rcutils/get_env.h deprecation. (#312)Contributors: Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Dietrich Krönke, Erik Boasson, Haowei Wen, Ivan Santiago Paunovic, Jacob Perron, Joe


key: chroma:document
string_value:
Boasson, Haowei Wen, Ivan Santiago Paunovic, Jacob Perron, Joe Speed, Michel Hidalgo, Shane Loretz, Sumanth Nirmal, eboasson, guillaume-pais-siemens, iRobot ROS, mauropassermw_dds_commonDepend on target generated by rosidl_typesupport_cpp (#58)Use rosidl_get_typesupport_target() and target_link_libraries(). (#57)Install headers to include/${PROJECT_NAME} (#56)Fix include order for cpplint (#55)Fix up rmw_dds_common documentation when using rosdoc2 (#54)Add support for Certificate Revocation List files (#52)Silence clang warning (range-loop-construct) (#53)Add a common function for security files. (#51)Normalize rmw_time_t according to DDS spec (#48)Contributors: Andrea Sorbini, Chris Lalancette, Jacob Perron, Karsten Knese, Michel Hidalgo, Shane Loretzrmw_fastrtps_cppAdd pub/sub init, publish and take instrumentation using tracetools (#591)Add content filter topic feature (#513)Add sequence numbers to message info structure (#587)Removed some heap interactions in rmw_serialize.cpp (#590)Add EventsExecutor


key: chroma:document
string_value:
heap interactions in rmw_serialize.cpp (#590)Add EventsExecutor (#468)Install headers to include/${PROJECT_NAME} (#578)Add client/service QoS getters. (#560)Correctly recalculate serialized size on bounded sequences. (#540)Fix type size alignment. (#550)Change links from index.ros.org -> docs.ros.org (#539)Add rmw_publisher_wait_for_all_acked support. (#519)Loan messages implementation (#523) * Added is_plain_ attribute to base TypeSupport. * Added new methods to base TypeSupport. * Implementation of rmw_borrow_loaned_message. * Implementation of rmw_return_loaned_message_from_publisher. * Enable loan messages on publishers of plain types. * Implementation for taking loaned messages. * Enable loan messages on subscriptions of plain types.Contributors: Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Miguel Company, Shane Loretz, WideAwakeTN, iRobot ROS, mauropassermw_fastrtps_dynamic_cppAdd content filter topic feature (#513)Add sequence numbers to message info structure


key: chroma:document
string_value:
feature (#513)Add sequence numbers to message info structure (#587)Add EventsExecutor (#468)Install headers to include/${PROJECT_NAME} (#578)Add client/service QoS getters. (#560)Correctly recalculate serialized size on bounded sequences. (#540)Fix type size alignment. (#550)Add rmw_publisher_wait_for_all_acked support. (#519)Loan messages implementation (#523) * Added is_plain_ attribute to base TypeSupport. * Added new methods to base TypeSupport. * Implementation of rmw_borrow_loaned_message. * Implementation of rmw_return_loaned_message_from_publisher. * Enable loan messages on publishers of plain types. * Implementation for taking loaned messages. * Enable loan messages on subscriptions of plain types.Contributors: Barry Xu, Chen Lihui, Ivan Santiago Paunovic, Miguel Company, Shane Loretz, iRobot ROS, mauropassermw_fastrtps_shared_cppAddress linter waning for windows. (#592)Add pub/sub init, publish and take instrumentation using tracetools (#591)Add content filter topic feature (#513)Add sequence


key: chroma:document
string_value:
(#591)Add content filter topic feature (#513)Add sequence numbers to message info structure (#587)Add EventsExecutor (#468)Complete events support (#583)Install headers to include/${PROJECT_NAME} (#578)Change default to synchronous (#571)Fix cpplint error (#574)Fixes for uncrustify 0.72 (#572)Add client/service QoS getters. (#560)Fix QoS depth settings for clients/service being ignored. (#564)Update rmw_context_impl_t definition. (#558)Update the LoanManager to do internal locking. (#552)Pass the CRL down to Fast-DDS if available. (#546)Use the new rmw_dds_common::get_security_files (#544)Support for SubscriptionOptions::ignore_local_publications (#536)Change links from index.ros.org -> docs.ros.org (#539)Add rmw_publisher_wait_for_all_acked support. (#519)Loan messages implementation (#523) * Added is_plain_ attribute to base TypeSupport. * Added new methods to base TypeSupport. * Implementation of rmw_borrow_loaned_message. * Implementation of rmw_return_loaned_message_from_publisher. * Enable loan


key: chroma:document
string_value:
of rmw_return_loaned_message_from_publisher. * Enable loan messages on publishers of plain types. * Implementation for taking loaned messages. * Enable loan messages on subscriptions of plain types.Export rmw_dds_common as an rmw_fastrtps_shared_cpp dependency (#530)Update includes after rcutils/get_env.h deprecation (#529)Contributors: Audrow Nash, Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Jose Antonio Moral, Michel Hidalgo, Miguel Company, Shane Loretz, Tomoya Fujita, iRobot ROS, mauropassermw_implementationadd content-filtered-topic interfaces (#181)Add rmw_feature_supported() (#204)Add EventsExecutor (#161)Fix relative path include syntax for cpplint (#203)Support and prefer exported targets from rmw implementations (#201)Add client/service QoS getters. (#196)Update maintainers to Audrow Nash and Michael Carroll. (#199)Fix renamedrcpputilsheader (#198)Fix rmw_implementation generated documentation (#197)Add rmw_publisher_wait_for_all_acked.


key: chroma:document
string_value:
documentation (#197)Add rmw_publisher_wait_for_all_acked. (#188)Attempt to load any available RMW implementation. (#189)Update includes after rcutils/get_env.h deprecation (#190)Contributors: Abrar Rahman Protyasha, Audrow Nash, Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Michel Hidalgo, Shane Loretz, iRobot ROS, mauropassermw_implementation_cmakeUse FastDDS as default DDS (#315)Contributors: Audrow Nashrobot_state_publisherDepend on orocos_kdl_vendor (#191)export dependencies, to use robot_state_publisher as a component (#193)Fix include order for cpplint (#186)Change how parameter updates are handled (#180)Install includes to instal/${PROJECT_NAME} (#184)Make the change_fixed_joint test more robust (#183)Add in a test to make sure fixed transforms change on updateSmall C++ nice-isms in the testsSwitch to using target_include_directories for testsPublish new fixed transforms when URDF is updatedMake joint_states subscription QoS configurable; default to


key: chroma:document
string_value:
joint_states subscription QoS configurable; default to SensorDataQoS (#179)Remove dependency on urdfdom_headers (#168)Fix deprecated subscriber callbacks (#173)Cleanup the documentation in the RobotStatePublisher class. (#172)Always publish fixed frames to /tf_static (#158)corrected publish_frequency default in README (#166)Add tf frame_prefix parameter (#159)Contributors: Abrar Rahman Protyasha, Anthony Deschamps, Chris Lalancette, Jacob Perron, Kenji Brameld, Nils Schulte, Russell Joyce, Shane Loretz, Steve Nogarros2actionAdd timeout to kill hanging tests (#701)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Shane Loretzros2bagsupport to publish as loaned message (#981)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the


key: chroma:document
string_value:
in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)support to publish as loaned message (#981)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Bump version number to avoid conflictMake sure published messages are acknowledged for play mode (#951)TopicFilter use regex_search instead of regex_match (#932)Add start-offset play option (#931)Expose bag_rewrite asros2bagconvert(#921)Add “ignore leaf topics” option to recorder (#925)Auto-detect storage_id for Reader (if possible) (#918)Add pause/resume options to the bag recorder (#905)Add –start-paused option toros2bagplay(#904)Update package maintainers (#899)Fix converter plugin choices for record (#897)Add missing spaces to error message (#875)keyboard controls for pause/resume toggle and play-next: (#847)Add –snapshot-mode


key: chroma:document
string_value:
for pause/resume toggle and play-next: (#847)Add –snapshot-mode argument to the “record” verb (#851)Refactor plugin query mechanism and standardize trait management (#833)UpdatePlayOptions::delaytorclcpp::Durationto get nanosecond resolution (#843)Load compression and serialization choices via plugin query (#827)Add delay option (#789)Avoid passing exception KeyboardInterrupt to the upper layer (#788)Contributors: Abrar Rahman Protyasha, Audrow Nash, Barry Xu, Cameron Miller, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Kosuke Takeuchi, Michel Hidalgo, Sonia Jin, Tony Pengros2cliFix importlib_metadata warning on Python 3.10. (#706)Add timeout to kill hanging tests (#701)Use try_shutdown() instead of shutdown() in DirectNode.__exit__() (#683)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Reapply#659(#661)Revert “Make the ros2cli output always line buffered (#659)” (#660)Make the ros2cli output always line buffered


key: chroma:document
string_value:
(#659)” (#660)Make the ros2cli output always line buffered (#659)add uuid to ros2 daemon node name. (#658)Transfer daemon socket ownership on spawn. (#652)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Michel Hidalgo, Tomoya Fujitaros2cli_test_interfacesUpdate maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovicros2componentAdd timeout to kill hanging tests (#701)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Drop deprecated get_container_components_info() API. (#647)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Michel Hidalgoros2doctorFix importlib_metadata warning on Python 3.10. (#706)Add timeout to kill hanging tests (#701)Switch ros2 doctor to using psutil for network checks. (#687)Depend on launch packages instead of


key: chroma:document
string_value:
for network checks. (#687)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Improve ros2 doctor on Windows. (#631)Add QoS compatibility check and report. (#621)Contributors: Aditya Pande, Alberto Soragna, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Shane Loretzros2interfaceAdd timeout to kill hanging tests (#701)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Shane Loretzros2launchUpdate maintainers in setup.py (#287)Use frontend group dependency & explicit dependencies in ros2launch (#256)Update package maintainers (#284)Add regex filter for selective launch-prefix application (#261)Resolves#37- Added –launch-prefix


key: chroma:document
string_value:
application (#261)Resolves#37- Added –launch-prefix argument for ‘ros2 launch’ command (#254)Use sets of file extensions provided by parser extensions (#252)Simplify logic to fix absolute paths (#230)add way to include other Python launch files (launch #122)Contributors: Audrow Nash, Cameron Miller, Christophe Bedard, Michel Hidalgo, rob-clarkeros2lifecycleAdd timeout to kill hanging tests (#701)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Shane Loretzros2lifecycle_test_fixturesUpdate maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovicros2multicastAdd timeout to kill hanging tests (#701)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo


key: chroma:document
string_value:
maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovicros2nodeAdd timeout to kill hanging tests (#701)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Shane Loretzros2paramAdd timeout to kill hanging tests (#701)Fix how ros2 param interprets command-line arguments. (#684)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Removed redundant code (#666)Reapply#659(#661)Fix flaky ros2 param list (#656)Skip None Result (#646)add ‘–write’ option to avoid an unintentional data loss. (#638)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Jacob Perron, Jay Wang, Tomoya


key: chroma:document
string_value:
Ivan Santiago Paunovic, Jacob Perron, Jay Wang, Tomoya Fujitaros2pkgAdd timeout to kill hanging tests (#701)Use local git config instead of global (#693)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)[ros2pkg] Skip copyright tests in template packages (#676)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Generate LICENSE files on ros2 pkg create. (#650)Handle ValueError (#643)Pass package exports to template in pkg create api (#619) (#628)Add changelogs (#635)Contributors: Abrar Rahman Protyasha, Aditya Pande, Amro Al-Baali, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Shane Loretz, rob-clarke, tim-fanros2runAdd timeout to kill hanging tests (#701)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)check subprocess.returncode to print error message. (#639)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Tomoya


key: chroma:document
string_value:
Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Tomoya Fujitaros2serviceAdd timeout to kill hanging tests (#701)Also provide –include-hidden-services forros2servicelistverb (#551)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Add changelogs (#635)Contributors: Aditya Pande, Audrow Nash, Ivan Santiago Paunovic, Karsten Knese, Shane Loretzros2testUse new domain_coordinator API (#10)Contributors: Timo Röhlingros2topicAdd timeout to kill hanging tests (#701)Add yaml dump flow style. (#698)support ros2topic echo once option. (#695)Fix special case for fastrtps incompatible QoS. (#694)Depend on launch packages instead of ros_testing to avoid circular dependency (#685)Add QoS history and depth information if available. (#678)Cleanup mislabeled BSD license (#447)Update maintainers to Aditya Pande, Audrow Nash, and Michael Jeronimo (#673)Updated maintainers (#670)Update lost


key: chroma:document
string_value:
Michael Jeronimo (#673)Updated maintainers (#670)Update lost messages test case (#669)Implementation of message filtering for ros2 (#654)Change default QoSProfile for pub (#653)Add option in ros2 topic pub to wait for N matching subscriptions, use N=1 by default when combined with –times (#642)ros2topicpubstarts publishing right away. (#626)Fix Topic Info Test with “Infinite” printing (#616)Add changelogs (#635)QoS autodetection (#613)Make Lost Messages option ON by default (#633)Contributors: Aditya Pande, Audrow Nash, Chris Lalancette, Emerson Knapp, Gonzo, Ivan Santiago Paunovic, Jorge Perez, Shane Loretz, Tomoya Fujita, Tully Foote, matthews-jcaros2traceFix ‘ros2 trace’ fini() errorDon’t require kernel tracer and detect when it’s not installedDeprecate ‘context_names’ param and replace with ‘context_fields’Contributors: Christophe Bedardrosbag2Bump version number to avoid conflictUpdate package maintainers (#899)Contributors: Chris Lalancette, Michel Hidalgorosbag2_compressionBump version number to


key: chroma:document
string_value:
Michel Hidalgorosbag2_compressionBump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Remove unnecessary public definition. (#950)Changes for uncrustify 0.72 (#937)Bugfix for broken bag split when using cache (#936)Update package maintainers (#899)Don’t preprocess a storage file more than once (#895)added seek interface (#836)Refactor plugin query mechanism and standardize trait management (#833)fix sequential reader rollover-to-next-file strategy: (#839)Load compression and serialization choices via plugin query (#827)Contributors: Cameron Miller, Chris Lalancette, Michael Orlov, Michel Hidalgo, Shane Loretz, soniarosbag2_compression_zstdBump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Update package maintainers (#899)Contributors: Chris Lalancette, Michel Hidalgo, Shane Loretzrosbag2_cppRevert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair


key: chroma:document
string_value:
(#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Bump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Remove unnecessary public definition. (#950)Fix relative path syntax for cpplint (#947)Mark up the message_cache with TSA annotations (#946)Changes for uncrustify 0.72 (#937)Redesign in cache consumer and circular message cache to get rid from busy loop (#941)Bugfix for broken bag split when using cache (#936)Remove JumpHandler copy-implementation from PlayerClock/TimeControllerClock (#935)Auto-detect storage_id for Reader (if possible) (#918)Add –start-paused option toros2bagplay(#904)Use the message_introspection header to get MessageMember. (#903)Update package maintainers (#899)Fix converter plugin choices for record


key: chroma:document
string_value:
maintainers (#899)Fix converter plugin choices for record (#897)Enable sanitizers only if code actually can run (#572)Need to pass introspection TS to converter plugin for it to be useful (#896)Don’t preprocess a storage file more than once (#895)Fix a bug on invalid pointer address when using “MESSAGE” compressio… (#866)Metadata per file info (#870)Fix TSA warnings when building with clang thread analysis. (#877)Implement snapshot mechanism and corresponding ROS Service (#850)Circular Message Cache implementation for snapshot feature (#844)Fix discovery silently stops after unknown msg type is found. (#848)added seek interface (#836)Refactor plugin query mechanism and standardize trait management (#833)fix sequential reader rollover-to-next-file strategy: (#839)Load compression and serialization choices via plugin query (#827)Workaround for false positive findings by clang thread safety analysis in time controller jump callbacks API. (#799)Add callbacks for PlayerClock::jump(time_point) API with CI fix


key: chroma:document
string_value:
callbacks for PlayerClock::jump(time_point) API with CI fix (#779)Revert “Add callbacks for PlayerClock::jump(time_point) API (#775)” (#778)Add callbacks for PlayerClock::jump(time_point) API (#775)Contributors: Audrow Nash, Barry Xu, Cameron Miller, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Lei Liu, Michael Orlov, Michel Hidalgo, Shane Loretz, Tony Peng, Wojciech Jaworski, soniarosbag2_interfacesBump version number to avoid conflictAdd burst-mode to Player (#977)Update package maintainers (#899)Implement snapshot mechanism and corresponding ROS Service (#850) * Add snapshot service to recorder node * Simplify and clarify double buffering patternsContributors: Cameron Miller, Chris Lalancette, Geoffrey Biggs, Michel Hidalgorosbag2_performance_benchmarkingBump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Enable YAML encoding/decoding for RecordOptions and StorageOptions (#916) * Enable YAML encoding/decoding for RecordOptions and


key: chroma:document
string_value:
(#916) * Enable YAML encoding/decoding for RecordOptions and StorageOptionsUpdate package maintainers (#899)Updated node declare_parameter to new syntax (#882)Updated benchmark package to use writer close() instead of old reset() (#881)Contributors: Adam Dąbrowski, Chris Lalancette, Emerson Knapp, Michel Hidalgo, Shane Loretzrosbag2_pysupport to publish as loaned message (#981)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)support to publish as loaned message (#981)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Bump version number to avoid conflictMake sure published messages are acknowledged for play mode (#951)Fix relative path syntax for cpplint (#947)Update to pybind11 2.7.1 (#945)Add start-offset play option


key: chroma:document
string_value:
to pybind11 2.7.1 (#945)Add start-offset play option (#931)Expose bag_rewrite asros2bagconvert(#921)Add “ignore leaf topics” option to recorder (#925)Add a ReaderWriterFactory utility to share logic for reuse (#923)Add pause/resume options to the bag recorder (#905)Add –start-paused option toros2bagplay(#904)Update package maintainers (#899)Fix converter plugin choices for record (#897)Metadata per file info (#870)keyboard controls for pause/resume toggle and play-next: (#847)Add –snapshot-mode argument to the “record” verb (#851)Add stopRecording into rosbag2_py (#854)added seek interface (#836)Refactor plugin query mechanism and standardize trait management (#833)UpdatePlayOptions::delaytorclcpp::Durationto get nanosecond resolution (#843)Load compression and serialization choices via plugin query (#827)Add delay option (#789)Handle SIGTERM gracefully in recording (#792)Contributors: Abrar Rahman Protyasha, Afonso da Fonseca Braga, Audrow Nash, Barry Xu, Cameron Miller, Chris Lalancette, Emerson Knapp,


key: chroma:document
string_value:
Barry Xu, Cameron Miller, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Kosuke Takeuchi, Michel Hidalgo, Tony Peng, Wojciech Jaworski, soniarosbag2_storageRevert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Bump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Remove unnecessary public definition. (#950)Enable YAML encoding/decoding for RecordOptions and StorageOptions (#916)Update package maintainers (#899)Provide MetadataIO interface to convert metadata to a string in memory, alongside file IO versions (#894)Metadata per file info (#870)Implement snapshot mechanism and corresponding ROS Service


key: chroma:document
string_value:
snapshot mechanism and corresponding ROS Service (#850)added seek interface (#836)Refactor plugin query mechanism and standardize trait management (#833)Contributors: Audrow Nash, Cameron Miller, Chris Lalancette, Emerson Knapp, Jorge Perez, Michel Hidalgo, Shane Loretz, Tony Peng, Wojciech Jaworski, soniarosbag2_storage_default_pluginsBump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Emit a warning rather than crash when a message is too big for sqlite (#919)Enable YAML encoding/decoding for RecordOptions and StorageOptions (#916)Update package maintainers (#899)added seek interface (#836)Contributors: Chris Lalancette, Emerson Knapp, Michel Hidalgo, Shane Loretz, William Woodall, soniarosbag2_test_commonBump version number to avoid conflictInstall headers to include/${PROJECT_NAME} (#958)Update package maintainers (#899)Make sure the subscription exists before publishing messages (#804)Handle SIGTERM gracefully in recording (#792)Add spin_and_wait_for_matched to


key: chroma:document
string_value:
gracefully in recording (#792)Add spin_and_wait_for_matched to PublicationManager and update test c… (#797)Avoid passing exception KeyboardInterrupt to the upper layer (#788)Contributors: Barry Xu, Chris Lalancette, Emerson Knapp, Michel Hidalgo, Shane Loretzrosbag2_testsRevert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Revert “Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)” (#984)Add the ability to record any key/value pair in the ‘custom’ field in metadata.yaml (#976)Bump version number to avoid conflictAdd pause/resume options to the bag recorder (#905)Update package maintainers (#899)Fix a bug on invalid pointer address when using “MESSAGE” compressio… (#866)Metadata per file info (#870)Fix record test to reflect plugin query changes (#838)Make sure the subscription exists before publishing messages (#804)Handle


key: chroma:document
string_value:
the subscription exists before publishing messages (#804)Handle SIGTERM gracefully in recording (#792)Add spin_and_wait_for_matched to PublicationManager and update test c… (#797)Remove rmw_fastrtps_cpp find_package in rosbag2_tests (#774)Contributors: Audrow Nash, Barry Xu, Cameron Miller, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Jorge Perez, Michel Hidalgo, Tony Peng, Wojciech Jaworskirosbag2_transportsupport to publish as loaned message (#981)support to publish as loaned message (#981)Bump version number to avoid conflictAdd burst-mode to Player (#977)Install headers to include/${PROJECT_NAME} (#958)Make sure published messages are acknowledged for play mode (#951)Changes for uncrustify 0.72 (#937)TopicFilter use regex_search instead of regex_match (#932)Add start-offset play option (#931)Add parentheses suggested by Clang on OSX to fix build warning (#930)Bag rewriter (C++) (#920)Add “ignore leaf topics” option to recorder (#925)Rewrite TopicFilter for single-call reusability (#924)Add a


key: chroma:document
string_value:
TopicFilter for single-call reusability (#924)Add a ReaderWriterFactory utility to share logic for reuse (#923)Add pause/resume options to the bag recorder (#905)Add logging macros for rosbag2_transport (#917)Enable YAML encoding/decoding for RecordOptions and StorageOptions (#916)Expose the QoS object wrapper (#910)Add –start-paused option toros2bagplay(#904)Update package maintainers (#899)Add a Seek service (#874)Add simple keyboard control for playback rate (#893)Fix a bug on invalid pointer address when using “MESSAGE” compressio… (#866)Fix typo (#880)Use Reader’s seek() method for seeking/jumping in Player (#873)keyboard controls for pause/resume toggle and play-next: (#847)Implement snapshot mechanism and corresponding ROS Service (#850)Circular Message Cache implementation for snapshot feature (#844)Add jump/seek API for Player class (#826)Restructure test_play_timing to one test per case, to see which times out (#863)Fix discovery silently stops after unknown msg type is found. (#848)Fixing


key: chroma:document
string_value:
silently stops after unknown msg type is found. (#848)Fixing deprecated subscriber callback warnings (#852)Bugfix for race condition in Player::peek_next_message_from_queue() (#849)added seek interface (#836)UpdatePlayOptions::delaytorclcpp::Durationto get nanosecond resolution (#843)Move notification about ready for playback inside play_messages_from_queue() (#832)Add wait for player to be ready for playback in Player::play_next() method (#814)Make sure the subscription exists before publishing messages (#804)Add delay option (#789)Copy recorder QoS profile to local variable so that temporary value isn’t cleared (#803)test_play_services: fail gracefully on future error (#798)Recording with –all and –exclude fix (#765)Contributors: Abrar Rahman Protyasha, Audrow Nash, Barry Xu, Bastian Jäger, Cameron Miller, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Ivan Santiago Paunovic, Kosuke Takeuchi, Lei Liu, Louise Poubel, Michael Orlov, Michel Hidalgo, Piotr Jaroszek, Shane Loretz, soniarosgraph_msgsUpdate


key: chroma:document
string_value:
Piotr Jaroszek, Shane Loretz, soniarosgraph_msgsUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashrosidl_adapterrename nested loop index (#643)Fix how comments in action interfaces are processed (#632)Pass comments in ros interface constants to the .idl generated files (#630)Update package maintainers (#624)Make rosidl packages use FindPython3 instead of FindPythonInterp (#612)Fix escaping in string literals (#595)Ignore multiple#characters and dedent comments (#594)Contributors: Ivan Santiago Paunovic, Michel Hidalgo, Shane Loretz, ibnHatabrosidl_cliFix importlib_metdata warning with Python 3.10. (#674)Update maintainers to Michel Hidalgo and Shane Loretz (#633)Update package maintainers (#624)Support passing keyword arguments to rosidl CLI extensions (#597)Add missing f for format string (#600)Contributors: Audrow Nash, Chris Lalancette, Michel Hidalgo, Shane Loretzrosidl_cmakeMake rosidl_get_typesupport_target return -NOTFOUND instead of FATAL_ERROR (#672)Add introspection


key: chroma:document
string_value:
return -NOTFOUND instead of FATAL_ERROR (#672)Add introspection typesupport tests for C/C++ messages (#651)Use target output name for exporting typesupport library (#625)Update package maintainers (#624)Revert “Bundle and ensure the exportation of rosidl generated targets” (#611)Add rosidl_get_typesupport_target and deprecate rosidl_target_interfaces (#606)Bundle and ensure the exportation of rosidl generated targets (#601)Contributors: Jonathan Selling, Michel Hidalgo, Shane Loretzrosidl_default_generatorsUnroll group dependencies (#20)Contributors: Shane Loretzrosidl_default_runtimeUnroll group dependencies (#20)Contributors: Shane Loretzrosidl_generator_cFix error handling when copying C sequence messages (#671)Install generated headers to include/${PROJECT_NAME} (#670)Misc cleanup in the rosidl generator extensions (#662)Set the output size unconditionally when copying sequences (#669)Implement copy function for C messages (#650)Implement equality operator function for C messages. (#648)Generate


key: chroma:document
string_value:
equality operator function for C messages. (#648)Generate documentation in generated C header files based on ROS interfaces comments (#593)Update package maintainers (#624)Make rosidl packages use FindPython3 instead of FindPythonInterp (#612)Revert “Bundle and ensure the exportation of rosidl generated targets” (#611)Bundle and ensure the exportation of rosidl generated targets (#601)Fix a cpplint allocator regression. (#590)Use RCUtils allocators in rosidl_generator_c (#584)Contributors: Chris Lalancette, Ivan Santiago Paunovic, Michel Hidalgo, Nikolai Morin, Pablo Garrido, Shane Loretzrosidl_generator_cppInstall generated headers to include/${PROJECT_NAME} (#670)Misc cleanup in the rosidl generator extensions (#662)Add missing build_export_depend dependency (#665)Fix bug where rosidl_runtime_cpp wasn’t depended upon (#660)Fix include order for cpplint (#644)Set CXX standard to 17 (#635)Update package maintainers (#624)Make rosidl packages use FindPython3 instead of FindPythonInterp (#612)Support flow


key: chroma:document
string_value:
use FindPython3 instead of FindPythonInterp (#612)Support flow style YAML printing (#613)Revert “Bundle and ensure the exportation of rosidl generated targets” (#611)Relocate to_yaml() under message namespace (#609)Bundle and ensure the exportation of rosidl generated targets (#601)Contributors: Jacob Perron, Jorge Perez, Michel Hidalgo, Shane Loretz, Øystein Sturerosidl_generator_dds_idlAdd changelog (#56)Contributors: Ivan Santiago Paunovicrosidl_generator_pyRemoves erroneous unmatched closing parenthesis (#125)require Python 3.6 as we use format strings in various places (#152)Fix rosidl_generator_py assuming incorect library names (#149)Fix for msg file containing a property field that is not at the end (#151)Update package maintainers (#147)Use rosidl_get_typesupport_target() (#139)Support available typesupport specification in CLI extension (#133)Use python_d for test_cli_extension in Debug mode (#136)Add missing float/double bounds check (#128)Added optimization for copying arrays using buffer


key: chroma:document
string_value:
check (#128)Added optimization for copying arrays using buffer protocol (#129)Add smoke test for CLI extension (#132)Install generated Python interfaces in a Python package (#131)Contributors: Charles Cross, Chen Lihui, Michel Hidalgo, Seulbae Kim, Shane Loretz, William Woodall, ksuszkarosidl_parserSet maybe_placeholders to False for lark 1.+ compatibility (#664)Generate documentation in generated C header files based on ROS interfaces comments (#593)Pass comments in ros interface constants to the .idl generated files (#630)Update package maintainers (#624)Fix escaping in string literals (#595)Contributors: Ivan Santiago Paunovic, Michel Hidalgo, Shane Loretzrosidl_runtime_cFix error handling when copying C sequence messages (#671)Set the output size unconditionally when copying sequences (#669)De-duplicate Quality Level from README and QUALITY_DECLARATION (#661)Install headers to include/${PROJECT_NAME} (#658)Implement copy function for C messages (#650)Implement equality operator function for C messages.


key: chroma:document
string_value:
(#650)Implement equality operator function for C messages. (#648)Set CXX standard to 17 (#635)Update package maintainers (#624)Use RCUtils allocators in rosidl_generator_c (#584)Contributors: Jose Luis Rivero, Michel Hidalgo, Nikolai Morin, Pablo Garrido, Shane Loretz, Øystein Sturerosidl_runtime_cppAdd missing dependency on rosidl_runtime_c (#666)De-duplicate Quality Level from README and QUALITY_DECLARATION (#661)Install headers to include/${PROJECT_NAME} (#658)Set CXX standard to 17 (#635)Update package maintainers (#624)Contributors: Jose Luis Rivero, Michel Hidalgo, Shane Loretz, Øystein Sturerosidl_runtime_pyadd yaml dump flow style. (#16)Update maintainers (#15) * Update maintainers to Shane Loretz * Update Shane’s email Co-authored-by: Shane Loretz <sloretz@openrobotics.org>Contributors: Audrow Nash, Tomoya Fujitarosidl_typesupport_cUse target_link_libraries(… PRIVATE …) in single typesupport case (#124)rosidl CMake cleanup in rosidl_typesupport_c (#123)Install headers to include/${PROJECT_NAME}


key: chroma:document
string_value:
(#123)Install headers to include/${PROJECT_NAME} (#121)Use FindPython3 (#118)Revert “Bundle and ensure the exportation of rosidl generated targets” (#116)Support available typesupport specification in CLI extensions (#112)Bundle and ensure the exportation of rosidl generated targets (#113)Fix C and C++ typesupports CLI extensions (#111)Contributors: Michel Hidalgo, Shane Loretzrosidl_typesupport_cppUse target_link_libraries(… PRIVATE …) in single typesupport case (#124)rosidl CMake cleanup in rosidl_typesupport_cpp (#123)Install headers to include/${PROJECT_NAME} (#121)Make sure to check typesupport handles against nullptr properly (#119)Use FindPython3 (#118)Revert “Bundle and ensure the exportation of rosidl generated targets” (#116)Support available typesupport specification in CLI extensions (#112)Bundle and ensure the exportation of rosidl generated targets (#113)Fix C and C++ typesupports CLI extensions (#111)Contributors: Chris Lalancette, Michel Hidalgo, Shane


key: chroma:document
string_value:
(#111)Contributors: Chris Lalancette, Michel Hidalgo, Shane Loretzrosidl_typesupport_fastrtps_cInstall generated headers to include/${PROJECT_NAME} (#88)Misc fastrtps typesupport generator cleanup (#87)Install headers to include/${PROJECT_NAME} (#86)Fix include order for cpplint (#84)Update maintainers to Shane Loretz (#83)Use FindPython3 explicitly instead of PythonInterp implicitly (#78)Revert rosidl targets and dependencies exportation (#76) * Revert “Export rosidl_typesupport_fastrtps_c* dependencies (#75)” * Revert “Bundle and ensure the exportation of rosidl generated targets (#73)”Correctly inform that a BoundedSequence is bounded (#71)Export rosidl_typesupport_fastrtps_c* dependencies (#75)Bundle and ensure the exportation of rosidl generated targets (#73)Fix Fast-RTPS C++ typesupport CLI extension (#72)Fastdds type support extensions (#67)Remove fastrtps dependency (#68)Contributors: Andrea Sorbini, Audrow Nash, Jacob Perron, Michel Hidalgo, Miguel Company, Shane


key: chroma:document
string_value:
Nash, Jacob Perron, Michel Hidalgo, Miguel Company, Shane Loretzrosidl_typesupport_fastrtps_cppInstall generated headers to include/${PROJECT_NAME} (#88)Misc fastrtps typesupport generator cleanup (#87)Install headers to include/${PROJECT_NAME} (#86)Fix include order for cpplint (#84) * Fix include order for cpplint Relates tohttps://github.com/ament/ament_lint/pull/324* Use double-quotes for other includes This is backwards compatible with older versions of cpplint.Update maintainers to Shane Loretz (#83)Re-introduce improvements to serialization of primitive bounded sequences for C++ type support (#81)Revert “Improve serialization of … (#79)” (#80)Improve serialization of primitive bounded sequences in C++ type support (#79)Use FindPython3 explicitly instead of PythonInterp implicitly (#78)Revert rosidl targets and dependencies exportation (#76) * Revert “Export rosidl_typesupport_fastrtps_c* dependencies (#75)” * Revert “Bundle and ensure the exportation of rosidl generated targets (#73)”Correctly inform


key: chroma:document
string_value:
exportation of rosidl generated targets (#73)”Correctly inform that a BoundedSequence is bounded (#71)Export rosidl_typesupport_fastrtps_c* dependencies (#75)Bundle and ensure the exportation of rosidl generated targets (#73)Fix Fast-RTPS C++ typesupport CLI extension (#72)Fastdds type support extensions (#67)Remove fastrtps dependency (#68)Contributors: Andrea Sorbini, Audrow Nash, Jacob Perron, Jorge Perez, Michel Hidalgo, Miguel Company, Shane Loretzrosidl_typesupport_interfaceDe-duplicate Quality Level from README and QUALITY_DECLARATION (#661)Install headers to include/${PROJECT_NAME} (#658)Add ROSIDL_TYPESUPPORT_INTERFACE__LIBRARY_NAME() macro (#649)Set CXX standard to 17 (#635)Update package maintainers (#624)Contributors: Jose Luis Rivero, Michel Hidalgo, Shane Loretz, Øystein Sturerosidl_typesupport_introspection_cInstall generated headers to include/${PROJECT_NAME} (#670)Misc cleanup in the rosidl generator extensions (#662)De-duplicate Quality Level from README and QUALITY_DECLARATION


key: chroma:document
string_value:
Quality Level from README and QUALITY_DECLARATION (#661)Update Quality declaration to level 1 in README for instrospection pkgs (#659)Install headers to include/${PROJECT_NAME} (#658)Move rosidl_typesupport_introspection_cpp quality declaration to Q1 (#657)Move rosidl_typesupport_introspection_c quality declaration to Q1  (#656)add documentation for generators and API (#646)Rework nested types’ items introspection in C and C++ (#652)Fix up the documentation for rosidl_typesupport_introspection_c (#628)Update package maintainers (#624)Quality Declaration for typesupport_introspection (#621)Make rosidl packages use FindPython3 instead of FindPythonInterp (#612)Revert “Bundle and ensure the exportation of rosidl generated targets” (#611)Bundle and ensure the exportation of rosidl generated targets (#601)Update function prefix (#596)Contributors: Chris Lalancette, Jose Luis Rivero, Michel Hidalgo, Pablo Garrido, Shane Loretz, eboassonrosidl_typesupport_introspection_cppInstall generated headers to


key: chroma:document
string_value:
generated headers to include/${PROJECT_NAME} (#670)Misc cleanup in the rosidl generator extensions (#662)De-duplicate Quality Level from README and QUALITY_DECLARATION (#661)Update Quality declaration to level 1 in README for instrospection pkgs (#659)Install headers to include/${PROJECT_NAME} (#658)Move rosidl_typesupport_introspection_cpp quality declaration to Q1 (#657)add documentation for generators and API (#646)Rework nested types’ items introspection in C and C++ (#652)Set CXX standard to 17 (#635)Fix up the documentation for rosidl_typesupport_introspection_cpp (#627)Update package maintainers (#624)Quality Declaration for typesupport_introspection (#621)Make rosidl packages use FindPython3 instead of FindPythonInterp (#612)Revert “Bundle and ensure the exportation of rosidl generated targets” (#611)Bundle and ensure the exportation of rosidl generated targets (#601)Contributors: Chris Lalancette, Jose Luis Rivero, Michel Hidalgo, Shane Loretz, eboasson, Øystein


key: chroma:document
string_value:
Luis Rivero, Michel Hidalgo, Shane Loretz, eboasson, Øystein Sturerosidl_typesupport_introspection_testsBumprosidl_typesupport_introspection_testscoverage (#655)Add introspection typesupport tests for C/C++ services (#653)Add introspection typesupport tests for C/C++ messages (#651)Contributors: Michel HidalgorpyutilsMake sure to call abspath when adding Windows DLL directories. (#8)Update troubleshooting links to docs.ros.org (#6)Contributors: Chris Lalancette, Christophe Bedardrqt_guiChanged getiter to iter (#1) (#241)Update maintainers (#233) (#237)add missing dependencies: rospkg-modules, python_qt_binding, rospy (#227)bump CMake minimum version to avoid CMP0048 warning (#219)use catkin_install_python for Python script (#206)Contributors: Michael Jeronimo, sven-herrmannrqt_gui_cppUpdate maintainers (#233) (#237)bump CMake minimum version to avoid CMP0048 warning (#219)[Windows] fix rqt_gui_cpp install path (#190)[Windows] fix building (#189)Contributors: Michael Jeronimorqt_gui_pyUpdate maintainers


key: chroma:document
string_value:
Michael Jeronimorqt_gui_pyUpdate maintainers (#233) (#237)bump CMake minimum version to avoid CMP0048 warning (#219)rqt_py_commonUpdate maintainers (#233) (#237)bump CMake minimum version to avoid CMP0048 warning (#219)fix missing import bugs (#139)Contributors: Michael Jeronimorti_connext_dds_cmake_moduleUpdate rti-connext-dds dependency to 6.0.1. (#71)Contributors: Steven! RagnarökrttestInstall includes to include/${PROJECT_NAME} (#114)Fix include order for cpplint (#113)Fixes for uncrustify 0.72 (#111)Mark dependent targets as PRIVATE (#112)Export modern CMake targets (#110)Contributors: Chris Lalancette, Jacob Perron, Shane Loretzrviz2Change links index.ros.org -> docs.ros.org. (#698)Contributors: Chris Lalancetterviz_assimp_vendorMake sure to pass compiler and flags down to assimp (#844)Fix support for assimp 5.1.0 (#817)Contributors: Chris Lalancette, Silvio Traversarorviz_commonAdd implementation for cancel interface (#809)Install headers to include/${PROJECT_NAME} (#829)Remove definition of


key: chroma:document
string_value:
headers to include/${PROJECT_NAME} (#829)Remove definition of PLUGINLIB_DISABLE_BOOST. (#821)Fix support for assimp 5.1.0 (#817)Fix cpplint errors (#818)Set message type for ros topic display (#800)Fixes for uncrustify 0.72 (#807)Do not block visualization manager updates when opening the display panel dialog (#795)Switch to using Qt::MiddleButton for RViz. (#802)Removed traces in renderPanel (#777)move yaml_config_writer.hpp to public includes (#764)Update displays_panel.cpp (#745)Robot: Report mesh loading issues (#744)Exposed tool_manager header file. (#767)refactor: make const getter methods const (#756)Efficiently handle 3-bytes pixel formats (#743)Report sample lost events (#686)Update window close icon (#734)Fix missing “X” icon in panel close button (#731)Add rviz_rendering dependency to rviz_common (#727)Remove the word “Alpha” from the splash screen. (#696)Removed some memory leaks in rviz_rendering and rviz_rendering_tests (#710)Contributors: ANDOU Tetsuo, Alejandro Hernández Cordero, Chen Lihui,


key: chroma:document
string_value:
ANDOU Tetsuo, Alejandro Hernández Cordero, Chen Lihui, Chris Lalancette, Daisuke Nishimatsu, Gonzo, Ivan Santiago Paunovic, Jacob Perron, Joseph Schornak, Rebecca Butler, Shane Loretz, Silvio Traversaro, davidorchanskyrviz_default_pluginsAdd far plane distance property to camera (#849)Drop ignition-math6 from rviz_default_plugins link interface (#833)add implementation for cancel interface (#809)Install headers to include/${PROJECT_NAME} (#829)Remove definition of PLUGINLIB_DISABLE_BOOST. (#821)Remove TF filter from ImageTransportDisplay (#788)Add underscores to material names (#811)Export image_transport dependency (#813)Fixes for uncrustify 0.72 (#807)Switch to using Qt::MiddleButton for RViz. (#802)Add a tf_buffer_cache_time_ns to tf_wrapper (#792)Make libraries to avoid compiling files multiple times (#774)Computed inertia with ignition-math (#751)Fixed crash when changing rendering parameters for pointcloud2 while ‘Selectable’ box is unchecked (#768)Robot: Report mesh loading issues (#744)Handle NaN


key: chroma:document
string_value:
(#768)Robot: Report mesh loading issues (#744)Handle NaN values for Wrench msgs (#746)Triangle lists support textures (#719)Report sample lost events (#686)Fix path message orientation error (#736)Set topic namespace in interactive markers display (#725)mass property visualization (#714)Export InteractiveMarker (#718)Yuv to rgb changes (#701)Extract message type in ImageTransportDisplay (#711)Duplicated code RobotJoint (#702)Don’t attempt to moc generate files that don’t have QOBJECT. (#690)Switch to including tf2_geometry_msgs.hpp (#689)Export Qt5 dependencies properly (#687)Add support for namespace-scoped DELETEALL action in Marker displays (#685)Use image_transport to subscribe to image messages (#523)Contributors: Akash, Alejandro Hernández Cordero, Audrow Nash, Chen Lihui, Chris Lalancette, Cory Crean, Gonzo, Greg Balke, Ivan Santiago Paunovic, Jacob Perron, Martin Idel, Michel Hidalgo, Paul, Rebecca Butler, Scott K Logan, Shane Loretz, bailaC, brian soe, cturcotte-qnx, ketatamrviz_ogre_vendorFix


key: chroma:document
string_value:
bailaC, brian soe, cturcotte-qnx, ketatamrviz_ogre_vendorFix interface link libraries in ogre vendor (#761)Fix the build for Ubuntu Jammy arm64. (#828)Strip RPATH from installed Ogre binaries (#688)Contributors: Chris Lalancette, Laszlo Turanyi, Michel Hidalgorviz_renderingMake getVerticesPerPoint method public and improve tests (#843)Disable class-memaccess warnings for Eigen (#838)Disable a warning when including Eigen. (#835)Install headers to include/${PROJECT_NAME} (#829)Fix support for assimp 5.1.0 (#817)Fix cpplint errors (#818)Fixes for uncrustify 0.72 (#807)Suppress assimp warnings in rviz_rendering build (#775)Fix for ogre failing when material already exists (#729)Removed some memory leaks in rviz_rendering and rviz_rendering_tests (#710)Export Qt5 dependencies properly (#687)Putting glsl 1.50 resources back in RenderSystem (#668)Contributors: Alejandro Hernández Cordero, Chris Lalancette, Jacob Perron, Jorge Perez, Michel Hidalgo, Piotr Jaroszek, Scott K Logan, Shane Loretz, Silvio Traversaro,


key: chroma:document
string_value:
Piotr Jaroszek, Scott K Logan, Shane Loretz, Silvio Traversaro, Wolf Vollprechtrviz_rendering_testsRemoved some memory leaks in rviz_rendering and rviz_rendering_tests (#710)Contributors: Alejandro Hernández Corderorviz_visual_testing_frameworkInstall headers to include/${PROJECT_NAME} (#829)Fixes for uncrustify 0.72 (#807)Update includes after rcutils/get_env.h deprecation (#677)Contributors: Chris Lalancette, Christophe Bedard, Shane Loretzsensor_msgsMove the find_package statements for BUILD_TESTING  (#186)Feedback on conditional sensor_msgs_library target (#1) (#183)[Fix] Fix image_encodings.hpp’s URL in README (#184)[Fix] Fix fill_image.hpp’s URL in README (#182)Add sensor_msgs_library target and install headers to include/${PROJECT_NAME} (#178)Interface packages should fully <depend> on the interface packages that they depend on (#173)Add YUV420 and YUV444 to image encodings (#172)Cleanup mislabeled BSD license (#83)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Fix rosdoc2 warnings in


key: chroma:document
string_value:
to Geoffrey Biggs and Tully Foote (#163)Fix rosdoc2 warnings in sensor_msgs. (#162)Add equidistant distortion model (#160)Use rosidl_get_typesupport_target() (#156)Update CompressedImage documentation: add ‘tiff’ as a supported format (#154)Contributors: Audrow Nash, Chris Lalancette, Grey, Hemal Shah, Homalozoa X, Ivan Santiago Paunovic, Martin Günther, Michael Jeronimo, Pablo Garrido, Shane Loretz, Tully Footesensor_msgs_pyAdd in a compatibility layer for older versions of numpy. (#185)Port pointcloud creation to numpy. (#175)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Chris Lalancette, Florian Vahlshape_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Add prism type to the SolidPrimitive.msg (#166) (#167)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Grey, M. Fatih Cırıtshared_queues_vendorBump version number to avoid conflictUpdate package maintainers (#899)Contributors:


key: chroma:document
string_value:
to avoid conflictUpdate package maintainers (#899)Contributors: Chris Lalancette, Michel Hidalgosqlite3_vendorBump version number to avoid conflictUpdate package maintainers (#899)Contributors: Chris Lalancette, Michel Hidalgosros2Increase the shutdown timeout for test_generate_policy_no_nodes. (#278)Contributors: Chris Lalancettestatistics_msgsUpdate maintainers to Chris Lalancette (#130)Contributors: Audrow Nashstd_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greystd_srvsUpdate maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nashstereo_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, Greytest_cliUpdated maintainers (#489)Add changelogs (#473)Merge pull request#356from


key: chroma:document
string_value:
(#489)Add changelogs (#473)Merge pull request#356from ros2/issue/321_enhance_parameter_apiContributors: Aditya Pande, Ivan Santiago Paunovictest_cli_remappingUpdate python nodes SIGINT handling (#490)Updated maintainers (#489)Add changelogs (#473)Contributors: Aditya Pande, Ivan Santiago Paunovictest_communicationSplit test_subscriber into multiple compilation units. (#500)Add test_msgs dependency (#497)Update python nodes SIGINT handling (#490)Updated maintainers (#489)Fix deprecated subscriber callback warnings (#483)Add tests for BoundedPlainSequences (#481)Use rosidl_get_typesupport_target() (#480)Use rcpputils/scope_exit.hpp instead of rclcpp/scope_exit.hpp (#479)Add changelogs (#473)Contributors: Abrar Rahman Protyasha, Aditya Pande, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Shane Loretztest_interface_filesRevert “Update package.xml (#18)” (#19)Update package.xml (#18)Update maintainers to Audrow Nash (#17)Added BoundedPlainSequences messages (#14)Contributors: Audrow Nash, Chris


key: chroma:document
string_value:
messages (#14)Contributors: Audrow Nash, Chris Lalancette, Miguel Company, Nikolai Morintest_launch_rosIncrease test time tolerance (#305)Use correct namespace when evaluating parameter files for composable nodes (#303)Handle empty strings when evaluating parameters (#300)Add parameter substitution (#297)More Helpful Error Messages (#275)Update maintainers in setup.py (#287)Set parameters from file for composable nodes (#281)Update package maintainers (#284)Update node name matcher (#282)Support both parameter file configurations for composable nodes (#259)Shutdown context after test (#267)Handle substitutions in RosTimer (#264)Add SetParametersFromFile action (#260)Properly support ros_args attribute through launch frontends (#253)Add ‘push_ros_namespace’ alias to ‘push-ros-namespace’ (#250)Add ros_arguments option to Node action (#249)ROS Timer Action (#244)Support container in frontend (#235)Added normalize_remap_rule and types. (launch #173)Fixed setup.py versions (launch #155)Fixed a bug to ensure that


key: chroma:document
string_value:
setup.py versions (launch #155)Fixed a bug to ensure that shutdown event is handled correctly (launch #154)Made various fixes and added tests for remappings passed to Node actions (launch #137)Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, David V. Lu!!, Jacob Perron, Jorge Perez, Kenji Miyake, Michel Hidalgo, Rebecca Butlertest_launch_testingUpdate maintainers to Aditya Pande and Michel Hidalgo (#559)Updated maintainers (#555)Contributors: Aditya Pande, Audrow Nashtest_msgsInstall headers to include/${PROJECT_NAME} and Depend on rosidl_typesupport_* targets directly (#133)Update maintainers to Chris Lalancette (#130)Add test fixures for BoundedPlainSequences (#125)Added BoundedPlainSequences to test_msgs (#123)Contributors: Audrow Nash, Miguel Company, Shane Loretztest_quality_of_serviceUpdate maintainers to Aditya Pande and Shane Loretz (#491)Updated maintainers (#489)Fix deprecated subscriber callback warnings (#483)Add changelogs (#473)Contributors: Abrar Rahman Protyasha, Aditya Pande,


key: chroma:document
string_value:
(#473)Contributors: Abrar Rahman Protyasha, Aditya Pande, Audrow Nash, Ivan Santiago Paunovictest_rclcppFix include order for cpplint (#493)Fix test (#488)Updated maintainers (#489)Add tests for rclcpp sigterm handler (#485)Fix deprecated subscriber callback warnings (#483)Fix deprecation warnings and failures after client API update (#482)Use rosidl_get_typesupport_target() (#480)Use rcpputils/scope_exit.hpp instead of rclcpp/scope_exit.hpp (#479)Add test for defered service callback signature (#478)Add changelogs (#473)Merge pull request#357from ros2/ros2_658_leftoversContributors: Abrar Rahman Protyasha, Aditya Pande, Christophe Bedard, Ivan Santiago Paunovic, Jacob Perron, Mauro Passerino, Shane Loretztest_rmw_implementationadd content-filtered-topic interfaces (#181)Fix linter issues (#200)Add client/service QoS getters. (#196)Added tests for bounded sequences serialization (#193)Add RMW_DURATION_INFINITE basic compliance test. (#194)Test SubscriptionOptions::ignore_local_publications. (#192)Add


key: chroma:document
string_value:
SubscriptionOptions::ignore_local_publications. (#192)Add rmw_publisher_wait_for_all_acked. (#188)Wait for server in test_rmw_implementation service tests. (#191)Contributors: Barry Xu, Chen Lihui, Emerson Knapp, Jorge Perez, Jose Antonio Moral, Michel Hidalgo, Miguel Company, mauropassetest_securityUpdated maintainers (#489)Fix deprecated subscriber callback warnings (#483)Add changelogs (#473)Simplify the test_secure_subscriber code. (#471)Update includes after rcutils/get_env.h deprecation (#472)Contributors: Abrar Rahman Protyasha, Aditya Pande, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovictest_tf2Fix more instances of Eigen problems on RHEL. (#515)Install includes to include/${PROJECT_NAME} and use modern CMake (#493)Fix precision loss from using rclcpp::Time::seconds() (#511)More Intuitive CLI for Static Transform Publisher (#392)Conversion tests for toMsg() (#423)Deprecate tf2_geometry_msgs.h (#418)Deprecate tf2_kdl.h (#414)Deprecate tf2_bullet.h (#412)Contributors: Bjar Ne, Chris


key: chroma:document
string_value:
(#414)Deprecate tf2_bullet.h (#412)Contributors: Bjar Ne, Chris Lalancette, Hunter L. Allen, Kenji Brameld, Shane Loretztest_tracetoolsIntroduce constants for tracepoint namesMove actual tests out of tracetools_test to new test_tracetools packageContributors: Christophe Bedardtest_tracetools_launchAdd support for preloading pthread and dl instrumentation shared libsRemove profile_fast option and consider LD_PRELOADing both libsFix multiple LdPreload actions not working and add testDeprecate ‘context_names’ param and replace with ‘context_fields’Move some tests from tracetools_launch to test_tracetools_launchContributors: Christophe Bedard, Ingo Lütkebohletf2Install includes to include/${PROJECT_NAME} and use modern CMake (#493)forward declare fromMsg to avoid missing symbols in downstream libraries (#485)tf2: Enable common linter tests (#469)Move time functions into time.cpp.Change a for loop to a while loop.Switch to C++-style casts.Remove totally unused (and unreachable) code.Replace NULL with


key: chroma:document
string_value:
totally unused (and unreachable) code.Replace NULL with nullptr.Fix up some comments.Use std::make_shared where we can.Replace two comparisons with empty string to empty().Make sure to include-what-you-use.Remove unnecessary internal method.Remove long-deprecated walkToTopParent overload.Remove unnecessary test dependencies.Remove some references to the ROS 1 wiki.Add rosidl_runtime_cpp as build_depend and build_export_depend.Minor cleanups in CMakeLists.txt.Remove include directory that doesn’t exist.Remove completely unnecessary target_link_libraries.Remove unused speed_test from tf2.Suppress clang warnings about enumerator attributes. (#463)Change TF2Error names to be a bit more descriptive. (#349)Fixed errors due to missing header link. (#432)Deprecate tf2_geometry_msgs.h (#418)Speedup covariance unwrapping (#399)Contributors: Abrar Rahman Protyasha, Chris Lalancette, Dima Dorezyuk, João C. Monteiro, Shane Loretz, Shivam Pandeytf2_bulletInstall includes to include/${PROJECT_NAME} and use modern CMake


key: chroma:document
string_value:
includes to include/${PROJECT_NAME} and use modern CMake (#493)Export a tf2_bullet::tf2_bullet target (#495)Fix cpplint errors (#497)Remove some references to the ROS 1 wiki.Fix tf2_bullet dependency export (#428)Deprecate tf2_bullet.h (#412)Contributors: Bjar Ne, Chris Lalancette, Jacob Perron, Shane Loretztf2_eigenWorkaround broken RHEL FindEigen3.cmake (#513)Install includes to include/${PROJECT_NAME} and use modern CMake (#493)Disable mem-access warnings on aarch64. (#506)Fix cpplint errors (#497)Remove some references to the ROS 1 wiki.Add doTransform function for twists or wrenches (#406)Reenable stamped eigen tests (#429)Deprecate tf2_eigen.h (#413)Contributors: AndyZe, Bjar Ne, Chris Lalancette, Jacob Perron, Shane Loretztf2_eigen_kdlFix more instances of Eigen problems on RHEL. (#515)Depend on orocos_kdl_vendor  (#473)Install includes to include/${PROJECT_NAME} and use modern CMake (#493)Fix cpplint errors (#497)Contributors: Chris Lalancette, Jacob Perron, Shane Loretztf2_geometry_msgsMake sure


key: chroma:document
string_value:
Jacob Perron, Shane Loretztf2_geometry_msgsMake sure to find the right Python executable. (#514)Depend on orocos_kdl_vendor  (#473)Install includes to include/${PROJECT_NAME} and use modern CMake (#493)Drop PyKDL dependency in tf2_geometry_msgs (#509)Fix cpplint errors (#497)Export a tf2_geometry_msgs::tf2_geometry_msgs target (#496)Feature: Add doTransform for Wrench messages (#476)Remove some references to the ROS 1 wiki.Style fixes in tf2_geometry_msgs. (#464)Fix for issue#431- Covariance is not transformed in do_transform_pose_with_covariance_stamped (#453)doTransform non stamped msgs (#452)tf2_geometry_msgs: Fixing covariance transformation indoTransform<PoseWithCovarianceStamped,TransformStamped>(#430)Geometry nitpicks (#426)Conversion tests for toMsg() (#423)Deprecate tf2_geometry_msgs.h (#418)Contributors: Abrar Rahman Protyasha, Bjar Ne, Chris Lalancette, Denis Štogl, Florian Vahl, Jacob Perron, Khasreto, Shane Loretz, vineet131tf2_kdlDepend on orocos_kdl_vendor  (#473)Install includes to


key: chroma:document
string_value:
on orocos_kdl_vendor  (#473)Install includes to include/${PROJECT_NAME} and use modern CMake (#493)KDL python formatting and licenses (#425)Deprecate tf2_kdl.h (#414)Contributors: Bjar Ne, Chris Lalancette, Jacob Perron, Shane Loretztf2_msgsRemove dead file from tf2_msgs (#415)Contributors: Chris Lalancettetf2_pyMake sure to finalize tf2_py BufferCore. (#505)Make tf2_py Use FindPython3 (#494)Change TF2Error names to be a bit more descriptive. (#349)Remove python_compat.h (#417)Contributors: Chris Lalancette, Shane Loretztf2_rosInstall includes to include/${PROJECT_NAME} and use modern CMake (#493)use dedicated callback group and executor to isolate timer (#447)Adding shared pointer definition to tf2 buffer (#508)fix for a basic logic (#510)Fix precision loss from using rclcpp::Time::seconds() (#511)clear relative callback of Buffer if MessageFilter is destroyed (#490)More info in tf2_echo output (#468)Fix cpplint errors (#497)Fixes for uncrustify 0.72 (#486)More Intuitive CLI for Static Transform


key: chroma:document
string_value:
uncrustify 0.72 (#486)More Intuitive CLI for Static Transform Publisher (#392)Reduce transform listener nodes (#442)tf2_ros: Fix deprecated subscriber callbacks (#448)Fix tf2_echo does not work with ros-args (#407) (#408)Contributors: Abrar Rahman Protyasha, Chen Lihui, Chris Lalancette, Hunter L. Allen, Jacob Perron, Kenji Brameld, PGotzmann, Shane Loretz, Steve Macenski, Zhenpeng Ge, gezp, simulacrustf2_ros_pyDrop PyKDL dependency in tf2_geometry_msgs (#509)Add in one more destroy call that was missed in testing. (#504)Be much more careful about cleanup in the tf2_ros_py tests. (#499)Use the correct type for BufferClient timeout_padding. (#498) It should be a duration, not a float.Update maintainers to Alejandro Hernandez Cordero and Chris Lalancette (#481)Fix buffer_client.py using default timeout_padding (#437)Use underscores instead of dashes in setup.cfg. (#403)Contributors: Audrow Nash, Carlos Andrés Álvarez Restrepo, Chris Lalancette, Florian Vahltf2_sensor_msgsDisable mem-access warnings on


key: chroma:document
string_value:
Florian Vahltf2_sensor_msgsDisable mem-access warnings on aarch64. (#506)Fix cpplint errors (#497)Reenable sensor_msgs test (#422)Deprecate tf2_sensor_msgs.h (#416)Contributors: Bjar Ne, Chris Lalancette, Jacob Perrontf2_toolsUpdate maintainers to Alejandro Hernandez Cordero and Chris Lalancette (#481)Remove unused import (#465)Adding date-time to frames filename (#454)Use underscores instead of dashes in setup.cfg. (#403)Contributors: Audrow Nash, Hannu Henttinen, Nisala KalupahanatlsfInstall headers to include/${PROJECT_NAME} (#11)Export a modern CMake target instead of old-style variables (#10)Contributors: Shane Loretztlsf_cppInstall includes to include/${PROJECT_NAME} (#114)Export modern CMake targets (#110)Remove the use of malloc hooks from the tlsf_cpp tests. (#109)Contributors: Chris Lalancette, Shane Loretztopic_monitorUpdate maintainers to Audrow Nash and Michael Jeronimo (#543)Small cleanups to the topic monitor. (#517)Fix topic_monitor for high publication rate (#461)Use is_alive for


key: chroma:document
string_value:
topic_monitor for high publication rate (#461)Use is_alive for threads. (#510)Contributors: Audrow Nash, Chris Lalancette, Elias De Conincktopic_statistics_demoInstall includes to include/${PROJECT_NAME} (#548)Additional fixes for documentation in demos. (#538)Fixing deprecated subscriber callback warnings (#532)Contributors: Abrar Rahman Protyasha, Chris Lalancette, Shane LoretztracetoolsInstall headers to include/${PROJECT_NAME}Merge branch ‘update-mentions-of-tracetools-test’ into ‘master’ Update applicable mentions of tracetools_test to test_tracetools See merge requestros-tracing/ros2_tracing!259Update applicable mentions of tracetools_test to test_tracetoolsMerge branch ‘version-3-1-0’ into ‘master’ Version 3.1.0 See merge requestros-tracing/ros2_tracing!256Correctly handle calls to TRACEPOINT() macro with no tracepoint argsMove publisher handle tracepoint argument from rclcpp_publish to rcl_publishAdd support for rmw init/pub, take, and executor instrumentationExport target on Windows and export an


key: chroma:document
string_value:
executor instrumentationExport target on Windows and export an interface if TRACETOOLS_DISABLEDRemove deprecated utility functionsContributors: Christophe Bedard, Ivan Santiago Paunovic, Shane Loretztracetools_launchDisable kernel tracing by defaultDon’t require kernel tracer and detect when it’s not installedAdd support for preloading pthread and dl instrumentation shared libsRemove profile_fast option and consider LD_PRELOADing both libsImprove event matching for shared lib preloadingImprove LdPreload action’s lib-finding function and add proper testsFix multiple LdPreload actions not working and add testDeprecate ‘context_names’ param and replace with ‘context_fields’Support per-domain context fields for the Trace actionImprove LdPreload.get_shared_lib_path() for when a static lib may existMove some tests from tracetools_launch to test_tracetools_launchExpose Trace action as frontend action and support substitutionsContributors: Christophe Bedard, Ingo Lütkebohletracetools_testAllow providing additional


key: chroma:document
string_value:
Ingo Lütkebohletracetools_testAllow providing additional actions for TraceTestCaseRemove default value for ‘package’ kwarg for TraceTestCaseMove actual tests out of tracetools_test to new test_tracetools packageAdd tests for rmw init/pub, take, and executor instrumentationAdd field type assertion utilities to TraceTestCaseFixing deprecated subscriber callback warningsContributors: Abrar Rahman Protyasha, Christophe Bedardtracetools_traceDisable kernel tracing by defaultDon’t require kernel tracer and detect when it’s not installedIntroduce constants for tracepoint namesOptimize default tracing session channel config valuesDeprecate ‘context_names’ param and replace with ‘context_fields’Support per-domain context fields for the Trace actionAdd support for rmw init/pub, take, and executor tracepointsContributors: Christophe Bedardtrajectory_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Contributors:


key: chroma:document
string_value:
to Geoffrey Biggs and Tully Foote (#163)Contributors: Audrow Nash, GreyturtlesimUsedoublewhen handlingqrealorient\_(#114)Add Rolling Icon (#133)Update maintainers to Audrow Nash and Michael Jeronimo (#137)Fixing deprecated subscriber callback warnings (#134)Use rosidl_get_typesupport_target() (#132)Print out the correct node name on startup. (#122)Contributors: Abrar Rahman Protyasha, Audrow Nash, Chris Lalancette, Katherine Scott, Seulbae Kim, Shane LoretzurdfInstall headers to include/${PROJECT_NAME} (#31)Add linter tests and fix errors (#30)Add in a Doxyfile to predefine macros. (#28)Contributors: Chris Lalancette, Jacob Perron, Shane Loretzurdf_parser_pluginInstall headers to include/${PROJECT_NAME} (#31)Add linter tests and fix errors (#30)Contributors: Jacob Perron, Shane Loretzvisualization_msgsInterface packages should fully <depend> on the interface packages that they depend on (#173)Update maintainers to Geoffrey Biggs and Tully Foote (#163)Marker Textures (#153)Document namespace scoped marker


key: chroma:document
string_value:
(#163)Marker Textures (#153)Document namespace scoped marker deletion. (#151)Contributors: Audrow Nash, Greg Balke, Grey, Michel Hidalgoyaml_cpp_vendorAdd missing dependency on yaml-cpp (#32)Upgrade to yaml-cpp 0.7.0 (#25)Contributors: Chris Lalancette, Scott K Loganzstd_vendorBump version number to avoid conflictUse git hash for zstd vendor (#969)Update package maintainers (#899)Declare missing dependency on ‘git’ in zstd_vendor (#890)Switch to using ‘git apply’ for zstd_vendor patches (#846)Contributors: Chris Lalancette, Christophe Bedard, Michel Hidalgo, Scott K Logan, Shane Loretz


key: chroma:document
string_value:
Title: Testing Your Code with the ROS Build Farm URL: https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Testing/BuildFarmTesting.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Testing Your Code with the ROS Build FarmTheROS 2 Build Farmis incredibly powerful. In addition to creating binaries, it will also test pull requests by compiling and running all the tests for your ROS packages before the PR is merged.There are four prerequisites.The GitHub user@ros-pull-request-buildermust have access to the repository.The GitHub repository must have the webhooks set up.Your package must be indexed in rosdistroThetest_pull_requestsflag must be true.GitHub AccessYou can give access to the PR Builder either at the GitHub organization level OR just to the single GitHub repository.GitHub OrganizationOpenhttps://github.com/orgs/%YOUR_ORG%/people(while replacing%YOUR_ORG%with the appropriate organization)ClickInviteMemberand enterros-pull-request-builderGitHub RepositoryOpenhttps://github.com/%YOUR_ORG%/%YOUR_REPO%/settings/access(while replacing%YOUR_ORG%/%YOUR_REPO$with the appropriate organization/repo)ClickAddpeopleand enterros-pull-request-builderSelectAdminorWritefor their role. (see


key: chroma:document
string_value:
their role. (see next section)WebHooksIf you grant full administrative rights toros-pull-request-builder, it will automatically setup the hooks.Alternatively, you can avoid the need for full administrative rights by setting them up with onlywritepermissions.Openhttps://github.com/%YOUR_ORG%/%YOUR_REPO%/settings/hooks/new)Enter"https://build.ros2.org/ghprbhook/as the Payload URLCheck the following options:Let me select individual events.Issue commentsPull requeststest_pull_requestsFor each ROS distro that you want pull request testing for, you must enable thetest_pull_requestsflag in the appropriate section of therosdistro.Option 1- You have the option when runningbloomto turn on pull request testing.Option 2- You cancarefullymanually edit the appropriate file in the rosdistro repo, and make a new pull request.Example.Documented in REP 143.Note that after the pull request has been added, the job will usually not be created until the nightly Jenkins reconfiguration.


key: chroma:document
string_value:
Title: Concepts

URL: https://docs.ros.org/en/jazzy/Concepts.html

Section: Concepts

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Title: Interfaces

URL: https://docs.ros.org/en/jazzy/Concepts/Basic/About

Interfaces.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
InterfacesTable of ContentsBackgroundMessagesFieldsField typesField namesField default valueConstantsServicesActionsBackgroundROS applications typically communicate through interfaces of one of three types:topics,services, oractions. ROS 2 uses a simplified description language, the interface definition language (IDL), to describe these interfaces. This description makes it easy for ROS tools to automatically generate source code for the interface type in several target languages.In this document we will describe the supported types:msg:.msgfiles are simple text files that describe the fields of a ROS message. They are used to generate source code for messages in different languages.srv:.srvfiles describe a service. They are composed of two parts: a request and a response. The request and response are message declarations.action:.actionfiles describe actions. They are composed of three parts: a goal, a result, and feedback. Each part is a message declaration itself.MessagesMessages are a way for a ROS 2


key: chroma:document
string_value:
declaration itself.MessagesMessages are a way for a ROS 2 node to send data on the network to other ROS nodes, with no response expected. For instance, if a ROS 2 node reads temperature data from a sensor, it can then publish that data on the ROS 2 network using aTemperaturemessage. Other nodes on the ROS 2 network can subscribe to that data and receive theTemperaturemessage.Messages are described and defined in.msgfiles in themsg/directory of a ROS package..msgfiles are composed of two parts: fields and constants.FieldsEach field consists of a type and a name, separated by a space, i.e:fieldtype1fieldname1 fieldtype2fieldname2 fieldtype3fieldname3For example:int32my_int stringmy_stringField typesField types can be:a built-in-typenames of Message descriptions defined on their own, such as “geometry_msgs/PoseStamped”Built-in-types currently supported:Type nameC++PythonDDS


key: chroma:document
string_value:
currently supported:Type nameC++PythonDDS typeboolboolbuiltins.boolbooleanbyteuint8_tbuiltins.bytes*octetcharcharbuiltins.int*charfloat32floatbuiltins.float*floatfloat64doublebuiltins.float*doubleint8int8_tbuiltins.int*octetuint8uint8_tbuiltins.int*octetint16int16_tbuiltins.int*shortuint16uint16_tbuiltins.int*unsigned shortint32int32_tbuiltins.int*longuint32uint32_tbuiltins.int*unsigned longint64int64_tbuiltins.int*long longuint64uint64_tbuiltins.int*unsigned long longstringstd::stringbuiltins.strstringwstringstd::u16stringbuiltins.strwstringEvery built-in-type can be used to define arrays:Type nameC++PythonDDS typestatic arraystd::array<T, N>builtins.list*T[N]unbounded dynamic arraystd::vectorbuiltins.listsequencebounded dynamic arraycustom_class<T, N>builtins.list*sequence<T, N>bounded stringstd::stringbuiltins.str*stringAll types that are more permissive than their ROS definition enforce the ROS constraints in range and length by software.Example of message definition using arrays and bounded


key: chroma:document
string_value:
software.Example of message definition using arrays and bounded types:int32[]unbounded_integer_array int32[5]five_integers_array int32[<=5]up_to_five_integers_array


key: chroma:document
string_value:
string[<=5]up_to_five_unbounded_strings string<=10[]unbounded_array_of_strings_up_to_ten_characters_each string<=10[<=5]up_to_five_strings_up_to_ten_characters_eachField namesField names must be lowercase alphanumeric characters with underscores for separating words. They must start with an alphabetic character, and they must not end with an underscore or have two consecutive underscores.Field default valueDefault values can be set to any field in the message type. Currently default values are not supported for string arrays and complex types (i.e. types not present in the built-in-types table above; that applies to all nested messages).Defining a default value is done by adding a third element to the field definition line, i.e:fieldtypefieldnamefielddefaultvalueFor example:uint8x42int16y-2000 stringfull_name"John Doe"int32[]samples[-200,-100,0,100,200]Notestring values must be defined in single'or double"quotescurrently string values are not escapedConstantsEach constant definition is like a field


key: chroma:document
string_value:
not escapedConstantsEach constant definition is like a field description with a default value, except that this value can never be changed programatically. This value assignment is indicated by use of an equal ‘=’ sign, e.g.constanttypeCONSTANTNAME=constantvalueFor example:int32X=123int32Y=-123 stringFOO="foo"stringEXAMPLE='bar'NoteConstants names have to be UPPERCASEServicesServices are a request/response communication, where the client (requester) is waiting for the server (responder) to make a short computation and return a result.Services are described and defined in.srvfiles in thesrv/directory of a ROS package.A service description file consists of a request and a response msg type, separated by---. Any two.msgfiles concatenated with a---are a legal service description.Here is a very simple example of a service that takes in a string and returns a string:stringstr --- stringstrWe can of course get much more complicated (if you want to refer to a message from the same package you must not mention the


key: chroma:document
string_value:
to a message from the same package you must not mention the package name):# request constantsint8FOO=1int8BAR=2# request fieldsint8foobar another_pkg/AnotherMessagemsg ---# response constantsuint32SECRET=123456# response fieldsanother_pkg/YetAnotherMessageval CustomMessageDefinedInThisPackagevalue uint32an_integerYou cannot embed another service inside of a service.ActionsActions are a long-running request/response communication, where the action client (requester) is waiting for the action server (the responder) to take some action and return a result. In contrast to services, actions can be long-running (many seconds or minutes), provide feedback while they are happening, and can be interrupted.Action definitions have the following form:<request_type><request_fieldname>---<response_type><response_fieldname>---<feedback_type><feedback_fieldname>Like services, the request fields are before and the response fields are after the first triple-dash (---), respectively. There is also a third set of fields after


key: chroma:document
string_value:
(---), respectively. There is also a third set of fields after the second triple-dash, which is the fields to be sent when sending feedback.There can be arbitrary numbers of request fields (including zero), arbitrary numbers of response fields (including zero), and arbitrary numbers of feedback fields (including zero).The<request_type>,<response_type>, and<feedback_type>follow all of the same rules as the<type>for a message. The<request_fieldname>,<response_fieldname>, and<feedback_fieldname>follow all of the same rules as the<fieldname>for a message.For instance, theFibonacciaction definition contains the following:int32order---int32[]sequence---int32[]sequenceThis is an action definition where the action client is sending a singleint32field representing the number of Fibonacci steps to take, and expecting the action server to produce an array ofint32containing the complete steps. Along the way, the action server may also provide an intermediate array ofint32containing the steps accomplished up until a


key: chroma:document
string_value:
Code Examples:

Language: unknown

fieldtype1fieldname1

fieldtype2fieldname2

fieldtype3fieldname3

Language: unknown

int32my_int

stringmy_string

Language: unknown

int32[]unbounded_integer_array

int32[5]five_integers_array

int32[<=5]up_to_five_integers_array

stringstring_of_unbounded_size

string<=10up_to_ten_characters_string

string[<=5]up_to_five_unbounded_strings

string<=10[]unbounded_array_of_strings_up_to_ten_characters_each

string<=10[<=5]up_to_five_strings_up_to_ten_characters_each

Language: unknown

fieldtypefieldnamefielddefaultvalue

Language: unknown

uint8x42int16y

2000

stringfull_name"John Doe"int32[]samples[

200,

100,0,100,200]

Language: unknown

constanttypeCONSTANTNAME=constantvalue

Language: unknown

int32X=123int32Y=

123

stringFOO="foo"stringEXAMPLE='bar'

Language: unknown

stringstr

--

stringstr


key: chroma:document
string_value:
Language: unknown

stringstr

--

stringstr

Language: unknown # request constantsint8FOO=1int8BAR=2# request fieldsint8foobar another_pkg/AnotherMessagemsg ---# response constantsuint32SECRET=123456# response fieldsanother_pkg/YetAnotherMessageval CustomMessageDefinedInThisPackagevalue uint32an_integer

Language: unknown

<request_type><request_fieldname>--

<response_type><response_fieldname>--

<feedback_type><feedback_fieldname>

Language: unknown

int32order--

int32[]sequence--

int32[]sequence


key: source
string_value:
/Users/ad12/ros2-rag/exported_docs/ros2/Unlocking_the_potential_of_Fast_DDS_middleware_[community-contributed].txt


key: chroma:document
string_value:
Title: Unlocking the potential of Fast DDS middleware [community-contributed] URL: https://docs.ros.org/en/jazzy/Tutorials/Advanced/FastDDS-Configuration.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Unlocking the potential of Fast DDS middleware [community-contributed]Goal:This tutorial will show how to use the extended configuration capabilities of Fast DDS in ROS 2.Tutorial level:AdvancedTime:20 minutesTable of ContentsBackgroundPrerequisitesMixing synchronous and asynchronous publications in the same nodeCreate the node with the publishersCreate the XML file with the profile configurationExecute the publisher nodeCreate a node with the subscribersExecute the subscriber nodeAnalysis of the exampleUsing other FastDDS capabilities with XMLLimiting the number of matching subscribersUsing partitions within the topicConfiguring a service and a clientCreate the nodes with the service and clientCreate the XML profiles for the service and clientExecute the nodesBackgroundThe interface between the ROS 2 stack andFast DDSis provided by the ROS 2 middleware implementationrmw_fastrtps. This implementation is available in all ROS 2 distributions, both from binaries and from sources.ROS 2 RMW only allows for the


key: chroma:document
string_value:
from binaries and from sources.ROS 2 RMW only allows for the configuration of certain middleware QoS (seeROS 2 QoS policies). However,rmw_fastrtpsoffers extended configuration capabilities to take full advantage of the features inFast DDS. This tutorial will guide you through a series of examples explaining how to use XML files to unlock this extended configuration.In order to get more information about usingFast DDSon ROS 2, please check thefollowing documentation.PrerequisitesThis tutorial assumes that you know how tocreate a package. It also assumes you know how to write asimple publisher and subscriberand asimple service and client. Although the examples are implemented in C++, the same concepts apply to Python packages.Mixing synchronous and asynchronous publications in the same nodeIn this first example, a node with two publishers, one of them with synchronous publication mode and the other one with asynchronous publication mode, will be created.rmw_fastrtpsuses synchronous publication mode by


key: chroma:document
string_value:
be created.rmw_fastrtpsuses synchronous publication mode by default.With synchronous publication mode the data is sent directly within the context of the user thread. This entails that any blocking call occurring during the write operation would block the user thread, thus preventing the application from continuing its operation. However, this mode typically yields higher throughput rates at lower latencies, since there is no notification nor context switching between threads.On the other hand, with asynchronous publication mode, each time the publisher invokes the write operation, the data is copied into a queue, a background thread (asynchronous thread) is notified about the addition to the queue, and control of the thread is returned to the user before the data is actually sent. The background thread is in charge of consuming the queue and sending the data to every matched reader.Create the node with the publishersFirst, create a new package namedsync_async_node_example_cppon a new


key: chroma:document
string_value:
create a new package namedsync_async_node_example_cppon a new workspace:LinuxmacOSWindowsmkdir -p ~/ros2_ws/srccd ~/ros2_ws/srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cppmkdir -p ~/ros2_ws/srccd ~/ros2_ws/srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cppmd \ros2_ws\srccd \ros2_ws\srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cppThen, add a file namedsrc/sync_async_writer.cppto the package, with the following content. Note that the synchronous publisher will be publishing on topicsync_topic, while the asynchronous one will be publishing on


key: chroma:document
string_value:
while the asynchronous one will be publishing on topicasync_topic.#include<chrono>#include<functional>#include<memory>#include<string>#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"usingnamespacestd::chrono_literals;classSyncAsyncPublisher:publicrclcpp::Node{public:SyncAsyncPublisher():Node("sync_async_publisher"),count_(0){// Create the synchronous publisher on topic 'sync_topic'sync_publisher_=this->create_publisher<std_msgs::msg::String>("sync_topic",10);// Create the asynchronous publisher on topic 'async_topic'async_publisher_=this->create_publisher<std_msgs::msg::String>("async_topic",10);// Actions to run every time the timer expiresautotimer_callback=[this](){// Create a new message to be sentautosync_message=std_msgs::msg::String();sync_message.data="SYNC: Hello, world! "+std::to_string(count_);// Log the message to the console to show progressRCLCPP_INFO(this->get_logger(),"Synchronously publishing: '%s'",sync_message.data.c_str());// Publish the message using the synchronous


key: chroma:document
string_value:
Publish the message using the synchronous publishersync_publisher_->publish(sync_message);// Create a new message to be sentautoasync_message=std_msgs::msg::String();async_message.data="ASYNC: Hello, world! "+std::to_string(count_);// Log the message to the console to show progressRCLCPP_INFO(this->get_logger(),"Asynchronously publishing: '%s'",async_message.data.c_str());// Publish the message using the asynchronous publisherasync_publisher_->publish(async_message);// Prepare the count for the next messagecount_++;};// This timer will trigger the publication of new data every half a secondtimer_=this->create_wall_timer(500ms,timer_callback);}private:// This timer will trigger the publication of new data every half a secondrclcpp::TimerBase::SharedPtrtimer_;// A publisher that publishes asynchronouslyrclcpp::Publisher<std_msgs::msg::String>::SharedPtrasync_publisher_;// A publisher that publishes synchronouslyrclcpp::Publisher<std_msgs::msg::String>::SharedPtrsync_publisher_;// Number of messages sent so


key: chroma:document
string_value:
Number of messages sent so farsize_tcount_;};intmain(intargc,char*argv[]){rclcpp::init(argc,argv);rclcpp::spin(std::make_shared<SyncAsyncPublisher>());rclcpp::shutdown();return0;}Now open theCMakeLists.txtfile and add a new executable and name itSyncAsyncWriterso you can run your node usingros2run:add_executable(SyncAsyncWritersrc/sync_async_writer.cpp)ament_target_dependencies(SyncAsyncWriterrclcppstd_msgs)Finally, add theinstall(TARGETS…)section soros2runcan find your executable:install(TARGETSSyncAsyncWriterDESTINATIONlib/${PROJECT_NAME})You can clean up yourCMakeLists.txtby removing some unnecessary sections and comments, so it looks like this:cmake_minimum_required(VERSION3.8)project(sync_async_node_example_cpp)# Default to


key: chroma:document
string_value:
Default to C++14if(NOTCMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD14)endif()if(CMAKE_COMPILER_IS_GNUCXXORCMAKE_CXX_COMPILER_IDMATCHES"Clang")add_compile_options(-Wall-Wextra-Wpedantic)endif()find_package(ament_cmakeREQUIRED)find_package(rclcppREQUIRED)find_package(std_msgsREQUIRED)add_executable(SyncAsyncWritersrc/sync_async_writer.cpp)ament_target_dependencies(SyncAsyncWriterrclcppstd_msgs)install(TARGETSSyncAsyncWriterDESTINATIONlib/${PROJECT_NAME})ament_package()If this node is built and run now, both publishers will behave the same, publishing asynchronously in both topics, because this is the default publication mode. The default publication mode configuration can be changed in runtime during the node launching, using an XML file.Create the XML file with the profile configurationCreate a file with nameSyncAsync.xmland the following content:<?xml version="1.0" encoding="UTF-8" ?><profilesxmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles"><!-- default publisher profile


key: chroma:document
string_value:
default publisher profile --><publisherprofile_name="default_publisher"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></publisher><!-- default subscriber profile --><subscriberprofile_name="default_subscriber"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></subscriber><!-- publisher profile for topic sync_topic --><publisherprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode></qos></publisher><!-- publisher profile for topic async_topic --><publisherprofile_name="/async_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos></publisher></profiles>Note that several profiles for publisher and subscriber are defined. Two default profiles which are defined setting theis_default_profiletotrue, and two profiles with names that coincide with those of the previously defined topics:sync_topicand another one


key: chroma:document
string_value:
of the previously defined topics:sync_topicand another one forasync_topic. These last two profiles set the publication mode toSYNCHRONOUSorASYNCHRONOUSaccordingly. Note also that all profiles specify ahistoryMemoryPolicyvalue, which is needed for the example to work, and the reason will be explained later on this tutorial.Execute the publisher nodeYou will need to export the following environment variables for the XML to be loaded:LinuxmacOSWindowsexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlSET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlFinally, ensure you have sourced your setup files and run the node:source install/setup.bashros2 run sync_async_node_example_cpp SyncAsyncWriterYou should see the


key: chroma:document
string_value:
sync_async_node_example_cpp SyncAsyncWriterYou should see the publishers sending the data from the publishing node, like so:[INFO] [1612972049.994630332] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 0'[INFO] [1612972049.995097767] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 0'[INFO] [1612972050.494478706] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 1'[INFO] [1612972050.494664334] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 1'[INFO] [1612972050.994368474] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 2'[INFO] [1612972050.994549851] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 2'Now you have a synchronous publisher and an asynchronous publisher running inside the same node.Create a node with the subscribersNext, a new node with the subscribers that will listen to thesync_topicandasync_topicpublications is going to be created. In a new source file


key: chroma:document
string_value:
is going to be created. In a new source file namedsrc/sync_async_reader.cppwrite the following content:#include<memory>#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"classSyncAsyncSubscriber:publicrclcpp::Node{public:SyncAsyncSubscriber():Node("sync_async_subscriber"){// Lambda function to run every time a new message is receivedautotopic_callback=[this](conststd_msgs::msg::String&msg){RCLCPP_INFO(this->get_logger(),"I heard: '%s'",msg.data.c_str());};// Create the synchronous subscriber on topic 'sync_topic'// and tie it to the topic_callbacksync_subscription_=this->create_subscription<std_msgs::msg::String>("sync_topic",10,topic_callback);// Create the asynchronous subscriber on topic 'async_topic'// and tie it to the topic_callbackasync_subscription_=this->create_subscription<std_msgs::msg::String>("async_topic",10,topic_callback);}private:// A subscriber that listens to topic 'sync_topic'rclcpp::Subscription<std_msgs::msg::String>::SharedPtrsync_subscription_;// A subscriber that listens to


key: chroma:document
string_value:
A subscriber that listens to topic 'async_topic'rclcpp::Subscription<std_msgs::msg::String>::SharedPtrasync_subscription_;};intmain(intargc,char*argv[]){rclcpp::init(argc,argv);rclcpp::spin(std::make_shared<SyncAsyncSubscriber>());rclcpp::shutdown();return0;}Open theCMakeLists.txtfile and add a new executable and name itSyncAsyncReaderunder the previousSyncAsyncWriter:add_executable(SyncAsyncReadersrc/sync_async_reader.cpp)ament_target_dependencies(SyncAsyncReaderrclcppstd_msgs)install(TARGETSSyncAsyncReaderDESTINATIONlib/${PROJECT_NAME})Execute the subscriber nodeWith the publisher node running in one terminal, open another one and export the required environment variables for the XML to be loaded:LinuxmacOSWindowsexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlSET


key: chroma:document
string_value:
FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlSET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xmlFinally, ensure you have sourced your setup files and run the node:source install/setup.bashros2 run sync_async_node_example_cpp SyncAsyncReaderYou should see the subscribers receiving the data from the publishing node, like so:[INFO] [1612972054.495429090] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 10'[INFO] [1612972054.995410057] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 10'[INFO] [1612972055.495453494] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 11'[INFO] [1612972055.995396561] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 11'[INFO] [1612972056.495534818] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 12'[INFO] [1612972056.995473953] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 12'Analysis of the exampleConfiguration profiles XMLThe XML file defines several


key: chroma:document
string_value:
exampleConfiguration profiles XMLThe XML file defines several configurations for publishers and subscribers. You can have a default publisher configuration profile and several topic-specific publisher profiles. The only requirement is that all publisher profiles have a different name and that there is only a single default profile. The same goes for subscribers.In order to define a configuration for a specific topic, just name the profile after the the ROS 2 topic name (like/sync_topicand/async_topicin the example), andrmw_fastrtpswill apply this profile to all publishers and subscribers for that topic. The default configuration profile is identified by the attributeis_default_profileset totrue, and acts as a fallback profile when there is no other one with a name matching the topic name.The environment variableFASTRTPS_DEFAULT_PROFILES_FILEis used to informFast DDSthe path to the XML file with the configuration profiles to load.RMW_FASTRTPS_USE_QOS_FROM_XMLAmong all the configurable


key: chroma:document
string_value:
load.RMW_FASTRTPS_USE_QOS_FROM_XMLAmong all the configurable attributes,rmw_fastrtpstreatspublishModeandhistoryMemoryPolicydifferently. By default, these values are set toASYNCHRONOUSandPREALLOCATED_WITH_REALLOCwithin thermw_fastrtpsimplementation, and the values set on the XML file are ignored. In order to use the values in the XML file, the environment variableRMW_FASTRTPS_USE_QOS_FROM_XMLmust be set to1.However, this entailsanother caveat: IfRMW_FASTRTPS_USE_QOS_FROM_XMLis set, but the XML file does not definepublishModeorhistoryMemoryPolicy, these attributes take theFast DDSdefault value instead of thermw_fastrtpsdefault value. This is important, especially forhistoryMemoryPolicy, because theFast DDSdeafult value isPREALLOCATEDwhich does not work with ROS2 topic data types. Therefore, in the example, a valid value for this policy has been explicitly set (DYNAMIC).Prioritization of rmw_qos_profile_tROS 2 QoS contained inrmw_qos_profile_tare always honored, unless set to*_SYSTEM_DEFAULT. In that case,


key: chroma:document
string_value:
always honored, unless set to*_SYSTEM_DEFAULT. In that case, XML values (orFast DDSdefault values in the absence of XML ones) are applied. This means that if any QoS inrmw_qos_profile_tis set to something other than*_SYSTEM_DEFAULT, the corresponding value in the XML is ignored.Using other FastDDS capabilities with XMLAlthough we have created a node with two publishers with different configuration, it is not easy to check that they are behaving differently. Now that the basics of XML profiles have been covered, let us use them to configure something which has some visual effect on the nodes. Specifically, a maximum number of matching subscribers on one of the publishers and a partition definition on the other will be set. Note that these are only very simple examples among all the configuration attributes that can be tuned onrmw_fastrtpsthrough XML files. Please refer to*Fast DDS* documentationto  see the whole list of attributes that can be configured through XML files.Limiting the number of matching


key: chroma:document
string_value:
be configured through XML files.Limiting the number of matching subscribersAdd a maximum number of matched subscribers to the/async_topicpublisher profile. It should look like this:<!-- publisher profile for topic async_topic --><publisherprofile_name="/async_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos><matchedSubscribersAllocation><initial>0</initial><maximum>1</maximum><increment>1</increment></matchedSubscribersAllocation></publisher>The number of matching subscribers is being limited to one.Now open three terminals and do not forget to source the setup files and to set the required environment variables. On the first terminal run the publisher node, and the subscriber node on the other two. You should see that only the first subscriber node receives the messages from both topics. The second one could not complete the matching process in the/async_topicbecause the publisher prevented it, as it had already reached its maximum of


key: chroma:document
string_value:
prevented it, as it had already reached its maximum of matched publishers. Consequently, only the messages from the/sync_topicare going to be received in this third terminal:[INFO] [1613127657.088860890] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 18'[INFO] [1613127657.588896594] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 19'[INFO] [1613127658.088849401] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 20'Using partitions within the topicThe partitions feature can be used to control which publishers and subscribers exchange information within the same topic.Partitions introduce a logical entity isolation level concept inside the physical isolation induced by a Domain ID. For a publisher to communicate with a subscriber, they have to belong at least to one common partition. Partitions represent another level to separate publishers and subscribers beyond domain and topic. Unlike domain and topic, an endpoint can belong to several partitions at the same time. For certain data to be


key: chroma:document
string_value:
to several partitions at the same time. For certain data to be shared over different domains or topics, there must be a different publisher for each, sharing its own history of changes. However, a single publisher can share the same data sample over different partitions using a single topic data change, thus reducing network overload.Let us change the/sync_topicpublisher to partitionpart1and create a new/sync_topicsubscriber which uses partitionpart2. Their profiles should now look like this:<!-- publisher profile for topic sync_topic --><publisherprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode><partition><names><name>part1</name></names></partition></qos></publisher><!-- subscriber profile for topic sync_topic --><subscriberprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><partition><names><name>part2</name></names></partition></qos></subscriber>Open two terminals. Do not forget to source


key: chroma:document
string_value:
two terminals. Do not forget to source the setup files and to set the required environment variables. On the first terminal run the publisher node, and the subscriber node on the other one. You should see that only the/async_topicmessages are reaching the subscriber. The/sync_topicsubscriber is not receiving the data as it is in a different partition from the corresponding publisher.[INFO] [1612972054.995410057] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 10'[INFO] [1612972055.995396561] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 11'[INFO] [1612972056.995473953] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 12'Configuring a service and a clientServices and clients have a publisher and a subscriber each, that communicate through two different topics. For example, for a service namedpingthere is:A service subscriber listening to requests on/rq/ping.A service publisher sending responses on/rr/ping.A client publisher sending requests on/rq/ping.A client subscriber listening to


key: chroma:document
string_value:
sending requests on/rq/ping.A client subscriber listening to responses on/rr/ping.Although you can use these topic names to set the configuration profiles on the XML, sometimes you may wish to apply the same profile to all services or clients on a node. Instead of copying the same profile with all topic names generated for all services, you can just create a publisher and subscriber profile pair namedservice. The same can be done for clients creating a pair namedclient.Create the nodes with the service and clientStart creating the node with the service. Add a new source file namedsrc/ping_service.cppon your package with the following content:#include<memory>#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/trigger.hpp"/*** Service action: responds with success=true and prints the request on the console*/voidping(conststd::shared_ptr<example_interfaces::srv::Trigger::Request>request,std::shared_ptr<example_interfaces::srv::Trigger::Response>response){// The request data is unused(void)request;//


key: chroma:document
string_value:
The request data is unused(void)request;// Build the responseresponse->success=true;// Log to the consoleRCLCPP_INFO(rclcpp::get_logger("ping_server"),"Incoming request");RCLCPP_INFO(rclcpp::get_logger("ping_server"),"Sending back response");}intmain(intargc,char**argv){rclcpp::init(argc,argv);// Create the node and the servicestd::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("ping_server");rclcpp::Service<example_interfaces::srv::Trigger>::SharedPtrservice=node->create_service<example_interfaces::srv::Trigger>("ping",&ping);// Log that the service is readyRCLCPP_INFO(rclcpp::get_logger("ping_server"),"Ready to serve.");// run the noderclcpp::spin(node);rclcpp::shutdown();}Create the client in a file namedsrc/ping_client.cppwith the following content:#include<chrono>#include<memory>#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/trigger.hpp"usingnamespacestd::chrono_literals;intmain(intargc,char**argv){rclcpp::init(argc,argv);// Create the node and the


key: chroma:document
string_value:
Create the node and the clientstd::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("ping_client");rclcpp::Client<example_interfaces::srv::Trigger>::SharedPtrclient=node->create_client<example_interfaces::srv::Trigger>("ping");// Create a requestautorequest=std::make_shared<example_interfaces::srv::Trigger::Request>();// Wait for the service to be availablewhile(!client->wait_for_service(1s)){if(!rclcpp::ok()){RCLCPP_ERROR(rclcpp::get_logger("ping_client"),"Interrupted while waiting for the service. Exiting.");return0;}RCLCPP_INFO(rclcpp::get_logger("ping_client"),"Service not available, waiting again...");}// Now that the service is available, send the requestRCLCPP_INFO(rclcpp::get_logger("ping_client"),"Sending request");autoresult=client->async_send_request(request);// Wait for the result and log it to the consoleif(rclcpp::spin_until_future_complete(node,result)==rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger("ping_client"),"Response


key: chroma:document
string_value:
received");}else{RCLCPP_ERROR(rclcpp::get_logger("ping_client"),"Failed to call service ping");}rclcpp::shutdown();return0;}Open theCMakeLists.txtfile and add two new executablesping_serviceandping_client:find_package(example_interfacesREQUIRED)add_executable(ping_servicesrc/ping_service.cpp)ament_target_dependencies(ping_serviceexample_interfacesrclcpp)add_executable(ping_clientsrc/ping_client.cpp)ament_target_dependencies(ping_clientexample_interfacesrclcpp)install(TARGETSping_serviceDESTINATIONlib/${PROJECT_NAME})install(TARGETSping_clientDESTINATIONlib/${PROJECT_NAME})Finally, build the package.Create the XML profiles for the service and clientCreate a file with nameping.xmlwith the following content:<?xml version="1.0" encoding="UTF-8" ?><profilesxmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles"><!-- default publisher profile --><publisherprofile_name="default_publisher"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></publisher><!-- default subscriber profile


key: chroma:document
string_value:
default subscriber profile --><subscriberprofile_name="default_subscriber"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></subscriber><!-- service publisher is SYNC --><publisherprofile_name="service"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode></qos></publisher><!-- client publisher is ASYNC --><publisherprofile_name="client"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos></publisher></profiles>This configuration file sets the publication mode toSYNCHRONOUSon the service and toASYNCHRONOUSon the client. Note that we are only defining the publisher profiles for both the service and the client, but subscriber profiles could be provided too.Execute the nodesOpen two terminals and source the setup files on each one. Then set the required environment variables for the XML to be loaded:LinuxmacOSWindowsexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport


key: chroma:document
string_value:
RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xmlexport RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xmlSET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xmlOn the first terminal run the service node.ros2 run sync_async_node_example_cpp ping_serviceYou should see the service waiting for requests:[INFO] [1612977403.805799037] [ping_server]: Ready to serve.On the second terminal, run the client node.ros2 run sync_async_node_example_cpp ping_clientYou should see the client sending the request and receiving the response:[INFO] [1612977404.805799037] [ping_client]: Sending request[INFO] [1612977404.825473835] [ping_client]: Response receivedAt the same time, the output in the server console has been updated:[INFO] [1612977403.805799037] [ping_server]: Ready to serve.[INFO]


key: chroma:document
string_value:
[1612977403.805799037] [ping_server]: Ready to serve.[INFO] [1612977404.807314904] [ping_server]: Incoming request[INFO] [1612977404.836405125] [ping_server]: Sending back response


key: chroma:document
string_value:
Code Examples:

Language: unknown mkdir -p ~/ros2_ws/srccd ~/ros2_ws/srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cpp

Language: unknown mkdir -p ~/ros2_ws/srccd ~/ros2_ws/srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cpp

Language: unknown md \ros2_ws\srccd \ros2_ws\srcros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs -- sync_async_node_example_cpp


key: chroma:document
string_value:
Language: unknown #include<chrono>#include<functional>#include<memory>#include<string>#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"usingnamespacestd::chrono_literals;classSyncAsyncPublisher:publicrclcpp::Node{public:SyncAsyncPublisher():Node("sync_async_publisher"),count_(0){// Create the synchronous publisher on topic 'sync_topic'sync_publisher_=this->create_publisher<std_msgs::msg::String>("sync_topic",10);// Create the asynchronous publisher on topic 'async_topic'async_publisher_=this->create_publisher<std_msgs::msg::String>("async_topic",10);// Actions to run every time the timer expiresautotimer_callback=[this](){// Create a new message to be sentautosync_message=std_msgs::msg::String();sync_message.data="SYNC: Hello, world! "+std::to_string(count_);// Log the message to the console to show progressRCLCPP_INFO(this->get_logger(),"Synchronously publishing: '%s'",sync_message.data.c_str());// Publish the message using the synchronous publishersync_publisher_->publish(sync_message);// Create


key: chroma:document
string_value:
publishersync_publisher_->publish(sync_message);// Create a new message to be sentautoasync_message=std_msgs::msg::String();async_message.data="ASYNC: Hello, world! "+std::to_string(count_);// Log the message to the console to show progressRCLCPP_INFO(this->get_logger(),"Asynchronously publishing: '%s'",async_message.data.c_str());// Publish the message using the asynchronous publisherasync_publisher_->publish(async_message);// Prepare the count for the next messagecount_++;};// This timer will trigger the publication of new data every half a secondtimer_=this->create_wall_timer(500ms,timer_callback);}private:// This timer will trigger the publication of new data every half a secondrclcpp::TimerBase::SharedPtrtimer_;// A publisher that publishes asynchronouslyrclcpp::Publisher<std_msgs::msg::String>::SharedPtrasync_publisher_;// A publisher that publishes synchronouslyrclcpp::Publisher<std_msgs::msg::String>::SharedPtrsync_publisher_;// Number of messages sent so


key: chroma:document
string_value:
Number of messages sent so farsize_tcount_;};intmain(intargc,char*argv[]){rclcpp::init(argc,argv);rclcpp::spin(std::make_shared<SyncAsyncPublisher>());rclcpp::shutdown();return0;}


key: chroma:document
string_value:
Language: unknown

add_executable(SyncAsyncWritersrc/sync_async_writer.cpp)ament_target_dependencies(SyncAsyncWriterrclcppstd_msgs)

Language: unknown

install(TARGETSSyncAsyncWriterDESTINATIONlib/${PROJECT_NAME})

Language: unknown

cmake_minimum_required(VERSION3.8)project(sync_async_node_example_cpp)# Default to C++14if(NOTCMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD14)endif()if(CMAKE_COMPILER_IS_GNUCXXORCMAKE_CXX_COMPILER_IDMATCHES"Clang")add_compile_options(

Wall

Wextra

Wpedantic)endif()find_package(ament_cmakeREQUIRED)find_package(rclcppREQUIRED)find_package(std_msgsREQUIRED)add_executable(SyncAsyncWritersrc/sync_async_writer.cpp)ament_target_dependencies(SyncAsyncWriterrclcppstd_msgs)install(TARGETSSyncAsyncWriterDESTINATIONlib/${PROJECT_NAME})ament_package()


key: chroma:document
string_value:
Language: unknown <?xml version="1.0" encoding="UTF-8" ?><profilesxmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles"><!-- default publisher profile --><publisherprofile_name="default_publisher"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></publisher><!-- default subscriber profile --><subscriberprofile_name="default_subscriber"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></subscriber><!-- publisher profile for topic sync_topic --><publisherprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode></qos></publisher><!-- publisher profile for topic async_topic --><publisherprofile_name="/async_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos></publisher></profiles>

Language: unknown


key: chroma:document
string_value:
Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown

SET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown source install/setup.bashros2 run sync_async_node_example_cpp SyncAsyncWriter


key: chroma:document
string_value:
Language: unknown [INFO] [1612972049.994630332] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 0'[INFO] [1612972049.995097767] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 0'[INFO] [1612972050.494478706] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 1'[INFO] [1612972050.494664334] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 1'[INFO] [1612972050.994368474] [sync_async_publisher]: Synchronously publishing: 'SYNC: Hello, world! 2'[INFO] [1612972050.994549851] [sync_async_publisher]: Asynchronously publishing: 'ASYNC: Hello, world! 2'


key: chroma:document
string_value:
Language: unknown #include<memory>#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"classSyncAsyncSubscriber:publicrclcpp::Node{public:SyncAsyncSubscriber():Node("sync_async_subscriber"){// Lambda function to run every time a new message is receivedautotopic_callback=[this](conststd_msgs::msg::String&msg){RCLCPP_INFO(this->get_logger(),"I heard: '%s'",msg.data.c_str());};// Create the synchronous subscriber on topic 'sync_topic'// and tie it to the topic_callbacksync_subscription_=this->create_subscription<std_msgs::msg::String>("sync_topic",10,topic_callback);// Create the asynchronous subscriber on topic 'async_topic'// and tie it to the topic_callbackasync_subscription_=this->create_subscription<std_msgs::msg::String>("async_topic",10,topic_callback);}private:// A subscriber that listens to topic 'sync_topic'rclcpp::Subscription<std_msgs::msg::String>::SharedPtrsync_subscription_;// A subscriber that listens to topic


key: chroma:document
string_value:
A subscriber that listens to topic 'async_topic'rclcpp::Subscription<std_msgs::msg::String>::SharedPtrasync_subscription_;};intmain(intargc,char*argv[]){rclcpp::init(argc,argv);rclcpp::spin(std::make_shared<SyncAsyncSubscriber>());rclcpp::shutdown();return0;}


key: chroma:document
string_value:
Language: unknown

add_executable(SyncAsyncReadersrc/sync_async_reader.cpp)ament_target_dependencies(SyncAsyncReaderrclcppstd_msgs)install(TARGETSSyncAsyncReaderDESTINATIONlib/${PROJECT_NAME})

Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown

SET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/SyncAsync.xml

Language: unknown source install/setup.bashros2 run sync_async_node_example_cpp SyncAsyncReader


key: chroma:document
string_value:
Language: unknown [INFO] [1612972054.495429090] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 10'[INFO] [1612972054.995410057] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 10'[INFO] [1612972055.495453494] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 11'[INFO] [1612972055.995396561] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 11'[INFO] [1612972056.495534818] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 12'[INFO] [1612972056.995473953] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 12'

Language: unknown <!-- publisher profile for topic async_topic --><publisherprofile_name="/async_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos><matchedSubscribersAllocation><initial>0</initial><maximum>1</maximum><increment>1</increment></matchedSubscribersAllocation></publisher>


key: chroma:document
string_value:
Language: unknown [INFO] [1613127657.088860890] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 18'[INFO] [1613127657.588896594] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 19'[INFO] [1613127658.088849401] [sync_async_subscriber]: I heard: 'SYNC: Hello, world! 20'

Language: unknown <!-- publisher profile for topic sync_topic --><publisherprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode><partition><names><name>part1</name></names></partition></qos></publisher><!-- subscriber profile for topic sync_topic --><subscriberprofile_name="/sync_topic"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><partition><names><name>part2</name></names></partition></qos></subscriber>


key: chroma:document
string_value:
Language: unknown [INFO] [1612972054.995410057] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 10'[INFO] [1612972055.995396561] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 11'[INFO] [1612972056.995473953] [sync_async_subscriber]: I heard: 'ASYNC: Hello, world! 12'


key: chroma:document
string_value:
Language: unknown #include<memory>#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/trigger.hpp"/*** Service action: responds with success=true and prints the request on the console*/voidping(conststd::shared_ptr<example_interfaces::srv::Trigger::Request>request,std::shared_ptr<example_interfaces::srv::Trigger::Response>response){// The request data is unused(void)request;// Build the responseresponse->success=true;// Log to the consoleRCLCPP_INFO(rclcpp::get_logger("ping_server"),"Incoming request");RCLCPP_INFO(rclcpp::get_logger("ping_server"),"Sending back response");}intmain(intargc,char**argv){rclcpp::init(argc,argv);// Create the node and the servicestd::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("ping_server");rclcpp::Service<example_interfaces::srv::Trigger>::SharedPtrservice=node->create_service<example_interfaces::srv::Trigger>("ping",&ping);// Log that the service is readyRCLCPP_INFO(rclcpp::get_logger("ping_server"),"Ready to serve.");// run the


key: chroma:document
string_value:
Language: unknown #include<chrono>#include<memory>#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/trigger.hpp"usingnamespacestd::chrono_literals;intmain(intargc,char**argv){rclcpp::init(argc,argv);// Create the node and the clientstd::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("ping_client");rclcpp::Client<example_interfaces::srv::Trigger>::SharedPtrclient=node->create_client<example_interfaces::srv::Trigger>("ping");// Create a requestautorequest=std::make_shared<example_interfaces::srv::Trigger::Request>();// Wait for the service to be availablewhile(!client->wait_for_service(1s)){if(!rclcpp::ok()){RCLCPP_ERROR(rclcpp::get_logger("ping_client"),"Interrupted while waiting for the service. Exiting.");return0;}RCLCPP_INFO(rclcpp::get_logger("ping_client"),"Service not available, waiting again...");}// Now that the service is available, send the requestRCLCPP_INFO(rclcpp::get_logger("ping_client"),"Sending request");autoresult=client->async_send_request(request);// Wait for the result


key: chroma:document
string_value:
Wait for the result and log it to the consoleif(rclcpp::spin_until_future_complete(node,result)==rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger("ping_client"),"Response received");}else{RCLCPP_ERROR(rclcpp::get_logger("ping_client"),"Failed to call service ping");}rclcpp::shutdown();return0;}


key: chroma:document
string_value:
Language: unknown

find_package(example_interfacesREQUIRED)add_executable(ping_servicesrc/ping_service.cpp)ament_target_dependencies(ping_serviceexample_interfacesrclcpp)add_executable(ping_clientsrc/ping_client.cpp)ament_target_dependencies(ping_clientexample_interfacesrclcpp)install(TARGETSping_serviceDESTINATIONlib/${PROJECT_NAME})install(TARGETSping_clientDESTINATIONlib/${PROJECT_NAME})


key: chroma:document
string_value:
Language: unknown <?xml version="1.0" encoding="UTF-8" ?><profilesxmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles"><!-- default publisher profile --><publisherprofile_name="default_publisher"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></publisher><!-- default subscriber profile --><subscriberprofile_name="default_subscriber"is_default_profile="true"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy></subscriber><!-- service publisher is SYNC --><publisherprofile_name="service"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>SYNCHRONOUS</kind></publishMode></qos></publisher><!-- client publisher is ASYNC --><publisherprofile_name="client"><historyMemoryPolicy>DYNAMIC</historyMemoryPolicy><qos><publishMode><kind>ASYNCHRONOUS</kind></publishMode></qos></publisher></profiles>

Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xml


key: chroma:document
string_value:
Language: unknown

export RMW_IMPLEMENTATION=rmw_fastrtps_cppexport RMW_FASTRTPS_USE_QOS_FROM_XML=1export FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xml

Language: unknown

SET RMW_IMPLEMENTATION=rmw_fastrtps_cppSET RMW_FASTRTPS_USE_QOS_FROM_XML=1SET FASTRTPS_DEFAULT_PROFILES_FILE=path/to/ping.xml

Language: unknown

ros2 run sync_async_node_example_cpp ping_service

Language: unknown [INFO] [1612977403.805799037] [ping_server]: Ready to serve.

Language: unknown

ros2 run sync_async_node_example_cpp ping_client

Language: unknown [INFO] [1612977404.805799037] [ping_client]: Sending request[INFO] [1612977404.825473835] [ping_client]: Response received

Language: unknown [INFO] [1612977403.805799037] [ping_server]: Ready to serve.[INFO] [1612977404.807314904] [ping_server]: Incoming request[INFO] [1612977404.836405125] [ping_server]: Sending back response


key: chroma:document
string_value:
Title: Using URDF withrobot_state_publisher

URL: https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Using

URDF

with

Robot

State

Publisher.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Using URDF withrobot_state_publisherGoal:Simulate a walking robot modeled in URDF and view it in Rviz.Tutorial level:IntermediateTime:15 minutesContentsBackgroundPrerequisitesTasks1 Create a package2 Create the URDF File3 Publish the state4 Create a launch file5 Edit the setup.py file6 Install the package7 View the resultsSummaryBackgroundThis tutorial will show you how to model a walking robot, publish the state as atf2message and view the simulation in Rviz. First, we create the URDF model describing the robot assembly. Next we write a node which simulates the motion and publishes the JointState and transforms. We then userobot_state_publisherto publish the entire robot state to/tf2.Prerequisitesrviz2As always, don’t forget to source ROS 2 inevery new terminal you open.Tasks1 Create a packageCreate the directory:LinuxmacOSWindowsmkdir -p second_ros2_ws/srcmkdir -p second_ros2_ws/srcmd second_ros2_ws/srcThen create the package:cd second_ros2_ws/srcros2 pkg create --build-type ament_python --license


key: chroma:document
string_value:
pkg create --build-type ament_python --license Apache-2.0 urdf_tutorial_r2d2 --dependencies rclpycd urdf_tutorial_r2d2You should now see aurdf_tutorial_r2d2folder. Next you will make several changes to it.2 Create the URDF FileCreate the directory where we will store some assets:LinuxmacOSWindowsmkdir -p urdfmkdir -p urdfmd urdfDownload theURDFfileand save it assecond_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.urdf.xml. Download theRvizconfigurationfileand save it assecond_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.rviz.3 Publish the stateNow we need a method for specifying what state the robot is in. To do this, we must specify all three joints and the overall odometry.Fire up your favorite editor and paste the following code


key: chroma:document
string_value:
up your favorite editor and paste the following code intosecond_ros2_ws/src/urdf_tutorial_r2d2/urdf_tutorial_r2d2/state_publisher.pyfrommathimportsin,cos,piimportrclpyfromrclpy.nodeimportNodefromrclpy.qosimportQoSProfilefromgeometry_msgs.msgimportQuaternionfromsensor_msgs.msgimportJointStatefromtf2_rosimportTransformBroadcaster,TransformStampedclassStatePublisher(Node):def__init__(self):rclpy.init()super().__init__('state_publisher')qos_profile=QoSProfile(depth=10)self.joint_pub=self.create_publisher(JointState,'joint_states',qos_profile)self.broadcaster=TransformBroadcaster(self,qos=qos_profile)self.nodeName=self.get_name()self.get_logger().info("{0}started".format(self.nodeName))degree=pi/180.0loop_rate=self.create_rate(30)# robot statetilt=0.tinc=degreeswivel=0.angle=0.height=0.hinc=0.005# message declarationsodom_trans=TransformStamped()odom_trans.header.frame_id='odom'odom_trans.child_frame_id='axis'joint_state=JointState()try:whilerclpy.ok():rclpy.spin_once(self)# update


key: chroma:document
string_value:
update joint_statenow=self.get_clock().now()joint_state.header.stamp=now.to_msg()joint_state.name=['swivel','tilt','periscope']joint_state.position=[swivel,tilt,height]# update transform# (moving in a circle with radius=2)odom_trans.header.stamp=now.to_msg()odom_trans.transform.translation.x=cos(angle)*2odom_trans.transform.translation.y=sin(angle)*2odom_trans.transform.translation.z=0.7odom_trans.transform.rotation=\euler_to_quaternion(0,0,angle+pi/2)# roll,pitch,yaw# send the joint state and transformself.joint_pub.publish(joint_state)self.broadcaster.sendTransform(odom_trans)# Create new robot statetilt+=tinciftilt<-0.5ortilt>0.0:tinc*=-1height+=hincifheight>0.2orheight<0.0:hinc*=-1swivel+=degreeangle+=degree/4# This will adjust as needed per


key: chroma:document
string_value:
This will adjust as needed per iterationloop_rate.sleep()exceptKeyboardInterrupt:passdefeuler_to_quaternion(roll,pitch,yaw):qx=sin(roll/2)*cos(pitch/2)*cos(yaw/2)-cos(roll/2)*sin(pitch/2)*sin(yaw/2)qy=cos(roll/2)*sin(pitch/2)*cos(yaw/2)+sin(roll/2)*cos(pitch/2)*sin(yaw/2)qz=cos(roll/2)*cos(pitch/2)*sin(yaw/2)-sin(roll/2)*sin(pitch/2)*cos(yaw/2)qw=cos(roll/2)*cos(pitch/2)*cos(yaw/2)+sin(roll/2)*sin(pitch/2)*sin(yaw/2)returnQuaternion(x=qx,y=qy,z=qz,w=qw)defmain():node=StatePublisher()if__name__=='__main__':main()4 Create a launch fileCreate a newsecond_ros2_ws/src/urdf_tutorial_r2d2/launchfolder. Open your editor and paste the following code, saving it


key: chroma:document
string_value:
Open your editor and paste the following code, saving it assecond_ros2_ws/src/urdf_tutorial_r2d2/launch/demo_launch.pyimportosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.substitutionsimportLaunchConfigurationfromlaunch_ros.actionsimportNodedefgenerate_launch_description():use_sim_time=LaunchConfiguration('use_sim_time',default='false')urdf_file_name='r2d2.urdf.xml'urdf=os.path.join(get_package_share_directory('urdf_tutorial_r2d2'),urdf_file_name)withopen(urdf,'r')asinfp:robot_desc=infp.read()returnLaunchDescription([DeclareLaunchArgument('use_sim_time',default_value='false',description='Use simulation (Gazebo) clock if


key: chroma:document
string_value:
simulation (Gazebo) clock if true'),Node(package='robot_state_publisher',executable='robot_state_publisher',name='robot_state_publisher',output='screen',parameters=[{'use_sim_time':use_sim_time,'robot_description':robot_desc}],arguments=[urdf]),Node(package='urdf_tutorial_r2d2',executable='state_publisher',name='state_publisher',output='screen'),])5 Edit the setup.py fileYou must tell thecolconbuild tool how to install your Python package. Edit thesecond_ros2_ws/src/urdf_tutorial_r2d2/setup.pyfile as follows:include these import statementsimportosfromglobimportglobfromsetuptoolsimportsetupfromsetuptoolsimportfind_packagesappend these 2 lines insidedata_filesdata_files=[...(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','*launch.[pxy][yma]*'))),(os.path.join('share',package_name),glob('urdf/*')),],modify theentry_pointstable so you can later run ‘state_publisher’ from a console'console_scripts':['state_publisher = urdf_tutorial_r2d2.state_publisher:main'],Save thesetup.pyfile with


key: chroma:document
string_value:
thesetup.pyfile with your changes.6 Install the packagecd second_ros2_wscolcon build --symlink-install --packages-select urdf_tutorial_r2d2Source the setup files:LinuxmacOSWindowssource install/setup.bashsource install/setup.bashcall install/setup.bat7 View the resultsLaunch the packageros2 launch urdf_tutorial_r2d2 demo_launch.pyOpen a new terminal, the run Rviz usingrviz2 -d second_ros2_ws/install/urdf_tutorial_r2d2/share/urdf_tutorial_r2d2/r2d2.rvizSee theUser Guidefor details on how to use Rviz.SummaryYou created aJointStatepublisher node and coupled it withrobot_state_publisherto simulate a walking robot. The code used in these examples is originally fromhere.Credit is given to the authors of thisROS 1 tutorialfrom which some content was reused.


key: chroma:document
string_value:
Code Examples:

Language: unknown

mkdir

p second_ros2_ws/src

Language: unknown

mkdir

p second_ros2_ws/src

Language: unknown

md second_ros2_ws/src

Language: unknown cd second_ros2_ws/srcros2 pkg create --build-type ament_python --license Apache-2.0 urdf_tutorial_r2d2 --dependencies rclpycd urdf_tutorial_r2d2

Language: unknown

mkdir

p urdf

Language: unknown

mkdir

p urdf

Language: unknown

md urdf


key: chroma:document
string_value:
Language: unknown frommathimportsin,cos,piimportrclpyfromrclpy.nodeimportNodefromrclpy.qosimportQoSProfilefromgeometry_msgs.msgimportQuaternionfromsensor_msgs.msgimportJointStatefromtf2_rosimportTransformBroadcaster,TransformStampedclassStatePublisher(Node):def__init__(self):rclpy.init()super().__init__('state_publisher')qos_profile=QoSProfile(depth=10)self.joint_pub=self.create_publisher(JointState,'joint_states',qos_profile)self.broadcaster=TransformBroadcaster(self,qos=qos_profile)self.nodeName=self.get_name()self.get_logger().info("{0}started".format(self.nodeName))degree=pi/180.0loop_rate=self.create_rate(30)# robot statetilt=0.tinc=degreeswivel=0.angle=0.height=0.hinc=0.005# message declarationsodom_trans=TransformStamped()odom_trans.header.frame_id='odom'odom_trans.child_frame_id='axis'joint_state=JointState()try:whilerclpy.ok():rclpy.spin_once(self)# update


key: chroma:document
string_value:
This will adjust as needed per iterationloop_rate.sleep()exceptKeyboardInterrupt:passdefeuler_to_quaternion(roll,pitch,yaw):qx=sin(roll/2)*cos(pitch/2)*cos(yaw/2)-cos(roll/2)*sin(pitch/2)*sin(yaw/2)qy=cos(roll/2)*sin(pitch/2)*cos(yaw/2)+sin(roll/2)*cos(pitch/2)*sin(yaw/2)qz=cos(roll/2)*cos(pitch/2)*sin(yaw/2)-sin(roll/2)*sin(pitch/2)*cos(yaw/2)qw=cos(roll/2)*cos(pitch/2)*cos(yaw/2)+sin(roll/2)*sin(pitch/2)*sin(yaw/2)returnQuaternion(x=qx,y=qy,z=qz,w=qw)defmain():node=StatePublisher()if__name__=='__main__':main()


key: chroma:document
string_value:
Language: unknown importosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.substitutionsimportLaunchConfigurationfromlaunch_ros.actionsimportNodedefgenerate_launch_description():use_sim_time=LaunchConfiguration('use_sim_time',default='false')urdf_file_name='r2d2.urdf.xml'urdf=os.path.join(get_package_share_directory('urdf_tutorial_r2d2'),urdf_file_name)withopen(urdf,'r')asinfp:robot_desc=infp.read()returnLaunchDescription([DeclareLaunchArgument('use_sim_time',default_value='false',description='Use simulation (Gazebo) clock if true'),Node(package='robot_state_publisher',executable='robot_state_publisher',name='robot_state_publisher',output='screen',parameters=[{'use_sim_time':use_sim_time,'robot_description':robot_desc}],arguments=[urdf]),Node(package='urdf_tutorial_r2d2',executable='state_publisher',name='state_publisher',output='screen'),])

Language: unknown


key: chroma:document
string_value:
Language: unknown

importosfromglobimportglobfromsetuptoolsimportsetupfromsetuptoolsimportfind_packages

Language: unknown

data_files=[...(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','

launch.[pxy][yma]

'))),(os.path.join('share',package_name),glob('urdf/

')),],

Language: unknown

'console_scripts':['state_publisher = urdf_tutorial_r2d2.state_publisher:main'],

Language: unknown

cd second_ros2_wscolcon build -

symlink

install -

packages

select urdf_tutorial_r2d2

Language: unknown

source install/setup.bash

Language: unknown

source install/setup.bash

Language: unknown

call install/setup.bat

Language: unknown

ros2 launch urdf_tutorial_r2d2 demo_launch.py

Language: unknown

rviz2

d second_ros2_ws/install/urdf_tutorial_r2d2/share/urdf_tutorial_r2d2/r2d2.rviz


key: chroma:document
string_value:
Title: Understanding real

time programming

URL: https://docs.ros.org/en/jazzy/Tutorials/Demos/Real

Time

Programming.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Understanding real-time programmingTable of ContentsBackgroundInstall and run the demoRun the testsWhat the heck just happened?Adjust permissions for memory lockingOutput overviewLatencySetting permissions for the schedulerPlotting resultsBackgroundReal-time computing is a key feature of many robotics systems, particularly safety- and mission-critical applications such as autonomous vehicles, spacecrafts, and industrial manufacturing. We are designing and prototyping ROS 2 with real-time performance constraints in mind, since this is a requirement that was not considered in the early stages of ROS 1 and it is now intractable to refactor ROS 1 to be real-time friendly.This documentoutlines the requirements of real-time computing and best practices for software engineers.  In short:To make a real-time computer system, our real-time loop must update periodically to meet deadlines. We can only tolerate a small margin of error on these deadlines (our maximum allowable jitter). To do this, we must avoid


key: chroma:document
string_value:
(our maximum allowable jitter). To do this, we must avoid nondeterministic operations in the execution path, things like: pagefault events, dynamic memory allocation/deallocation, and synchronization primitives that block indefinitely.A classic example of a controls problem commonly solved by real-time computing is balancing aninverted pendulum. If the controller blocked for an unexpectedly long amount of time, the pendulum would fall down or go unstable. But if the controller reliably updates at a rate faster than the motor controlling the pendulum can operate, the pendulum will successfully adapt react to sensor data to balance the pendulum.Now that you know everything about real-time computing, let’s try a demo!Install and run the demoThe real-time demo was written with Linux operating systems in mind, since many members of the ROS community doing real-time computing use Xenomai or RT_PREEMPT as their real-time solutions. Since many of the operations done in the demo to optimize performance are


key: chroma:document
string_value:
of the operations done in the demo to optimize performance are OS-specific, the demo only builds and runs on Linux systems.So, if you are an OSX or Windows user, don’t try this part!Also this must be built from source using a static DDS API.Currently the only supported implementation is Connext.First, follow the instructions to build ROS 2from sourceusing Connext DDS as the middleware.Run the testsBefore you run make sure you have at least 8Gb of RAM free. With the memory locking, swap will not work anymore.Source your ROS 2 setup.bash.Run the demo binary, and redirect the output. You may want to usesudoin case you get permission error:pendulum_demo>output.txtWhat the heck just happened?First, even though you redirected stdout, you will see some output to the console (from stderr):mlockallfailed:CannotallocatememoryCouldn't lock all cached virtual memory.PagefaultsfromreadingpagesnotyetmappedintoRAMwillberecorded.After the initialization stage of the demo program, it will attempt to lock all cached memory


key: chroma:document
string_value:
of the demo program, it will attempt to lock all cached memory into RAM and prevent future dynamic memory allocations usingmlockall. This is to prevent pagefaults from loading lots of new memory into RAM. (Seethe realtime design articlefor more information.)The demo will continue on as usual when this occurs. At the bottom of the output.txt file generated by the demo, you’ll see the number of pagefaults encountered during execution:rtteststatistics:-Minorpagefaults:20-Majorpagefaults:0If we want those pagefaults to go away, we’ll have to…Adjust permissions for memory lockingAdd to/etc/security/limits.conf(as sudo):<yourusername>-memlock<limitinkB>A limit of-1is unlimited. If you choose this, you may need to accompany it withulimit-lunlimited(as root) after editing the file.After saving the file, log out and log back in. Then rerun thependulum_demoinvocation.You’ll either see zero pagefaults in your output file, or an error saying that a bad_alloc exception was caught. If this happened, you didn’t have


key: chroma:document
string_value:
exception was caught. If this happened, you didn’t have enough free memory available to lock the memory allocated for the process into RAM. You’ll need to install more RAM in your computer to see zero pagefaults!Output overviewTo see more output, we have to run thependulum_loggernode.In one shell with yourinstall/setup.bashsourced, invoke:pendulum_loggerYou should see the output message:Loggernodeinitialized.In another shell with setup.bash sourced, invokependulum_demoagain.As soon as this executable starts, you should see the other shell constantly printing output:Commandedmotorangle:1.570796Actualmotorangle:1.570796Meanlatency:210144.000000nsMinlatency:4805nsMaxlatency:578137nsMinorpagefaultsduringexecution:0Majorpagefaultsduringexecution:0The demo is controlling a very simple inverted pendulum simulation. The pendulum simulation calculates its position in its own thread. A ROS node simulates a motor encoder sensor for the pendulum and publishes its position. Another ROS node acts as a simple PID


key: chroma:document
string_value:
publishes its position. Another ROS node acts as a simple PID controller and calculates the next command message.The logger node periodically prints out the pendulum’s state and the runtime performance statistics of the demo during its execution phase.After thependulum_demois finished, you’ll have to CTRL-C out of the logger node to exit.LatencyAt thependulum_demoexecution, you’ll see the final statistics collected for the demo:rtteststatistics:-Minorpagefaults:0-Majorpagefaults:0Latency(timeafterdeadlinewasmissed):-Min:3354ns-Max:2752187ns-Mean:19871.8ns-Standarddeviation:1.35819e+08PendulumMotorreceived985messagesPendulumControllerreceived987messagesThe latency fields show you the minimum, maximum, and average latency of the update loop in nanoseconds. Here, latency means the amount of time after the update was expected to occur.The requirements of a real-time system depend on the application, but let’s say in this demo we have a 1kHz (1 millisecond) update loop, and we’re aiming for a maximum allowable


key: chroma:document
string_value:
update loop, and we’re aiming for a maximum allowable latency of 5% of our update period.So, our average latency was really good in this run, but the maximum latency was unacceptable because it actually exceeded our update loop! What happened?We may be suffering from a non-deterministic scheduler. If you’re running a vanilla Linux system and you don’t have the RT_PREEMPT kernel installed, you probably won’t be able to meet the real-time goal we set for ourselves, because the Linux scheduler won’t allow you to arbitrarily pre-empt threads at the user level.See therealtime design articlefor more information.The demo attempts to set the scheduler and thread priority of the demo to be suitable for real-time performance. If this operation failed, you’ll see an error message: “Couldn’t set scheduling priority and policy: Operation not permitted”. You can get slightly better performance by following the instructions in the next section:Setting permissions for the schedulerAdd to/etc/security/limits.conf(as


key: chroma:document
string_value:
for the schedulerAdd to/etc/security/limits.conf(as sudo):<yourusername>-rtprio98The range of the rtprio (real-time priority) field is 0-99. However, do NOT set the limit to 99 because then your processes could interfere with important system processes that run at the top priority (e.g. watchdog). This demo will attempt to run the control loop at priority 98.Plotting resultsYou can plot the latency and pagefault statistics that are collected in this demo after the demo runs.Because the code has been instrumented withrttest, there are useful command line arguments available:CommandDescriptionDefault value-iSpecify how many iterations to run the real-time loop1000-uSpecify the update period with the default unit being microseconds.Use the suffix “s” for seconds, “ms” for milliseconds,“us” for microseconds, and “ns” for nanoseconds.1ms-fSpecify the name of the file for writing the collected data.Run the demo again with a filename to save results:pendulum_demo-fpendulum_demo_resultsThen run


key: chroma:document
string_value:
to save results:pendulum_demo-fpendulum_demo_resultsThen run therttest_plotscript on the resulting file:ros2runrttestrttest_plotpendulum_demo_resultsThis script will produce a number of files:pendulum_demo_results_plot_latency.svgpendulum_demo_results_plot_latency_hist.svgpendulum_demo_results_plot_majflts.svgpendulum_demo_results_plot_minflts.svgYou can view these plots in an image viewer of your choice.


key: chroma:document
string_value:
Code Examples:

Language: unknown

pendulum_demo>output.txt

Language: unknown mlockallfailed:CannotallocatememoryCouldn't lock all cached virtual memory.PagefaultsfromreadingpagesnotyetmappedintoRAMwillberecorded.

Language: unknown

rtteststatistics:

Minorpagefaults:20

Majorpagefaults:0

Language: unknown

<yourusername>

memlock<limitinkB>

Language: unknown

pendulum_logger

Language: unknown

Loggernodeinitialized.

Language: unknown

Commandedmotorangle:1.570796Actualmotorangle:1.570796Meanlatency:210144.000000nsMinlatency:4805nsMaxlatency:578137nsMinorpagefaultsduringexecution:0Majorpagefaultsduringexecution:0

Language: unknown

rtteststatistics:

Minorpagefaults:0

Majorpagefaults:0Latency(timeafterdeadlinewasmissed):

Min:3354ns

Max:2752187ns

Mean:19871.8ns

Standarddeviation:1.35819e+08PendulumMotorreceived985messagesPendulumControllerreceived987messages

Language: unknown

<yourusername>

rtprio98

Language: unknown

pendulum_demo

fpendulum_demo_results

Language: unknown


key: chroma:document
string_value:
pendulum_demo

fpendulum_demo_results

Language: unknown

ros2runrttestrttest_plotpendulum_demo_results

Language: unknown

pendulum_demo_results_plot_latency.svgpendulum_demo_results_plot_latency_hist.svgpendulum_demo_results_plot_majflts.svgpendulum_demo_results_plot_minflts.svg


key: chroma:document
string_value:
Title: Package Docs

URL: https://docs.ros.org/en/jazzy/Package

Docs.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Package DocsROS package documentation, that is to say documentation for specific packages you install via apt or some other tool, can be found in multiple places. Here is a brief list of where to look for specific ROS package documentation.Most ROS 2 packages have their package level documentationincluded in this index page.All ROS 2 package’s documentation is hosted alongside its information on theROS Index. Searching for packages on ROS Index will yield their information such as released distributions,README.mdfiles, URLs, and other important metadata.Larger PackagesLarger packages like MoveIt, Nav2, and microROS, are given their own domain or subdomain on ros.org. Here is a short list.MoveItNavigation2ControlmicroROS (embedded systems)API DocumentationYou can find the API level documentation for the ROS client libraries in the Jazzy distribution using the links below:rclcpp - C++ client libraryrclcpp_lifecycle - C++ lifecycle libraryrclcpp_components - C++ components libraryrclcpp_action - C++ actions


key: chroma:document
string_value:
- C++ components libraryrclcpp_action - C++ actions libraryAdding Your Package to docs.ros.orgAll released ROS 2 packages are automatically added to docs.ros.org andROS Index. If you would like to enable or configure your own package please see:Documenting a ROS 2 package.


key: chroma:document
string_value:
Title: Testing with pre

release binaries

URL: https://docs.ros.org/en/jazzy/Installation/Testing.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Testing with pre-release binariesMany ROS packages are provided as pre-built binaries. Usually, you will get the released version of binaries when followingInstallation. There are also pre-released versions of binaries that are useful for testing before making an official release. This article describes several options if you would like to try out pre-released versions of ROS binaries.deb testing repositoryWhen packages are released into a ROS distribution (using bloom), the buildfarm builds them into deb packages which are stored temporarily in thebuildingapt repository. As dependent packages are rebuilt, an automatic process periodically synchronizes the packages inbuildingto a secondary repository calledros-testing.ros-testingis intended as a soaking area where developers and bleeding-edge users may give the packages extra testing, before they are manually synced into the public ros repository from which users typically install packages.Approximately every two weeks, the rosdistro’s release manager


key: chroma:document
string_value:
every two weeks, the rosdistro’s release manager manually synchronizes the contents ofros-testinginto themainROS repository.For Debian-based operating systems, you can install binary packages from theros-testingrepository.Make sure you have a working ROS 2 installation from deb packages (seeInstallation).Edit (with sudo) the file/etc/apt/sources.list.d/ros2.listand changeros2withros2-testing. For example, on Ubuntu Noble the contents should look like the following:# deb http://packages.ros.org/ros2/ubuntu noble maindebhttp://packages.ros.org/ros2-testing/ubuntunoblemainUpdate theaptindex:sudoaptupdateYou can now install individual packages from the testing repository, for example:sudoaptinstallros-jazzy-my-just-released-packageAlternatively, you can move your entire ROS 2 installation to the testing repository:sudoaptdist-upgradeOnce you are finished testing, you can switch back to the normal repository by changing back the contents


key: chroma:document
string_value:
back to the normal repository by changing back the contents of/etc/apt/sources.list.d/ros2.list:debhttp://packages.ros.org/ros2/ubuntunoblemain# deb http://packages.ros.org/ros2-testing/ubuntu noble mainand doing an update and upgrade:sudoaptupdate sudoaptdist-upgradeBinary archivesFor core packages, we run nightly packaging jobs for Ubuntu Linux, RHEL, and Windows. These packaging jobs produce archives with pre-built binaries that can be downloaded and extracted to your filesystem.Make sure you have all dependencies installed according to thelatest development setupfor your platform.Go tohttps://ci.ros2.org/view/packaging/and select a packaging job from the list corresponding to your platform.Under the heading “Last Successful Artifacts” you should see a download link (e.g. for Windows,ros2-package-windows-AMD64.zip).Download and extract the archive to your file system.To use the binary archive installation, source thesetup.*file that can be found in the root of the archive.Ubuntu Linux and


key: chroma:document
string_value:
that can be found in the root of the archive.Ubuntu Linux and RHELWindowssourcepath/to/extracted/archive/setup.bashcallpath\to\extracted\archive\setup.batDockerFor Ubuntu Linux, there is also a nightly Docker image based on the nightly binary archive.Pull the Docker image:dockerpullosrf/ros2:nightlyStart an interactive container:dockerrun-itosrf/ros2:nightlyFor support on running GUI applications in Docker, take a look at the tutorialUser GUI’s with Dockeror the toolrocker.


key: chroma:document
string_value:
Code Examples:

Language: unknown # deb http://packages.ros.org/ros2/ubuntu noble maindebhttp://packages.ros.org/ros2-testing/ubuntunoblemain

Language: unknown

sudoaptupdate

Language: unknown

sudoaptinstallros

jazzy

my

just

released

package

Language: unknown

sudoaptdist

upgrade

Language: unknown

debhttp://packages.ros.org/ros2/ubuntunoblemain# deb http://packages.ros.org/ros2

testing/ubuntu noble main

Language: unknown

sudoaptupdate

sudoaptdist

upgrade

Language: unknown

sourcepath/to/extracted/archive/setup.bash

Language: unknown

callpath\to\extracted\archive\setup.bat

Language: unknown

dockerpullosrf/ros2:nightly

Language: unknown

dockerrun

itosrf/ros2:nightly


key: chroma:document
string_value:
Title: Gazebo

URL: https://docs.ros.org/en/jazzy/Tutorials/Advanced/Simulators/Gazebo/Simulation

Gazebo.html

Section: Installation

--------------------------------------------------------------------------------

GazeboThis set of tutorials will teach you how to configure the Gazebo simulator with ROS 2.Setting up a robot simulation (Gazebo)


key: chroma:document
string_value:
Title: Using parameters in a class (Python) URL: https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Using parameters in a class (Python)Goal:Create and run a class with ROS parameters using Python.Tutorial level:BeginnerTime:20 minutesContentsBackgroundPrerequisitesTasks1 Create a package2 Write the Python node3 Build and runSummaryNext stepsBackgroundWhen making your ownnodesyou will sometimes need to add parameters that can be set from the launch file.This tutorial will show you how to create those parameters in a Python class, and how to set them in a launch file.PrerequisitesIn previous tutorials, you learned how tocreate a workspaceandcreate a package. You have also learned aboutparametersand their function in a ROS 2 system.Tasks1 Create a packageOpen a new terminal andsource your ROS 2 installationso thatros2commands will work.Followthese instructionsto create a new workspace namedros2_ws.Recall that packages should be created in thesrcdirectory, not the root of the workspace. Navigate intoros2_ws/srcand create a new package:ros2 pkg create --build-type ament_python --license Apache-2.0


key: chroma:document
string_value:
pkg create --build-type ament_python --license Apache-2.0 python_parameters --dependencies rclpyYour terminal will return a message verifying the creation of your packagepython_parametersand all its necessary files and folders.The--dependenciesargument will automatically add the necessary dependency lines topackage.xmlandCMakeLists.txt.1.1 Updatepackage.xmlBecause you used the--dependenciesoption during package creation, you don’t have to manually add dependencies topackage.xmlorCMakeLists.txt.As always, though, make sure to add the description, maintainer email and name, and license information topackage.xml.<description>Pythonparametertutorial</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache-2.0</license>2 Write the Python nodeInside theros2_ws/src/python_parameters/python_parametersdirectory, create a new file calledpython_parameters_node.pyand paste the following code


key: chroma:document
string_value:
calledpython_parameters_node.pyand paste the following code within:importrclpyimportrclpy.nodeclassMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')self.declare_parameter('my_parameter','world')self.timer=self.create_timer(1,self.timer_callback)deftimer_callback(self):my_param=self.get_parameter('my_parameter').get_parameter_value().string_valueself.get_logger().info('Hello%s!'%my_param)my_new_param=rclpy.parameter.Parameter('my_parameter',rclpy.Parameter.Type.STRING,'world')all_new_parameters=[my_new_param]self.set_parameters(all_new_parameters)defmain():rclpy.init()node=MinimalParam()rclpy.spin(node)if__name__=='__main__':main()2.1 Examine the codeTheimportstatements at the top are used to import the package dependencies.The next piece of code creates the class and the constructor. The lineself.declare_parameter('my_parameter','world')of the constructor creates a parameter with the namemy_parameterand a default value ofworld. The parameter type is inferred from the


key: chroma:document
string_value:
default value ofworld. The parameter type is inferred from the default value, so in this case it would be set to a string type. Next thetimeris initialized with a period of 1, which causes thetimer_callbackfunction to be executed once a second.classMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')self.declare_parameter('my_parameter','world')self.timer=self.create_timer(1,self.timer_callback)The first line of ourtimer_callbackfunction gets the parametermy_parameterfrom the node, and stores it inmy_param. Next theget_loggerfunction ensures the event is logged. Theset_parametersfunction then sets the parametermy_parameterback to the default string valueworld. In the case that the user changed the parameter externally, this ensures it is always reset back to the


key: chroma:document
string_value:
externally, this ensures it is always reset back to the original.deftimer_callback(self):my_param=self.get_parameter('my_parameter').get_parameter_value().string_valueself.get_logger().info('Hello%s!'%my_param)my_new_param=rclpy.parameter.Parameter('my_parameter',rclpy.Parameter.Type.STRING,'world')all_new_parameters=[my_new_param]self.set_parameters(all_new_parameters)Following thetimer_callbackis ourmain. Here ROS 2 is initialized, an instance of theMinimalParamclass is constructed, andrclpy.spinstarts processing data from the node.defmain():rclpy.init()node=MinimalParam()rclpy.spin(node)if__name__=='__main__':main()2.1.1 (Optional) Add ParameterDescriptorOptionally, you can set a descriptor for the parameter. Descriptors allow you to specify a text description of the parameter and its constraints, like making it read-only, specifying a range, etc. For that to work, the__init__code has to be changed to:#


key: chroma:document
string_value:
etc. For that to work, the__init__code has to be changed to:# ...classMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')fromrcl_interfaces.msgimportParameterDescriptormy_parameter_descriptor=ParameterDescriptor(description='This parameter is mine!')self.declare_parameter('my_parameter','world',my_parameter_descriptor)self.timer=self.create_timer(1,self.timer_callback)The rest of the code remains the same. Once you run the node, you can then runros2paramdescribe/minimal_param_nodemy_parameterto see the type and description.2.2 Add an entry pointOpen thesetup.pyfile. Again, match themaintainer,maintainer_email,descriptionandlicensefields to yourpackage.xml:maintainer='YourName',maintainer_email='you@email.com',description='Python parameter tutorial',license='Apache-2.0',Add the following line within theconsole_scriptsbrackets of theentry_pointsfield:entry_points={'console_scripts':['minimal_param_node = python_parameters.python_parameters_node:main',],},Don’t forget to


key: chroma:document
string_value:
forget to save.3 Build and runIt’s good practice to runrosdepin the root of your workspace (ros2_ws) to check for missing dependencies before building:LinuxmacOSWindowsrosdep install -i --from-path src --rosdistro jazzy -yrosdep only runs on Linux, so you can skip ahead to next step.rosdep only runs on Linux, so you can skip ahead to next step.Navigate back to the root of your workspace,ros2_ws, and build your new package:LinuxmacOSWindowscolcon build --packages-select python_parameterscolcon build --packages-select python_parameterscolcon build --merge-install --packages-select python_parametersOpen a new terminal, navigate toros2_ws, and source the setup files:LinuxmacOSWindowssource install/setup.bash. install/setup.bashcall install/setup.batNow run the node:ros2 run python_parameters minimal_param_nodeThe terminal should return the following message every second:[INFO] [parameter_node]: Hello world!Now you can see the default value of your parameter, but you want to be able to set it yourself. There are


key: chroma:document
string_value:
but you want to be able to set it yourself. There are two ways to accomplish this.3.1 Change via the consoleThis part will use the knowledge you have gained from thetutoral about parametersand apply it to the node you have just created.Make sure the node is running:ros2 run python_parameters minimal_param_nodeOpen another terminal, source the setup files from insideros2_wsagain, and enter the following line:ros2 param listThere you will see the custom parametermy_parameter. To change it, simply run the following line in the console:ros2 param set /minimal_param_node my_parameter earthYou know it went well if you get the outputSetparametersuccessful. If you look at the other terminal, you should see the output change to[INFO][minimal_param_node]:Helloearth!Since the node afterwards set the parameter back toworld, further outputs show[INFO][minimal_param_node]:Helloworld!3.2 Change via a launch fileYou can also set parameters in a launch file, but first you will need to add a launch directory. Inside


key: chroma:document
string_value:
file, but first you will need to add a launch directory. Inside theros2_ws/src/python_parameters/directory, create a new directory calledlaunch. In there, create a new file calledpython_parameters_launch.pyfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([Node(package='python_parameters',executable='minimal_param_node',name='custom_minimal_param_node',output='screen',emulate_tty=True,parameters=[{'my_parameter':'earth'}])])Here you can see that we setmy_parametertoearthwhen we launch our nodeparameter_node. By adding the two lines below, we ensure our output is printed in our console.output="screen",emulate_tty=True,Now open thesetup.pyfile. Add theimportstatements to the top of the file, and the other new statement to thedata_filesparameter to include all launch files:importosfromglobimportglob# ...setup(# ...data_files=[# ...(os.path.join('share',package_name),glob('launch/*launch.[pxy][yma]*')),])Open a console and navigate to the


key: chroma:document
string_value:
a console and navigate to the root of your workspace,ros2_ws, and build your new package:LinuxmacOSWindowscolcon build --packages-select python_parameterscolcon build --packages-select python_parameterscolcon build --merge-install --packages-select python_parametersThen source the setup files in a new terminal:LinuxmacOSWindowssource install/setup.bash. install/setup.bashcall install/setup.batNow run the node using the launch file we have just created:ros2 launch python_parameters python_parameters_launch.pyThe terminal should return the following message the first time:[INFO] [custom_minimal_param_node]: Hello earth!Further outputs should show[INFO][minimal_param_node]:Helloworld!every second.SummaryYou created a node with a custom parameter that can be set either from a launch file or the command line. You added the dependencies, executables, and a launch file to the package configuration files so that you could build and run them, and see the parameter in action.Next stepsNow that you have some packages


key: chroma:document
string_value:
parameter in action.Next stepsNow that you have some packages and ROS 2 systems of your own, thenext tutorialwill show you how to examine issues in your environment and systems in case you have problems.


key: chroma:document
string_value:
Code Examples:

Language: unknown

ros2 pkg create -

build

type ament_python -

license Apache

2.0 python_parameters -

dependencies rclpy

Language: unknown

<description>Pythonparametertutorial</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache

2.0</license>

Language: unknown

importrclpyimportrclpy.nodeclassMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')self.declare_parameter('my_parameter','world')self.timer=self.create_timer(1,self.timer_callback)deftimer_callback(self):my_param=self.get_parameter('my_parameter').get_parameter_value().string_valueself.get_logger().info('Hello%s!'%my_param)my_new_param=rclpy.parameter.Parameter('my_parameter',rclpy.Parameter.Type.STRING,'world')all_new_parameters=[my_new_param]self.set_parameters(all_new_parameters)defmain():rclpy.init()node=MinimalParam()rclpy.spin(node)if__name__=='__main__':main()

Language: unknown


key: chroma:document
string_value:
Language: unknown

classMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')self.declare_parameter('my_parameter','world')self.timer=self.create_timer(1,self.timer_callback)

Language: unknown

deftimer_callback(self):my_param=self.get_parameter('my_parameter').get_parameter_value().string_valueself.get_logger().info('Hello%s!'%my_param)my_new_param=rclpy.parameter.Parameter('my_parameter',rclpy.Parameter.Type.STRING,'world')all_new_parameters=[my_new_param]self.set_parameters(all_new_parameters)

Language: unknown

defmain():rclpy.init()node=MinimalParam()rclpy.spin(node)if__name__=='__main__':main()

Language: unknown # ...classMinimalParam(rclpy.node.Node):def__init__(self):super().__init__('minimal_param_node')fromrcl_interfaces.msgimportParameterDescriptormy_parameter_descriptor=ParameterDescriptor(description='This parameter is mine!')self.declare_parameter('my_parameter','world',my_parameter_descriptor)self.timer=self.create_timer(1,self.timer_callback)


key: chroma:document
string_value:
Language: unknown

maintainer='YourName',maintainer_email='you@email.com',description='Python parameter tutorial',license='Apache

2.0',

Language: unknown

entry_points={'console_scripts':['minimal_param_node = python_parameters.python_parameters_node:main',],},

Language: unknown

rosdep install

i -

from

path src -

rosdistro jazzy

y

Language: unknown

colcon build -

packages

select python_parameters

Language: unknown

colcon build -

packages

select python_parameters

Language: unknown

colcon build -

merge

install -

packages

select python_parameters

Language: unknown

source install/setup.bash

Language: unknown

. install/setup.bash

Language: unknown

call install/setup.bat

Language: unknown

ros2 run python_parameters minimal_param_node

Language: unknown

[INFO] [parameter_node]: Hello world!

Language: unknown

ros2 run python_parameters minimal_param_node

Language: unknown

ros2 param list

Language: unknown ros2 param set /minimal_param_node my_parameter earth

Language: unknown


key: chroma:document
string_value:
Language: unknown

fromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([Node(package='python_parameters',executable='minimal_param_node',name='custom_minimal_param_node',output='screen',emulate_tty=True,parameters=[{'my_parameter':'earth'}])])

Language: unknown

output="screen",emulate_tty=True,

Language: unknown

importosfromglobimportglob# ...setup(# ...data_files=[# ...(os.path.join('share',package_name),glob('launch/

launch.[pxy][yma]

')),])

Language: unknown

colcon build -

packages

select python_parameters

Language: unknown

colcon build -

packages

select python_parameters

Language: unknown

colcon build -

merge

install -

packages

select python_parameters

Language: unknown

source install/setup.bash

Language: unknown

. install/setup.bash

Language: unknown

call install/setup.bat

Language: unknown

ros2 launch python_parameters python_parameters_launch.py

Language: unknown


key: chroma:document
string_value:
Title: Traveling in time (C++) URL: https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Traveling in time (C++)Goal:Learn about advanced time travel features of tf2.Tutorial level:IntermediateTime:10 minutesContentsBackgroundTime travelAdvanced API for lookupTransform()Checking the resultsSummaryBackgroundIn the previous tutorial, we discussed thebasics of tf2 and time. This tutorial will take us one step further and expose a powerful tf2 trick: the time travel. In short, one of the key features of tf2 library is that it is able to transform data in time as well as in space.This tf2 time travel feature can be useful for various tasks, like monitoring the pose of the robot for a long period of time or building a follower robot that will follow the “steps” of the leader. We will use that time travel feature to look up transforms back in time and programturtle2to follow 5 seconds behindcarrot1.Time travelFirst, let’s go back to where we ended in the previous tutorialUsing time. Go to yourlearning_tf2_cpppackage.Now, instead of making the second turtle go to where the carrot is now, we will make


key: chroma:document
string_value:
the second turtle go to where the carrot is now, we will make the second turtle go to where the first carrot was 5 seconds ago. Edit thelookupTransform()call inturtle_tf2_listener.cppfile torclcpp::Timewhen=this->get_clock()->now()-rclcpp::Duration(5,0);try{t=tf_buffer_->lookupTransform(toFrameRel,fromFrameRel,when,50ms);}catch(consttf2::TransformException&ex){Now if you run this, during the first 5 seconds, the second turtle would not know where to go because we do not yet have a 5-second history of poses of the carrot. But what happens after these 5 seconds? Build the package then let’s just give it a try:ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.pyYou should now notice that your turtle is driving around uncontrollably like in this screenshot. Let’s try to understand reason behind that behavior.In our code we asked tf2 the following question: “What was the pose ofcarrot15 seconds ago, relative toturtle25 seconds ago?”. This means we are controlling the second turtle based on where it


key: chroma:document
string_value:
means we are controlling the second turtle based on where it was 5 seconds ago as well as where the first carrot was 5 seconds ago.However, what we really want to ask is: “What was the pose ofcarrot15 seconds ago, relative to the current position of theturtle2?”.Advanced API for lookupTransform()To ask the tf2 that particular question, we will use an advanced API that gives us the power to say explicitly when to acquire the specified transformations. This is done by calling thelookupTransform()method with additional parameters. Your code now would look like this:rclcpp::Timenow=this->get_clock()->now();rclcpp::Timewhen=now-rclcpp::Duration(5,0);try{t=tf_buffer_->lookupTransform(toFrameRel,now,fromFrameRel,when,"world",50ms);}catch(consttf2::TransformException&ex){The advanced API forlookupTransform()takes six arguments:Target frameThe time to transform toSource frameThe time at which source frame will be evaluatedFrame that does not change over time, in this case theworldframeTime to wait for the target


key: chroma:document
string_value:
time, in this case theworldframeTime to wait for the target frame to become availableTo sum up, tf2 does the following in the background. In the past, it computes the transform from thecarrot1to theworld. In theworldframe, tf2 time travels from the past to now. And at the current time, tf2 computes the transform from theworldto theturtle2.Checking the resultsBuild the package then let’s run the simulation again, this time with the advanced time-travel API:ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.pyAnd yes, the second turtle is directed to where the first carrot was 5 seconds ago!SummaryIn this tutorial, you have seen one of the advanced features of tf2. You learned that tf2 can transform data in time and learned how to do that with turtlesim example. tf2 allowed you to go back in time and make frame transformations between old and current poses of turtles by using the advancedlookupTransform()API.


key: chroma:document
string_value:
Code Examples:

Language: unknown

rclcpp::Timewhen=this

>get_clock()

>now()

rclcpp::Duration(5,0);try{t=tf_buffer_

>lookupTransform(toFrameRel,fromFrameRel,when,50ms);}catch(consttf2::TransformException&ex){

Language: unknown

ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.py

Language: unknown

rclcpp::Timenow=this

>get_clock()

>now();rclcpp::Timewhen=now

rclcpp::Duration(5,0);try{t=tf_buffer_

>lookupTransform(toFrameRel,now,fromFrameRel,when,"world",50ms);}catch(consttf2::TransformException&ex){

Language: unknown

ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.py


key: chroma:document
string_value:
Title: Release Track

URL: https://docs.ros.org/en/jazzy/How

To

Guides/Releasing/Release

Track.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Release TrackTable of ContentsWhat is a Track?Track ConfigurationsRelease Repository urlRepository NameUpstream Repository URIUpstream VCS TypeVersionRelease TagUpstream Devel BranchROS DistroPatches DirectoryRelease Repository Push URLWhat is a Track?Bloom requires the user to enter configuration information when releasing packages for the first time. It is beneficial to store such configurations in the release repository so we don’t have to manually enter configurations that won’t change for subsequent releases.Since some of the configurations will differ when releasing the package for different ROS distributions, bloom usesrelease tracks to store the configurations for releasingper distribution. By convention you should create tracks with the same name as the ROS distro you are releasing for.All release track configurations are stored intracks.yamlon the master branch of your release repository.Track ConfigurationsTrack configurations are explained in more detail along with the prompts from


key: chroma:document
string_value:
are explained in more detail along with the prompts from bloom.Release Repository urlThis is the url of your release repository, and should be of formhttps://github.com/ros2-gbp/my_repo-release.gitif your release repository is hosted on ros2-gbp.Noreasonabledefaultreleaserepositoryurlcouldbedeterminedfrompreviousreleases. Releaserepositoryurl[pressentertoabort]:Paste your release repository URL and press Enter.Bloom may additionally ask you about initializing the new repository, as following:Freshlyinitializedgitrepositorydetected. Aninitialemptycommitisgoingtobemade. Continue[Y/n]?Simply press Enter to accept the default of yes.Repository NameThe repository name is trivial, but it is recommended to set this to the name of your project.RepositoryName:upstreamDefaultvalue,leavethisasupstreamifyouareunsure<name>Nameoftherepository(usedinthearchivename)['upstream']:Type the name of your project (eg.my_project) and press Enter.Upstream Repository URITheupstream repositoryis the repository where your source


key: chroma:document
string_value:
URITheupstream repositoryis the repository where your source code is. This is most likely an https link to your project hosted on a git hosting service such as GitHub or GitLab.UpstreamRepositoryURI:<uri>AnyvalidURI.Thisvariablecanbetemplated,forexampleansvnurlcanbetemplatedassuch:"https://svn.foo.com/foo/tags/foo-:{version}"wherethe:{version}tokenwillbereplacedwiththeversionforthisrelease.[None]:Make sure youuse the https address(eg.https://github.com/my_organization/my_repo.git) and not the ssh address.Upstream VCS TypeThis is theUpstream Repository URI’s version control system (VCS) type. You must specify the type of vcs your repository is using, fromsvn,git,hgortar.UpstreamVCSType:svnUpstreamURIisasvnrepositorygitUpstreamURIisagitrepositoryhgUpstreamURIisahgrepositorytarUpstreamURIisatarball['git']:Most repositories will be using git, but some legacy repositories might be using hg or svn.VersionThis is the version of the package you are releasing.


key: chroma:document
string_value:
is the version of the package you are releasing. (eg.1.0.3)Version::{ask}Thismeansthattheuserwillbepromptedfortheversioneachrelease.Thisalsomeansthattheupstreamdevelwillbeignored.:{auto}Thismeanstheversionwillbeguessedfromthedevelbranch.Thismeansthatthedevelbranchmustbeset,thedevelbranchmustexist,andtheremustbeavalidpackage.xmlintheupstreamdevelbranch.<version>Thiswillbetheversionused.Itmustbeupdatedforeachnewupstreamversion.[':{auto}']:Setting this to:{auto}(the default, and recommended setup) will automatically determine the version from the devel branch’s package.xml.Setting this to:{ask}will bring up a prompt asking for the version every time you run a release with bloom.Release TagThe Release Tag refers to which tag or branch you want to import the code


key: chroma:document
string_value:
Tag refers to which tag or branch you want to import the code from.ReleaseTag::{version}Thismeansthatthereleasetagwillmatchthe:{version}tag.Thiscanbefurthertemplated,forexample:"foo-:{version}"or"v:{version}"Thiscandescribeanyvcsreference.Forgitthatmeans{tag,branch,hash},forhgthatmeans{tag,branch,hash},forsvnthatmeansarevisionnumber.Fortarthisvaluedoublesasthesubdirectory(iftherepositoryisinfoo/ofthetarball,puttingfooherewillcausethecontentsoffoo/tobeimportedtoupstreaminsteadoffooitself).:{ask}Thismeanstheuserwillbepromptedforthereleasetagoneachrelease.:{none}Forsvnandtaronlyyoucansetthereleasetagto:{none},sothatitisignored.Forsvnthismeansnorevisionnumberisused.[':{version}']:Setting this to:{version}(the default, and recommended setup) will make the release tag match the version tag.A less common setup is to set this to a branch name to always pull in that branch at the time of release from the upstream project.Alternatively, if you want to be prompted to enter a different tag every time you do a release,


key: chroma:document
string_value:
prompted to enter a different tag every time you do a release, enter:{ask}.:{ask}is useful if the upstream project has frequent tagged releases and you want to refer to the new tag every time you’re releasing.Upstream Devel BranchThe upstream devel branch is the name of the branch in yourupstream repository. If you use separate branches for each ROS distribution, this field would be different for each release track. It is used to determine the version of the package you are releasing whenVersionis set to:{auto}.UpstreamDevelBranch:<vcsreference>Branchinupstreamrepositoryonwhichtosearchfortheversion.Thisisusedonlywhenversionissetto':{auto}'.[None]:To release from a branch calledjazzy, enterjazzy. Leaving this asNonewould result in the version being determined from the default branch of your repository (this is not recommended).ROS DistroThis is the distribution you’re planning on releasing the package into.ROSDistro:<ROSdistro>ThiscanbeanyvalidROSdistro,e.g.indigo,kinetic,lunar,melodic['indigo']:If you plan


key: chroma:document
string_value:
you plan on releasing into ROS jazzy, enterjazzy.Patches DirectoryThis is the directory where any additional patches to the releases are.PatchesDirectory:<pathinbloombranch>Thiscanbeanyvalidrelativepathinthebloombranch.Thecontentsofthisfolderwillbeoverlaidontotheupstreambranchaftereachimport-upstream.Additionally,anypackage.xmlfilesfoundintheoverlaywillhavethe:{version}stringreplacedwiththecurrentversionbeingreleased.:{none}Usethisifyouwanttodisableoverlayingoffiles.[None]:Adding additional patches to a release is a rarely used feature. For almost all packages, this should be left as the defaultNone.Release Repository Push URLReleaseRepositoryPushURL::{none}Thisindicatesthatthedefaultreleaseurlshouldbeused.<url>(optional)Usedwhenpushingtoremotereleaserepositories.Thisisonlyneededwhenthereleaseuriwhichisintherosdistrofileisnotwritable.Thisisuseful,forexample,whenareleaserwouldliketouseasshurltopushratherthanahttps://url.[None]:Can be left as the default in most cases.


key: chroma:document
string_value:
Code Examples:

Language: unknown

Noreasonabledefaultreleaserepositoryurlcouldbedeterminedfrompreviousreleases.

Releaserepositoryurl[pressentertoabort]:

Language: unknown

Freshlyinitializedgitrepositorydetected.

Aninitialemptycommitisgoingtobemade.

Continue[Y/n]?

Language: unknown

RepositoryName:upstreamDefaultvalue,leavethisasupstreamifyouareunsure<name>Nameoftherepository(usedinthearchivename)['upstream']:

Language: unknown

UpstreamRepositoryURI:<uri>AnyvalidURI.Thisvariablecanbetemplated,forexampleansvnurlcanbetemplatedassuch:"https://svn.foo.com/foo/tags/foo

:{version}"wherethe:{version}tokenwillbereplacedwiththeversionforthisrelease.[None]:

Language: unknown

UpstreamVCSType:svnUpstreamURIisasvnrepositorygitUpstreamURIisagitrepositoryhgUpstreamURIisahgrepositorytarUpstreamURIisatarball['git']:

Language: unknown


key: chroma:document
string_value:
Language: unknown

Version::{ask}Thismeansthattheuserwillbepromptedfortheversioneachrelease.Thisalsomeansthattheupstreamdevelwillbeignored.:{auto}Thismeanstheversionwillbeguessedfromthedevelbranch.Thismeansthatthedevelbranchmustbeset,thedevelbranchmustexist,andtheremustbeavalidpackage.xmlintheupstreamdevelbranch.<version>Thiswillbetheversionused.Itmustbeupdatedforeachnewupstreamversion.[':{auto}']:

Language: unknown

ReleaseTag::{version}Thismeansthatthereleasetagwillmatchthe:{version}tag.Thiscanbefurthertemplated,forexample:"foo


key: chroma:document
string_value:
:{version}"or"v:{version}"Thiscandescribeanyvcsreference.Forgitthatmeans{tag,branch,hash},forhgthatmeans{tag,branch,hash},forsvnthatmeansarevisionnumber.Fortarthisvaluedoublesasthesubdirectory(iftherepositoryisinfoo/ofthetarball,puttingfooherewillcausethecontentsoffoo/tobeimportedtoupstreaminsteadoffooitself).:{ask}Thismeanstheuserwillbepromptedforthereleasetagoneachrelease.:{none}Forsvnandtaronlyyoucansetthereleasetagto:{none},sothatitisignored.Forsvnthismeansnorevisionnumberisused.[':{version}']:

Language: unknown

UpstreamDevelBranch:<vcsreference>Branchinupstreamrepositoryonwhichtosearchfortheversion.Thisisusedonlywhenversionissetto':{auto}'.[None]:

Language: unknown

ROSDistro:<ROSdistro>ThiscanbeanyvalidROSdistro,e.g.indigo,kinetic,lunar,melodic['indigo']:

Language: unknown

PatchesDirectory:<pathinbloombranch>Thiscanbeanyvalidrelativepathinthebloombranch.Thecontentsofthisfolderwillbeoverlaidontotheupstreambranchaftereachimport


key: chroma:document
string_value:
upstream.Additionally,anypackage.xmlfilesfoundintheoverlaywillhavethe:{version}stringreplacedwiththecurrentversionbeingreleased.:{none}Usethisifyouwanttodisableoverlayingoffiles.[None]:

Language: unknown

ReleaseRepositoryPushURL::{none}Thisindicatesthatthedefaultreleaseurlshouldbeused.<url>(optional)Usedwhenpushingtoremotereleaserepositories.Thisisonlyneededwhenthereleaseuriwhichisintherosdistrofileisnotwritable.Thisisuseful,forexample,whenareleaserwouldliketouseasshurltopushratherthanahttps://url.[None]:


key: chroma:document
string_value:
Title: Migrating Parameters

URL: https://docs.ros.org/en/jazzy/How

To

Guides/Migrating

from

ROS1/Migrating

Parameters.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Migrating ParametersTable of ContentsMigrating YAML Parameter FilesYAML file exampleFeature parityIn ROS 1, parameters are associated with a central server that allowed retrieving parameters at runtime through the use of the network APIs. In ROS 2, parameters are associated per node and are configurable at runtime with ROS services.SeeROS 2 Parameter design documentfor more details about the system model.SeeROS 2 CLI usagefor a better understanding of how the CLI tools work and its differences with ROS 1 tooling.Migrating YAML Parameter FilesThis guide describes how to adapt ROS 1 parameters files for ROS 2.YAML file exampleYAML is used to write parameters files in both ROS 1 and ROS 2. The main difference in ROS 2 is that node names must be used to address parameters. In addition to the fully qualified node name, we use the key “ros__parameters” to signal the start of parameters for the node.For example, here is a parameters file in ROS 1:lidar_name:foolidar_id:10ports:[11312,11311,21311]debug:trueLet’s


key: chroma:document
string_value:
assume that the first two parameters are for a node named/lidar_ns/lidar_node_name, the next parameter is for a node named/imu, and the last parameter we want to set on both nodes.We would construct our ROS 2 parameters file as follows:/lidar_ns:lidar_node_name:ros__parameters:lidar_name:fooid:10imu:ros__parameters:ports:[2438,2439,2440]/**:ros__parameters:debug:trueNote the use of wildcards (/**) to indicate that the parameterdebugshould be set on any node in any namespace.Feature paritySome features of ROS 1 parameters files do not exist in ROS 2:Mixed types in a list is not supported yet (related issue)degandradsubstitutions are not supported


key: chroma:document
string_value:
Code Examples:

Language: unknown

lidar_name:foolidar_id:10ports:[11312,11311,21311]debug:true

Language: unknown

/lidar_ns:lidar_node_name:ros__parameters:lidar_name:fooid:10imu:ros__parameters:ports:[2438,2439,2440]/*

:ros__parameters:debug:true


key: chroma:document
string_value:
Title: Demos

URL: https://docs.ros.org/en/jazzy/Tutorials/Demos.html

Section: Installation

--------------------------------------------------------------------------------

DemosUsing quality-of-service settings for lossy networksManaging nodes with managed lifecyclesSetting up efficient intra-process communicationRecording and playing back data withrosbagusing the ROS 1 bridgeUnderstanding real-time programmingExperimenting with a dummy robotLoggingCreating a content filtering subscriptionConfigure service introspectionExternal resourcesBridging communication between ROS 1 and ROS 2Motion planning for a MoveIt 2 armUsing Turtlebot 3 (community-contributed)Getting startedSimulatingNavigating in simulationLearning SLAM in simulation


key: chroma:document
string_value:
Title: ROS 2 Security

URL: https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Security.html

Section: Installation

--------------------------------------------------------------------------------

ROS 2 SecurityTable of ContentsOverviewThe Security EnclaveSecurity FilesEnclave IdentityEnclave PermissionsPrivate KeysSecurity Environment VariablesLearn MoreOverviewROS 2 includes the ability to secure communications among nodes within the ROS 2 computational graph.

Similar to discovery, security happens through the underlying ROS 2 middleware (provided it has support for the corresponding security plugins).

No additional software installation is needed to enable security; however, the middleware requires configuration files for each ROS graph participant.

These files enable encryption and authentication, and define policies both for individual nodes and for the overall ROS graph.


key: chroma:document
string_value:
ROS 2 also adds a master “on/off” switch to control security behavior.ROS utilities can create the authoritativetrust anchorfor a ROS application, or an external certificate authority can be used.Built-in ROS 2 security features enable control over communications throughout the ROS graph.

This not only allows for encrypting data in transit between ROS domain participants, but also enables authentication of participants sending data, ensures the integrity of data being sent, and enables domain-wide access controls.ROS 2 security services are provided by the underlyingData Distribution Service (DDS)which is used for communications between nodes.

DDS vendors provide open source and commercial DDS implementations that work with ROS.

However, in order to create a specification-compliant implementation of DDS, all vendors must include security plugins as outlined in theDDS Security Specification.


key: chroma:document
string_value:
ROS security features take advantage of these DDS security plugins to provide policy-based encryption, authentication and access control.

DDS and ROS security is enabled through predefined configuration files and environment variables.The Security EnclaveA security enclave encapsulates a single policy for protecting ROS communications.

The enclave may set policy for multiple nodes, for an entire ROS graph, or any combination of protected ROS processes and devices.

Security enclaves can be flexibly mapped to processes, users, or devices at deployment.

Adjusting this default behavior becomes important for optimizing communications and for complex systems.

See the ROS 2 Security Enclavesdesign documentfor additional details.Security FilesAROS 2 security enclaveis established with six files as outlined by the DDS specification.

Three of these files define an enclave’s identity, while three other files define the permissions to be granted to the enclave.


key: chroma:document
string_value:
All six files reside in a single directory, and nodes launched without a qualified enclave path use files in the default root level enclave.Enclave IdentityThe Identity Certificate Authority fileidentity_ca.cert.pemacts as the trust anchor used to identify participants.

Each enclave also holds its unique identifying certificate in the filecert.pem, and the associated private key in the filekey.pem.

Because thecert.pemcertificate has been signed by identity certificate, when a participant presents this certificate to other domain members, they are able to validate the participant’s identity using their own copy of the identity certificate.

This valid certificate exchange allows the enclave to securely establish trusted communications with other participants.


key: chroma:document
string_value:
The enclave does not not share thekey.pemprivate key, but only uses it for decryption and message signing.Enclave PermissionsThe Permissions Certificate Authority filepermissions_ca.cert.pemserves as the trust anchor to grant permissions to security enclaves.

This certificate is used to create the signed filegovernance.p7s, an XML document which defines domain-wide protection policies.

Similarly the XML filepermissions.p7soutlines permissions of this particular enclave and has been signed by the Permissions CA.

Domain members use a copy of the permissions CA to validate these signed files and grant the requested access.Although these two certificate authorities enable separate workflows for identity and permissions, often the same certificate serves as both the identity and the permissions authority.Private KeysThe identity and permissions certificates also have associated private key files.


key: chroma:document
string_value:
Add new enclaves to the domain by signing their Certificate Signing Request (CSR) with the identity certificate’s private key.

Similarly, grant permissions for a new enclave by signing a permissions XML document with the permission certificate’s private key.Security Environment VariablesThe environment variableROS_SECURITY_ENABLEacts as the enclave’s master “on/off” switch for ROS 2 security features.

Security has been turned off by default, so security features will not be enabled even when the proper security files are present.

In order to enable ROS 2 security, set this environment variable totrue(case sensitive).Once security has been enabled, the environment variableROS_SECURITY_STRATEGYdefines how domain participants handle problems when launching participants.

Security features depend on certificates and properly signed configuration files, yet by default, an improperly configured participant will still launch successfully but without security features.


key: chroma:document
string_value:
In order to enforce strict compliance with security settings and fail to launch non-compliant enclaves, set this environment variable toEnforce(case sensitive).Additional security-related environment variables can be found in theROS 2 DDS-Security Integration design document.

These variables generally assist ROS in managing enclaves and locating the security files.Learn MoreFor more information and hands-on exercises enabling ROS 2 communications security, see theSetting up security.


key: chroma:document
string_value:
Title: Writing a static broadcaster (Python) URL: https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Py.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Writing a static broadcaster (Python)Goal:Learn how to broadcast static coordinate frames to tf2.Tutorial level:IntermediateTime:15 minutesContentsBackgroundPrerequisitesTasks1 Create a package2 Write the static broadcaster node3 Build4 RunThe proper way to publish static transformsSummaryBackgroundPublishing static transforms is useful to define the relationship between a robot base and its sensors or non-moving parts. For example, it is easiest to reason about laser scan measurements in a frame at the center of the laser scanner.This is a standalone tutorial covering the basics of static transforms, which consists of two parts. In the first part we will write code to publish static transforms to tf2. In the second part we will explain how to use the commandlinestatic_transform_publisherexecutable tool intf2_ros.In the next two tutorials we will write the code to reproduce the demo from theIntroduction to tf2tutorial. After that, the following tutorials focus on extending the demo with more advanced tf2


key: chroma:document
string_value:
tutorials focus on extending the demo with more advanced tf2 features.PrerequisitesIn previous tutorials, you learned how tocreate a workspaceandcreate a package.Tasks1 Create a packageFirst we will create a package that will be used for this tutorial and the following ones. The package calledlearning_tf2_pywill depend ongeometry_msgs,python3-numpy,rclpy,tf2_ros_py, andturtlesim. Code for this tutorial is storedhere.Open a new terminal andsource your ROS 2 installationso thatros2commands will work. Navigate to workspace’ssrcfolder and create a new package:ros2 pkg create --build-type ament_python --license Apache-2.0 -- learning_tf2_pyYour terminal will return a message verifying the creation of your packagelearning_tf2_pyand all its necessary files and folders.2 Write the static broadcaster nodeLet’s first create the source files. Inside thesrc/learning_tf2_py/learning_tf2_pydirectory download the example static broadcaster code by entering the following command:LinuxmacOSWindowswget


key: chroma:document
string_value:
code by entering the following command:LinuxmacOSWindowswget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.pywget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.pyIn a Windows command line prompt:curl -sk https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py -o static_turtle_tf2_broadcaster.pyOr in powershell:curl https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py -o static_turtle_tf2_broadcaster.pyNow open the file calledstatic_turtle_tf2_broadcaster.pyusing your preferred text


key: chroma:document
string_value:
calledstatic_turtle_tf2_broadcaster.pyusing your preferred text editor.importmathimportsysfromgeometry_msgs.msgimportTransformStampedimportnumpyasnpimportrclpyfromrclpy.nodeimportNodefromtf2_ros.static_transform_broadcasterimportStaticTransformBroadcasterdefquaternion_from_euler(ai,aj,ak):ai/=2.0aj/=2.0ak/=2.0ci=math.cos(ai)si=math.sin(ai)cj=math.cos(aj)sj=math.sin(aj)ck=math.cos(ak)sk=math.sin(ak)cc=ci*ckcs=ci*sksc=si*ckss=si*skq=np.empty((4,))q[0]=cj*sc-sj*csq[1]=cj*ss+sj*ccq[2]=cj*cs-sj*scq[3]=cj*cc+sj*ssreturnqclassStaticFramePublisher(Node):"""Broadcast transforms that never change.This example publishes transforms from `world` to a static turtle frame.The transforms are only published once at startup, and are constant for alltime."""def__init__(self,transformation):super().__init__('static_turtle_tf2_broadcaster')self.tf_static_broadcaster=StaticTransformBroadcaster(self)# Publish static transforms once at


key: chroma:document
string_value:
Publish static transforms once at startupself.make_transforms(transformation)defmake_transforms(self,transformation):t=TransformStamped()t.header.stamp=self.get_clock().now().to_msg()t.header.frame_id='world't.child_frame_id=transformation[1]t.transform.translation.x=float(transformation[2])t.transform.translation.y=float(transformation[3])t.transform.translation.z=float(transformation[4])quat=quaternion_from_euler(float(transformation[5]),float(transformation[6]),float(transformation[7]))t.transform.rotation.x=quat[0]t.transform.rotation.y=quat[1]t.transform.rotation.z=quat[2]t.transform.rotation.w=quat[3]self.tf_static_broadcaster.sendTransform(t)defmain():logger=rclpy.logging.get_logger('logger')# obtain parameters from command line argumentsiflen(sys.argv)!=8:logger.info('Invalid number of parameters. Usage:\n''$ ros2 run learning_tf2_py static_turtle_tf2_broadcaster''child_frame_name x y z roll pitch yaw')sys.exit(1)ifsys.argv[1]=='world':logger.info('Your static turtle name cannot be


key: chroma:document
string_value:
static turtle name cannot be "world"')sys.exit(2)# pass parameters and initialize noderclpy.init()node=StaticFramePublisher(sys.argv)try:rclpy.spin(node)exceptKeyboardInterrupt:passrclpy.shutdown()2.1 Examine the codeNow let’s look at the code that is relevant to publishing the static turtle pose to tf2. The first lines import required packages. First we import theTransformStampedfrom thegeometry_msgs, which provides us a template for the message that we will publish to the transformation tree.fromgeometry_msgs.msgimportTransformStampedAfterward,rclpyis imported so itsNodeclass can be used.importrclpyfromrclpy.nodeimportNodeThetf2_rospackage provides aStaticTransformBroadcasterto make the publishing of static transforms easy. To use theStaticTransformBroadcaster, we need to import it from thetf2_rosmodule.fromtf2_ros.static_transform_broadcasterimportStaticTransformBroadcasterTheStaticFramePublisherclass constructor initializes the node with the namestatic_turtle_tf2_broadcaster.


key: chroma:document
string_value:
the node with the namestatic_turtle_tf2_broadcaster. Then,StaticTransformBroadcasteris created, which will send one static transformation upon the startup.self.tf_static_broadcaster=StaticTransformBroadcaster(self)self.make_transforms(transformation)Here we create aTransformStampedobject, which will be the message we will send over once populated. Before passing the actual transform values we need to give it the appropriate metadata.We need to give the transform being published a timestamp and we’ll just stamp it with the current time,self.get_clock().now()Then we need to set the name of the parent frame of the link we’re creating, in this caseworldFinally, we need to set the name of the child frame of the link we’re creatingt=TransformStamped()t.header.stamp=self.get_clock().now().to_msg()t.header.frame_id='world't.child_frame_id=transformation[1]Here we populate the 6D pose (translation and rotation) of the


key: chroma:document
string_value:
we populate the 6D pose (translation and rotation) of the turtle.t.transform.translation.x=float(transformation[2])t.transform.translation.y=float(transformation[3])t.transform.translation.z=float(transformation[4])quat=quaternion_from_euler(float(transformation[5]),float(transformation[6]),float(transformation[7]))t.transform.rotation.x=quat[0]t.transform.rotation.y=quat[1]t.transform.rotation.z=quat[2]t.transform.rotation.w=quat[3]Finally, we broadcast static transform using thesendTransform()function.self.tf_static_broadcaster.sendTransform(t)2.2 Update package.xmlNavigate one level back to thesrc/learning_tf2_pydirectory, where thesetup.py,setup.cfg, andpackage.xmlfiles have been created for you.Openpackage.xmlwith your text editor.As mentioned in theCreate a packagetutorial, make sure to fill in the<description>,<maintainer>and<license>tags:<description>Learningtf2withrclpy</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache-2.0</license>After the lines above, add the


key: chroma:document
string_value:
the lines above, add the following dependencies corresponding to your node’s import statements:<exec_depend>geometry_msgs</exec_depend><exec_depend>python3-numpy</exec_depend><exec_depend>rclpy</exec_depend><exec_depend>tf2_ros_py</exec_depend><exec_depend>turtlesim</exec_depend>This declares the requiredgeometry_msgs,python3-numpy,rclpy,tf2_ros_py, andturtlesimdependencies when its code is executed.Make sure to save the file.2.3 Add an entry pointTo allow theros2runcommand to run your node, you must add the entry point tosetup.py(located in thesrc/learning_tf2_pydirectory).Add the following line between the'console_scripts':brackets:'static_turtle_tf2_broadcaster = learning_tf2_py.static_turtle_tf2_broadcaster:main',3 BuildIt’s good practice to runrosdepin the root of your workspace to check for missing dependencies before building:LinuxmacOSWindowsrosdep install -i --from-path src --rosdistro jazzy -yrosdep only runs on Linux, so you will need to installgeometry_msgsandturtlesimdependencies


key: chroma:document
string_value:
you will need to installgeometry_msgsandturtlesimdependencies yourselfrosdep only runs on Linux, so you will need to installgeometry_msgsandturtlesimdependencies yourselfStill in the root of your workspace, build your new package:LinuxmacOSWindowscolcon build --packages-select learning_tf2_pycolcon build --packages-select learning_tf2_pycolcon build --merge-install --packages-select learning_tf2_pyOpen a new terminal, navigate to the root of your workspace, and source the setup files:LinuxmacOSWindows. install/setup.bash. install/setup.bash#CMDcall install\setup.bat#Powershell.\install\setup.ps14 RunNow run thestatic_turtle_tf2_broadcasternode:ros2 run learning_tf2_py static_turtle_tf2_broadcaster mystaticturtle 0 0 1 0 0 0This sets a turtle pose broadcast formystaticturtleto float 1 meter above the ground.We can now check that the static transform has been published by echoing thetf_statictopicros2 topic echo /tf_staticIf everything went well you should see a single static transformtransforms:-


key: chroma:document
string_value:
went well you should see a single static transformtransforms:- header:stamp:sec: 1622908754nanosec: 208515730frame_id: worldchild_frame_id: mystaticturtletransform:translation:x: 0.0y: 0.0z: 1.0rotation:x: 0.0y: 0.0z: 0.0w: 1.0The proper way to publish static transformsThis tutorial aimed to show howStaticTransformBroadcastercan be used to publish static transforms. In your real development process you shouldn’t have to write this code yourself and should use the dedicatedtf2_rostool to do so.tf2_rosprovides an executable namedstatic_transform_publisherthat can be used either as a commandline tool or a node that you can add to your launchfiles.The following command publishes a static coordinate transform to tf2 using an x/y/z offset in meters and roll/pitch/yaw in radians. In ROS 2, roll/pitch/yaw refers to rotation about the x/y/z-axis, respectively.ros2 run tf2_ros static_transform_publisher --x x --y y --z z --yaw yaw --pitch pitch --roll roll --frame-id frame_id --child-frame-id child_frame_idThe


key: chroma:document
string_value:
roll --frame-id frame_id --child-frame-id child_frame_idThe following command publishes a static coordinate transform to tf2 using an x/y/z offset in meters and roll/pitch/yaw as a quaternion.ros2 run tf2_ros static_transform_publisher --x x --y y --z z --qx qx --qy qy --qz qz --qw qw --frame-id frame_id --child-frame-id child_frame_idstatic_transform_publisheris designed both as a command-line tool for manual use, as well as for use withinlaunchfiles for setting static transforms. For example:fromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([Node(package='tf2_ros',executable='static_transform_publisher',arguments=['--x','0','--y','0','--z','1','--yaw','0','--pitch','0','--roll','0','--frame-id','world','--child-frame-id','mystaticturtle']),])Note that all arguments except for--frame-idand--child-frame-idare optional; if a particular option isn’t specified, then the identity will be assumed.SummaryIn this tutorial you learned how


key: chroma:document
string_value:
will be assumed.SummaryIn this tutorial you learned how static transforms are useful to define static relationships between frames, likemystaticturtlein relation to theworldframe. In addition, you learned how static transforms can be useful for understanding sensor data, such as from laser scanners, by relating the data to a common coordinate frame. Finally, you wrote your own node to publish static transforms to tf2 and learned how to publish required static transformations usingstatic_transform_publisherexecutable and launch files.


key: chroma:document
string_value:
Code Examples:

Language: unknown

ros2 pkg create -

build

type ament_python -

license Apache

2.0 -

learning_tf2_py

Language: unknown

wget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py

Language: unknown

wget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py

Language: unknown

curl

sk https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py

o static_turtle_tf2_broadcaster.py

Language: unknown

curl https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/static_turtle_tf2_broadcaster.py

o static_turtle_tf2_broadcaster.py


key: chroma:document
string_value:
Language: unknown importmathimportsysfromgeometry_msgs.msgimportTransformStampedimportnumpyasnpimportrclpyfromrclpy.nodeimportNodefromtf2_ros.static_transform_broadcasterimportStaticTransformBroadcasterdefquaternion_from_euler(ai,aj,ak):ai/=2.0aj/=2.0ak/=2.0ci=math.cos(ai)si=math.sin(ai)cj=math.cos(aj)sj=math.sin(aj)ck=math.cos(ak)sk=math.sin(ak)cc=ci*ckcs=ci*sksc=si*ckss=si*skq=np.empty((4,))q[0]=cj*sc-sj*csq[1]=cj*ss+sj*ccq[2]=cj*cs-sj*scq[3]=cj*cc+sj*ssreturnqclassStaticFramePublisher(Node):"""Broadcast transforms that never change.This example publishes transforms from `world` to a static turtle frame.The transforms are only published once at startup, and are constant for alltime."""def__init__(self,transformation):super().__init__('static_turtle_tf2_broadcaster')self.tf_static_broadcaster=StaticTransformBroadcaster(self)# Publish static transforms once at


key: chroma:document
string_value:
static turtle name cannot be "world"')sys.exit(2)# pass parameters and initialize noderclpy.init()node=StaticFramePublisher(sys.argv)try:rclpy.spin(node)exceptKeyboardInterrupt:passrclpy.shutdown()


key: chroma:document
string_value:
Language: unknown

fromgeometry_msgs.msgimportTransformStamped

Language: unknown

importrclpyfromrclpy.nodeimportNode

Language: unknown

fromtf2_ros.static_transform_broadcasterimportStaticTransformBroadcaster

Language: unknown

self.tf_static_broadcaster=StaticTransformBroadcaster(self)self.make_transforms(transformation)

Language: unknown

t=TransformStamped()t.header.stamp=self.get_clock().now().to_msg()t.header.frame_id='world't.child_frame_id=transformation[1]

Language: unknown

t.transform.translation.x=float(transformation[2])t.transform.translation.y=float(transformation[3])t.transform.translation.z=float(transformation[4])quat=quaternion_from_euler(float(transformation[5]),float(transformation[6]),float(transformation[7]))t.transform.rotation.x=quat[0]t.transform.rotation.y=quat[1]t.transform.rotation.z=quat[2]t.transform.rotation.w=quat[3]

Language: unknown

self.tf_static_broadcaster.sendTransform(t)

Language: unknown


key: chroma:document
string_value:
self.tf_static_broadcaster.sendTransform(t)

Language: unknown

<description>Learningtf2withrclpy</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache

2.0</license>

Language: unknown

<exec_depend>geometry_msgs</exec_depend><exec_depend>python3

numpy</exec_depend><exec_depend>rclpy</exec_depend><exec_depend>tf2_ros_py</exec_depend><exec_depend>turtlesim</exec_depend>

Language: unknown

'static_turtle_tf2_broadcaster = learning_tf2_py.static_turtle_tf2_broadcaster:main',

Language: unknown

rosdep install

i -

from

path src -

rosdistro jazzy

y

Language: unknown

colcon build -

packages

select learning_tf2_py

Language: unknown

colcon build -

packages

select learning_tf2_py

Language: unknown

colcon build -

merge

install -

packages

select learning_tf2_py

Language: unknown

. install/setup.bash

Language: unknown

. install/setup.bash

Language: unknown

#CMDcall install\setup.bat#Powershell.\install\setup.ps1


key: chroma:document
string_value:
#CMDcall install\setup.bat#Powershell.\install\setup.ps1

Language: unknown ros2 run learning_tf2_py static_turtle_tf2_broadcaster mystaticturtle 0 0 1 0 0 0

Language: unknown

ros2 topic echo /tf_static

Language: unknown transforms:- header:stamp:sec: 1622908754nanosec: 208515730frame_id: worldchild_frame_id: mystaticturtletransform:translation:x: 0.0y: 0.0z: 1.0rotation:x: 0.0y: 0.0z: 0.0w: 1.0

Language: unknown ros2 run tf2_ros static_transform_publisher --x x --y y --z z --yaw yaw --pitch pitch --roll roll --frame-id frame_id --child-frame-id child_frame_id

Language: unknown ros2 run tf2_ros static_transform_publisher --x x --y y --z z --qx qx --qy qy --qz qz --qw qw --frame-id frame_id --child-frame-id child_frame_id

Language: unknown

fromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():returnLaunchDescription([Node(package='tf2_ros',executable='static_transform_publisher',arguments=['-

x','0','-

y','0','-

z','1','-

yaw','0','-

pitch','0','-


key: chroma:document
string_value:
x','0','-

y','0','-

z','1','-

yaw','0','-

pitch','0','-

roll','0','-

frame

id','world','-

child

frame

id','mystaticturtle']),])


key: chroma:document
string_value:
Title: Composing multiple nodes in a single process URL: https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Composition.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Composing multiple nodes in a single processTable of ContentsBackgroundPrerequisitesRun the demosDiscover available componentsRun-time composition using ROS services with a publisher and subscriberRun-time composition using ROS services with a server and clientCompile-time composition with hardcoded nodesRun-time composition using dlopenComposition using launch actionsAdvanced TopicsUnloading componentsRemapping container name and namespaceRemap component names and namespacesPassing parameter values into componentsPassing additional arguments into componentsComposable nodes as shared librariesComposing Non-Node Derived ComponentsGoal:Compose multiple nodes into a single process.Tutorial level:IntermediateTime:20 minutesBackgroundSee theconceptual article.For information on how to write a composable node,check out this tutorial.PrerequisitesThis tutorial uses executables from therclcpp_components,ros2component,composition, andimage_toolspackages. If you’ve followed theinstallation instructionsfor your


key: chroma:document
string_value:
If you’ve followed theinstallation instructionsfor your platform, these should already be installed.Run the demosDiscover available componentsTo see what components are registered and available in the workspace, execute the following in a shell:ros2componenttypesThe terminal will return the list of all available components:(...componentsofotherpackageshere)compositioncomposition::Talkercomposition::Listenercomposition::NodeLikeListenercomposition::Servercomposition::Client(...componentsofotherpackageshere)Run-time composition using ROS services with a publisher and subscriberIn the first shell, start the component container:ros2runrclcpp_componentscomponent_containerOpen the second shell and verify that the container is running viaros2command line tools:ros2componentlistYou should see a name of the component:/ComponentManagerIn the second shell load the talker component (seetalkersource code):ros2componentload/ComponentManagercompositioncomposition::TalkerThe command will return the unique ID of the


key: chroma:document
string_value:
command will return the unique ID of the loaded component as well as the node name:Loadedcomponent1into'/ComponentManager'containernodeas'/talker'Now the first shell should show a message that the component was loaded as well as repeated message for publishing a message.Run another command in the second shell to load the listener component (seelistenersource code):ros2componentload/ComponentManagercompositioncomposition::ListenerTerminal will return:Loadedcomponent2into'/ComponentManager'containernodeas'/listener'Theros2command line utility can now be used to inspect the state of the container:ros2componentlistYou will see the following result:/ComponentManager1/talker2/listenerNow the first shell should show repeated output for each received message.Run-time composition using ROS services with a server and clientThe example with a server and a client is very similar.In the first shell:ros2runrclcpp_componentscomponent_containerIn the second shell (seeserverandclientsource


key: chroma:document
string_value:
the second shell (seeserverandclientsource code):ros2componentload/ComponentManagercompositioncomposition::Server ros2componentload/ComponentManagercompositioncomposition::ClientIn this case the client sends a request to the server, the server processes the request and replies with a response, and the client prints the received response.Compile-time composition with hardcoded nodesThis demo shows that the same shared libraries can be reused to compile a single executable running multiple components without using ROS interfaces. The executable contains all four components from above: talker and listener as well as server and client, which is hardcoded in the main function.In the shell call (seesource code):ros2runcompositionmanual_compositionThis should show repeated messages from both pairs, the talker and the listener as well as the server and the client.NoteManually-composed components will not be reflected in theros2componentlistcommand line tool output.Run-time composition using dlopenThis demo


key: chroma:document
string_value:
line tool output.Run-time composition using dlopenThis demo presents an alternative to run-time composition by creating a generic container process and explicitly passing the libraries to load without using ROS interfaces. The process will open each library and create one instance of each “rclcpp::Node” class in the library (source code).LinuxmacOSWindowsros2runcompositiondlopen_composition`ros2pkgprefixcomposition`/lib/libtalker_component.so`ros2pkgprefixcomposition`/lib/liblistener_component.soros2runcompositiondlopen_composition`ros2pkgprefixcomposition`/lib/libtalker_component.dylib`ros2pkgprefixcomposition`/lib/liblistener_component.dylib>ros2pkgprefixcompositionto get the path to where composition is installed. Then call>ros2runcompositiondlopen_composition<path_to_composition_install>\bin\talker_component.dll<path_to_composition_install>\bin\listener_component.dllNow the shell should show repeated output for each sent and received message.Notedlopen-composed components will not be reflected in


key: chroma:document
string_value:
message.Notedlopen-composed components will not be reflected in theros2componentlistcommand line tool output.Composition using launch actionsWhile the command line tools are useful for debugging and diagnosing component configurations, it is frequently more convenient to start a set of components at the same time. To automate this action, we can use alaunch file:ros2launchcompositioncomposition_demo_launch.pyAdvanced TopicsNow that we have seen the basic operation of components, we can discuss a few more advanced topics.Unloading componentsIn the first shell, start the component container:ros2runrclcpp_componentscomponent_containerVerify that the container is running viaros2command line tools:ros2componentlistYou should see a name of the component:/ComponentManagerIn the second shell load both the talker and listener as we have before:ros2componentload/ComponentManagercompositioncomposition::Talker ros2componentload/ComponentManagercompositioncomposition::ListenerUse the unique ID to unload the node from


key: chroma:document
string_value:
the unique ID to unload the node from the component container.ros2componentunload/ComponentManager12The terminal should return:Unloadedcomponent1from'/ComponentManager'container Unloadedcomponent2from'/ComponentManager'containerIn the first shell, verify that the repeated messages from talker and listener have stopped.Remapping container name and namespaceThe component manager name and namespace can be remapped via standard command line arguments:ros2runrclcpp_componentscomponent_container--ros-args-r__node:=MyContainer-r__ns:=/nsIn a second shell, components can be loaded by using the updated container name:ros2componentload/ns/MyContainercompositioncomposition::ListenerNoteNamespace remappings of the container do not affect loaded components.Remap component names and namespacesComponent names and namespaces may be adjusted via arguments to the load command.In the first shell, start the component container:ros2runrclcpp_componentscomponent_containerSome examples of how to remap names and namespaces.Remap


key: chroma:document
string_value:
examples of how to remap names and namespaces.Remap node name:ros2componentload/ComponentManagercompositioncomposition::Talker--node-nametalker2Remap namespace:ros2componentload/ComponentManagercompositioncomposition::Talker--node-namespace/nsRemap both:ros2componentload/ComponentManagercompositioncomposition::Talker--node-nametalker3--node-namespace/ns2Now useros2command line utility:ros2componentlistIn the console you should see corresponding entries:/ComponentManager1/talker22/ns/talker3/ns2/talker3NoteNamespace remappings of the container do not affect loaded components.Passing parameter values into componentsTheros2componentloadcommand-line supports passing arbitrary parameters to the node as it is constructed. This functionality can be used as follows:ros2componentload/ComponentManagerimage_toolsimage_tools::Cam2Image-pburger_mode:=truePassing additional arguments into componentsTheros2componentloadcommand-line supports passing particular options to the component manager for use when constructing the


key: chroma:document
string_value:
options to the component manager for use when constructing the node. As of now, the only command-line option that is supported is to instantiate a node using intra-process communication. This functionality can be used as follows:ros2componentload/ComponentManagercompositioncomposition::Talker-euse_intra_process_comms:=trueComposable nodes as shared librariesIf you want to export a composable node as a shared library from a package and use that node in another package that does link-time composition, add code to the CMake file which imports the actual targets in downstream packages.Then install the generated file and export the generated file.A practical example can be seen here:ROS Discourse - Ament best practice for sharing librariesComposing Non-Node Derived ComponentsIn ROS 2, components allow for more efficient use of system resources and provide a powerful feature that enables you to create reusable functionality that is not tied to a specific node.One advantage of using components is that they allow


key: chroma:document
string_value:
node.One advantage of using components is that they allow you to create non-node derived functionality as standalone executables or shared libraries that can be loaded into the ROS system as needed.To create a component that is not derived from a node, follow these guidelines:Implement a constructor that takesconstrclcpp::NodeOptions&as its argument.Implement theget_node_base_interface()method, which should return aNodeBaseInterface::SharedPtr. You can use theget_node_base_interface()method of a node that you create in your constructor to provide this interface.Here’s an example of a component that is not derived from a node, which listens to a ROS topic:node_like_listener_component.For more information on this topic, you can refer to thisdiscussion.


key: chroma:document
string_value:
Code Examples:

Language: unknown

ros2componenttypes

Language: unknown

(...componentsofotherpackageshere)compositioncomposition::Talkercomposition::Listenercomposition::NodeLikeListenercomposition::Servercomposition::Client(...componentsofotherpackageshere)

Language: unknown

ros2runrclcpp_componentscomponent_container

Language: unknown

ros2componentlist

Language: unknown

/ComponentManager

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker

Language: unknown

Loadedcomponent1into'/ComponentManager'containernodeas'/talker'

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Listener

Language: unknown

Loadedcomponent2into'/ComponentManager'containernodeas'/listener'

Language: unknown

ros2componentlist

Language: unknown

/ComponentManager1/talker2/listener

Language: unknown

ros2runrclcpp_componentscomponent_container

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Server


key: chroma:document
string_value:
ros2componentload/ComponentManagercompositioncomposition::Client

Language: unknown

ros2runcompositionmanual_composition

Language: unknown

ros2runcompositiondlopen_composition`ros2pkgprefixcomposition`/lib/libtalker_component.so`ros2pkgprefixcomposition`/lib/liblistener_component.so

Language: unknown

ros2runcompositiondlopen_composition`ros2pkgprefixcomposition`/lib/libtalker_component.dylib`ros2pkgprefixcomposition`/lib/liblistener_component.dylib

Language: unknown

>ros2pkgprefixcomposition

Language: unknown

>ros2runcompositiondlopen_composition<path_to_composition_install>\bin\talker_component.dll<path_to_composition_install>\bin\listener_component.dll

Language: unknown

ros2launchcompositioncomposition_demo_launch.py

Language: unknown

ros2runrclcpp_componentscomponent_container

Language: unknown

ros2componentlist

Language: unknown

/ComponentManager

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker


key: chroma:document
string_value:
ros2componentload/ComponentManagercompositioncomposition::Listener

Language: unknown

ros2componentunload/ComponentManager12

Language: unknown

Unloadedcomponent1from'/ComponentManager'container

Unloadedcomponent2from'/ComponentManager'container

Language: unknown

ros2runrclcpp_componentscomponent_container-

ros

args

r__node:=MyContainer

r__ns:=/ns

Language: unknown

ros2componentload/ns/MyContainercompositioncomposition::Listener

Language: unknown

ros2runrclcpp_componentscomponent_container

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker-

node

nametalker2

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker-

node

namespace/ns

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker-

node

nametalker3-

node

namespace/ns2

Language: unknown

ros2componentlist

Language: unknown

/ComponentManager1/talker22/ns/talker3/ns2/talker3

Language: unknown


key: chroma:document
string_value:
Language: unknown

ros2componentload/ComponentManagerimage_toolsimage_tools::Cam2Image

pburger_mode:=true

Language: unknown

ros2componentload/ComponentManagercompositioncomposition::Talker

euse_intra_process_comms:=true


key: chroma:document
string_value:
Title: Developing a ROS 2 package URL: https://docs.ros.org/en/jazzy/How-To-Guides/Developing-a-ROS-2-Package.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Developing a ROS 2 packageTable of ContentsPrerequisitesCreating a packageC++ PackagesPython PackagesCombined C++ and Python PackagesThis tutorial will teach you how to create your first ROS 2 application. It is intended for developers who want to learn how to create custom packages in ROS 2, not for people who want to use ROS 2 with its existing packages.PrerequisitesInstall ROSInstall colconSetup your workspace by sourcing your ROS 2 installation.Creating a packageAll ROS 2 packages begin by running the commandros2pkgcreate--licenseApache-2.0<pkg-name>--dependencies[deps]in your workspace (usually~/ros2_ws/src).To create a package for a specific client library:C++Pythonros2pkgcreate--build-typeament_cmake--licenseApache-2.0<pkg-name>--dependencies[deps]ros2pkgcreate--build-typeament_python--licenseApache-2.0<pkg-name>--dependencies[deps]You can then update thepackage.xmlwith your package info such as dependencies, descriptions, and authorship.C++ PackagesYou will mostly use theadd_executable()CMake


key: chroma:document
string_value:
PackagesYou will mostly use theadd_executable()CMake macro along withament_target_dependencies(<executable-name>[dependencies])to create executable nodes and link dependencies.To install your launch files and nodes, you can use theinstall()macro placed towards the end of the file but before theament_package()macro.An example for launch files and nodes:# Install launch filesinstall(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})# Install nodesinstall(TARGETS[node-names]DESTINATIONlib/${PROJECT_NAME})Python PackagesROS 2 follows Python’s standard module distribution process that usessetuptools. For Python packages, thesetup.pyfile complements a C++ package’sCMakeLists.txt. More details on distribution can be found in theofficial documentation.In your ROS 2 package, you should have asetup.cfgfile which looks like:[develop]script_dir=$base/lib/<package-name>[install]install_scripts=$base/lib/<package-name>and asetup.pyfile that looks


key: chroma:document
string_value:
asetup.pyfile that looks like:importosfromglobimportglobfromsetuptoolsimportfind_packages,setuppackage_name='my_package'setup(name=package_name,version='0.0.0',# Packages to exportpackages=find_packages(exclude=['test']),# Files we want to install, specifically launch filesdata_files=[# Install marker file in the package index('share/ament_index/resource_index/packages',['resource/'+package_name]),# Include our package.xml file(os.path.join('share',package_name),['package.xml']),# Include all launch files.(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','*launch.[pxy][yma]*'))),],# This is important as wellinstall_requires=['setuptools'],zip_safe=True,author='ROS 2 Developer',author_email='ros2@ros.com',maintainer='ROS 2 Developer',maintainer_email='ros2@ros.com',keywords=['foo','bar'],classifiers=['Intended Audience :: Developers','License :: TODO','Programming Language :: Python','Topic :: Software Development',],description='My awesome package.',license='TODO',# Like the CMakeLists


key: chroma:document
string_value:
awesome package.',license='TODO',# Like the CMakeLists add_executable macro, you can add your python# scripts here.entry_points={'console_scripts':['my_script = my_package.my_script:main'],},)Combined C++ and Python PackagesWhen writing a package with both C++ and Python code, thesetup.pyfile andsetup.cfgfile are not used. Instead, useament_cmake_python.


key: chroma:document
string_value:
Code Examples:

Language: unknown

ros2pkgcreate-

licenseApache

2.0<pkg

name>-

dependencies[deps]

Language: unknown

ros2pkgcreate-

build

typeament_cmake-

licenseApache

2.0<pkg

name>-

dependencies[deps]

Language: unknown

ros2pkgcreate-

build

typeament_python-

licenseApache

2.0<pkg

name>-

dependencies[deps]

Language: unknown

ament_target_dependencies(<executable

name>[dependencies])

Language: unknown # Install launch filesinstall(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})# Install nodesinstall(TARGETS[node-names]DESTINATIONlib/${PROJECT_NAME})

Language: unknown

[develop]script_dir=$base/lib/<package

name>[install]install_scripts=$base/lib/<package

name>


key: chroma:document
string_value:
Language: unknown importosfromglobimportglobfromsetuptoolsimportfind_packages,setuppackage_name='my_package'setup(name=package_name,version='0.0.0',# Packages to exportpackages=find_packages(exclude=['test']),# Files we want to install, specifically launch filesdata_files=[# Install marker file in the package index('share/ament_index/resource_index/packages',['resource/'+package_name]),# Include our package.xml file(os.path.join('share',package_name),['package.xml']),# Include all launch files.(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','*launch.[pxy][yma]*'))),],# This is important as wellinstall_requires=['setuptools'],zip_safe=True,author='ROS 2 Developer',author_email='ros2@ros.com',maintainer='ROS 2 Developer',maintainer_email='ros2@ros.com',keywords=['foo','bar'],classifiers=['Intended Audience :: Developers','License :: TODO','Programming Language :: Python','Topic :: Software Development',],description='My awesome package.',license='TODO',# Like the CMakeLists


key: chroma:document
string_value:
awesome package.',license='TODO',# Like the CMakeLists add_executable macro, you can add your python# scripts here.entry_points={'console_scripts':['my_script = my_package.my_script:main'],},)


key: chroma:document
string_value:
Title: Writing a simple service and client (C++) URL: https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Service-And-Client.html Section: Installation --------------------------------------------------------------------------------


key: chroma:document
string_value:
Writing a simple service and client (C++)Goal:Create and run service and client nodes using C++.Tutorial level:BeginnerTime:20 minutesContentsBackgroundPrerequisitesTasks1 Create a package2 Write the service node3 Write the client node4 Build and runSummaryNext stepsRelated contentBackgroundWhennodescommunicate usingservices, the node that sends a request for data is called the client node, and the one that responds to the request is the service node. The structure of the request and response is determined by a.srvfile.The example used here is a simple integer addition system; one node requests the sum of two integers, and the other responds with the result.PrerequisitesIn previous tutorials, you learned how tocreate a workspaceandcreate a package.Tasks1 Create a packageOpen a new terminal andsource your ROS 2 installationso thatros2commands will work.Navigate into theros2_wsdirectory created in aprevious tutorial.Recall that packages should be created in thesrcdirectory, not the root of the workspace.


key: chroma:document
string_value:
be created in thesrcdirectory, not the root of the workspace. Navigate intoros2_ws/srcand create a new package:ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_srvcli --dependencies rclcpp example_interfacesYour terminal will return a message verifying the creation of your packagecpp_srvcliand all its necessary files and folders.The--dependenciesargument will automatically add the necessary dependency lines topackage.xmlandCMakeLists.txt.example_interfacesis the package that includesthe .srv fileyou will need to structure your requests and responses:int64 aint64 b---int64 sumThe first two lines are the parameters of the request, and below the dashes is the response.1.1 Updatepackage.xmlBecause you used the--dependenciesoption during package creation, you don’t have to manually add dependencies topackage.xmlorCMakeLists.txt.As always, though, make sure to add the description, maintainer email and name, and license information


key: chroma:document
string_value:
description, maintainer email and name, and license information topackage.xml.<description>C++clientservertutorial</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache-2.0</license>2 Write the service nodeInside theros2_ws/src/cpp_srvcli/srcdirectory, create a new file calledadd_two_ints_server.cppand paste the following code within:#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/add_two_ints.hpp"#include<memory>voidadd(conststd::shared_ptr<example_interfaces::srv::AddTwoInts::Request>request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response>response){response->sum=request->a+request->b;RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Incoming request\na: %ld"" b: %ld",request->a,request->b);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"sending back response:


key: chroma:document
string_value:
back response: [%ld]",(longint)response->sum);}intmain(intargc,char**argv){rclcpp::init(argc,argv);std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_server");rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtrservice=node->create_service<example_interfaces::srv::AddTwoInts>("add_two_ints",&add);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Ready to add two ints.");rclcpp::spin(node);rclcpp::shutdown();}2.1 Examine the codeThe first two#includestatements are your package dependencies.Theaddfunction adds two integers from the request and gives the sum to the response, while notifying the console of its status using logs.voidadd(conststd::shared_ptr<example_interfaces::srv::AddTwoInts::Request>request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response>response){response->sum=request->a+request->b;RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Incoming request\na: %ld"" b: %ld",request->a,request->b);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"sending back response:


key: chroma:document
string_value:
back response: [%ld]",(longint)response->sum);}Themainfunction accomplishes the following, line by line:Initializes ROS 2 C++ client library:rclcpp::init(argc,argv);Creates a node namedadd_two_ints_server:std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_server");Creates a service namedadd_two_intsfor that node and automatically advertises it over the networks with the&addmethod:rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtrservice=node->create_service<example_interfaces::srv::AddTwoInts>("add_two_ints",&add);Prints a log message when it’s ready:RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Ready to add two ints.");Spins the node, making the service available.rclcpp::spin(node);2.2 Add executableTheadd_executablemacro generates an executable you can run usingros2run. Add the following code block toCMakeLists.txtto create an executable namedserver:add_executable(server src/add_two_ints_server.cpp)ament_target_dependencies(server rclcpp example_interfaces)Soros2runcan find


key: chroma:document
string_value:
rclcpp example_interfaces)Soros2runcan find the executable, add the following lines to the end of the file, right beforeament_package():install(TARGETSserverDESTINATION lib/${PROJECT_NAME})You could build your package now, source the local setup files, and run it, but let’s create the client node first so you can see the full system at work.3 Write the client nodeInside theros2_ws/src/cpp_srvcli/srcdirectory, create a new file calledadd_two_ints_client.cppand paste the following code within:#include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/add_two_ints.hpp"#include<chrono>#include<cstdlib>#include<memory>usingnamespacestd::chrono_literals;intmain(intargc,char**argv){rclcpp::init(argc,argv);if(argc!=3){RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"usage: add_two_ints_client X


key: chroma:document
string_value:
add_two_ints_client X Y");return1;}std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_client");rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtrclient=node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");autorequest=std::make_shared<example_interfaces::srv::AddTwoInts::Request>();request->a=atoll(argv[1]);request->b=atoll(argv[2]);while(!client->wait_for_service(1s)){if(!rclcpp::ok()){RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Interrupted while waiting for the service. Exiting.");return0;}RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"service not available, waiting again...");}autoresult=client->async_send_request(request);// Wait for the result.if(rclcpp::spin_until_future_complete(node,result)==rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Sum: %ld",result.get()->sum);}else{RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Failed to call service add_two_ints");}rclcpp::shutdown();return0;}3.1 Examine the codeSimilar to the service


key: chroma:document
string_value:
Examine the codeSimilar to the service node, the following lines of code create the node and then create the client for that node:std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_client");rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtrclient=node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");Next, the request is created. Its structure is defined by the.srvfile mentioned earlier.autorequest=std::make_shared<example_interfaces::srv::AddTwoInts::Request>();request->a=atoll(argv[1]);request->b=atoll(argv[2]);Thewhileloop gives the client 1 second to search for service nodes in the network. If it can’t find any, it will continue waiting.RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"service not available, waiting again...");If the client is canceled (e.g. by you enteringCtrl+Cinto the terminal), it will return an error log message stating it was interrupted.RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Interrupted while waiting for the service.


key: chroma:document
string_value:
while waiting for the service. Exiting.");Then the client sends its request, and the node spins until it receives its response, or fails.3.2 Add executableReturn toCMakeLists.txtto add the executable and target for the new node. After removing some unnecessary boilerplate from the automatically generated file, yourCMakeLists.txtshould look like this:cmake_minimum_required(VERSION 3.5)project(cpp_srvcli)find_package(ament_cmake REQUIRED)find_package(rclcpp REQUIRED)find_package(example_interfaces REQUIRED)add_executable(server src/add_two_ints_server.cpp)ament_target_dependencies(server rclcpp example_interfaces)add_executable(client src/add_two_ints_client.cpp)ament_target_dependencies(client rclcpp example_interfaces)install(TARGETSserverclientDESTINATION lib/${PROJECT_NAME})ament_package()4 Build and runIt’s good practice to runrosdepin the root of your workspace (ros2_ws) to check for missing dependencies before building:LinuxmacOSWindowsrosdep install -i --from-path src --rosdistro jazzy -yrosdep only


key: chroma:document
string_value:
install -i --from-path src --rosdistro jazzy -yrosdep only runs on Linux, so you can skip ahead to next step.rosdep only runs on Linux, so you can skip ahead to next step.Navigate back to the root of your workspace,ros2_ws, and build your new package:LinuxmacOSWindowscolcon build --packages-select cpp_srvclicolcon build --packages-select cpp_srvclicolcon build --merge-install --packages-select cpp_srvcliOpen a new terminal, navigate toros2_ws, and source the setup files:LinuxmacOSWindowssource install/setup.bash. install/setup.bashcall install/setup.batNow run the service node:ros2 run cpp_srvcli serverThe terminal should return the following message, and then wait:[INFO] [rclcpp]: Ready to add two ints.Open another terminal, source the setup files from insideros2_wsagain. Start the client node, followed by any two integers separated by a space:ros2 run cpp_srvcli client 2 3If you chose2and3, for example, the client would receive a response like this:[INFO] [rclcpp]: Sum: 5Return to the terminal where your


key: chroma:document
string_value:
this:[INFO] [rclcpp]: Sum: 5Return to the terminal where your service node is running. You will see that it published log messages when it received the request and the data it received, and the response it sent back:[INFO] [rclcpp]: Incoming requesta: 2 b: 3[INFO] [rclcpp]: sending back response: [5]EnterCtrl+Cin the server terminal to stop the node from spinning.SummaryYou created two nodes to request and respond to data over a service. You added their dependencies and executables to the package configuration files so that you could build and run them, and see a service/client system at work.Next stepsIn the last few tutorials you’ve been utilizing interfaces to pass data across topics and services. Next, you’ll learn how tocreate custom interfaces.Related contentThere are several ways you could write a service and client in C++; check out theminimal_serviceandminimal_clientpackages in theros2/examplesrepo.


key: chroma:document
string_value:
Code Examples:

Language: unknown

ros2 pkg create -

build

type ament_cmake -

license Apache

2.0 cpp_srvcli -

dependencies rclcpp example_interfaces

Language: unknown

int64 aint64 b--

int64 sum

Language: unknown

<description>C++clientservertutorial</description><maintaineremail="you@email.com">YourName</maintainer><license>Apache

2.0</license>


key: chroma:document
string_value:
2.0</license>

Language: unknown #include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/add_two_ints.hpp"#include<memory>voidadd(conststd::shared_ptr<example_interfaces::srv::AddTwoInts::Request>request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response>response){response->sum=request->a+request->b;RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Incoming request\na: %ld"" b: %ld",request->a,request->b);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"sending back response: [%ld]",(longint)response->sum);}intmain(intargc,char**argv){rclcpp::init(argc,argv);std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_server");rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtrservice=node->create_service<example_interfaces::srv::AddTwoInts>("add_two_ints",&add);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Ready to add two ints.");rclcpp::spin(node);rclcpp::shutdown();}


key: chroma:document
string_value:
Language: unknown voidadd(conststd::shared_ptr<example_interfaces::srv::AddTwoInts::Request>request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response>response){response->sum=request->a+request->b;RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Incoming request\na: %ld"" b: %ld",request->a,request->b);RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"sending back response: [%ld]",(longint)response->sum);}

Language: unknown

rclcpp::init(argc,argv);

Language: unknown

std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_server");

Language: unknown

rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtrservice=node

>create_service<example_interfaces::srv::AddTwoInts>("add_two_ints",&add);

Language: unknown RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Ready to add two ints.");

Language: unknown

rclcpp::spin(node);

Language: unknown

add_executable(server src/add_two_ints_server.cpp)ament_target_dependencies(server rclcpp example_interfaces)

Language: unknown


key: chroma:document
string_value:
Language: unknown #include"rclcpp/rclcpp.hpp"#include"example_interfaces/srv/add_two_ints.hpp"#include<chrono>#include<cstdlib>#include<memory>usingnamespacestd::chrono_literals;intmain(intargc,char**argv){rclcpp::init(argc,argv);if(argc!=3){RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"usage: add_two_ints_client X Y");return1;}std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_client");rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtrclient=node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");autorequest=std::make_shared<example_interfaces::srv::AddTwoInts::Request>();request->a=atoll(argv[1]);request->b=atoll(argv[2]);while(!client->wait_for_service(1s)){if(!rclcpp::ok()){RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Interrupted while waiting for the service. Exiting.");return0;}RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"service not available, waiting again...");}autoresult=client->async_send_request(request);// Wait for the


key: chroma:document
string_value:
Wait for the result.if(rclcpp::spin_until_future_complete(node,result)==rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"Sum: %ld",result.get()->sum);}else{RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Failed to call service add_two_ints");}rclcpp::shutdown();return0;}


key: chroma:document
string_value:
Language: unknown

std::shared_ptr<rclcpp::Node>node=rclcpp::Node::make_shared("add_two_ints_client");rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtrclient=node

>create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");

Language: unknown

autorequest=std::make_shared<example_interfaces::srv::AddTwoInts::Request>();request

>a=atoll(argv[1]);request

>b=atoll(argv[2]);

Language: unknown RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"service not available, waiting again...");

Language: unknown RCLCPP_ERROR(rclcpp::get_logger("rclcpp"),"Interrupted while waiting for the service. Exiting.");


key: chroma:document
string_value:
Language: unknown cmake_minimum_required(VERSION 3.5)project(cpp_srvcli)find_package(ament_cmake REQUIRED)find_package(rclcpp REQUIRED)find_package(example_interfaces REQUIRED)add_executable(server src/add_two_ints_server.cpp)ament_target_dependencies(server rclcpp example_interfaces)add_executable(client src/add_two_ints_client.cpp)ament_target_dependencies(client rclcpp example_interfaces)install(TARGETSserverclientDESTINATION lib/${PROJECT_NAME})ament_package()

Language: unknown

rosdep install

i -

from

path src -

rosdistro jazzy

y

Language: unknown

colcon build -

packages

select cpp_srvcli

Language: unknown

colcon build -

packages

select cpp_srvcli

Language: unknown

colcon build -

merge

install -

packages

select cpp_srvcli

Language: unknown

source install/setup.bash

Language: unknown

. install/setup.bash

Language: unknown

call install/setup.bat

Language: unknown

ros2 run cpp_srvcli server

Language: unknown [INFO] [rclcpp]: Ready to add two ints.


key: chroma:document
string_value:
Language: unknown [INFO] [rclcpp]: Ready to add two ints.

Language: unknown ros2 run cpp_srvcli client 2 3

Language: unknown

[INFO] [rclcpp]: Sum: 5

Language: unknown [INFO] [rclcpp]: Incoming requesta: 2 b: 3[INFO] [rclcpp]: sending back response: [5]


key: chroma:document
string_value:
Title: Features Status

URL: https://docs.ros.org/en/jazzy/The

ROS2

Project/Features.html

Section: Installation

--------------------------------------------------------------------------------


key: chroma:document
string_value:
Features StatusThe features listed below are available in the current ROS 2 release. Unless otherwise specified, the features are available for all supported platforms (Ubuntu 24.04 (Noble), Windows 10), DDS implementations (eProsima Fast DDS, RTI Connext DDS, and Eclipse Cyclone DDS) and programming language client libraries (C++ and Python). For planned future development, see theRoadmap.FunctionalityLinkFine printDiscovery, transport and serialization over DDSArticleSupport formultiple DDS implementations, chosen at runtimeConcept,How-to GuideCurrently Eclipse Cyclone DDS, eProsima Fast DDS, and RTI Connext DDS are fully supported.Common core client library that is wrapped by language-specific librariesDetailsPublish/subscribe over topicsSample code,ArticleClients and servicesSample codeSet/retrieve parametersSample codeROS 1 - ROS 2 communication bridgeTutorialAvailable for topics and services, not yet available for actions.Quality of service settings for handling non-ideal networksDemoInter- and


key: chroma:document
string_value:
service settings for handling non-ideal networksDemoInter- and intra-process communication using the same APIDemoCurrently only in C++.Composition of node components at compile, link, load, or run timeDemoCurrently only in C++.Multiple executors (at level of callback groups) in same nodeDemoOnly in C++.Support for nodes with managed lifecyclesDemoCurrently only in C++.DDS-Security supportDemoCommand-line introspection tools using an extensible frameworkConceptLaunch system for coordinating multiple nodesTutorialNamespace support for nodes and topicsArticleStatic remapping of ROS namesHow-to GuideDemos of an all-ROS 2 mobile robotDemoPreliminary support for real-time codeDemo,demoLinux only. Not available for Fast RTPS.Preliminary support for “bare-metal” microcontrollersWikiContent filtering subscriptionDemoCurrently only in C++.Service IntrospectionDemoBesides core features of the platform, the biggest impact of ROS comes from its available packages. The following are a few high-profile packages which are


key: chroma:document
string_value:
The following are a few high-profile packages which are available in the latest release:gazebo_ros_pkgsimage_transportnavigation2rosbag2RQtRViz2


key: chroma:document
string_value:
Title: Topic statistics

URL: https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Topic-Statistics.html

Section: Installation

--------------------------------------------------------------------------------

Topic statisticsTable of ContentsOverviewHow statistics are calculatedTypes of statistics calculatedBehaviorComparison to ROS 1SupportOverviewROS 2 provides integrated measurement of statistics for messages received by any subscription.

Allowing a user to collect subscription statistics enables them to characterize the performance of their system or aid in diagnosis of any present issues.The measurements provided are the received message age and received message period.

For each measurement the statistics provided are the average, maximum, minimum, standard deviation, and sample count.


key: chroma:document
string_value:
These statistics are calculated in a moving window.How statistics are calculatedEach statistic set is calculated in constant time and constant memory by using the utilities implemented in thelibstatistics_collectorpackage.

When a new message is received by a subscription, this is a new sample for calculation in the current measurement window.

The average calculated is simply amoving average.

The maximum, minimum, and sample count are updated upon receipt of each new sample, whereas the standard deviation is calculated usingWelford’s online algorithm.Types of statistics calculatedReceived message periodUnits: millisecondsUses the system clock to measure the period between received messagesReceived message ageUnits: millisecondsRequires a message to have a timestamp populated in the header field in order to calculate the age of the message as sent from a publisherBehaviorBy default, Topic Statistics measurements are not enabled.


key: chroma:document
string_value:
After enabling this feature for a specific node via the subscription configuration options, both received message age and received message period measurements are enabled for that specific subscription.The data is published as astatistics_msg/msg/MetricsMessageat a configurable period (default 1 second) to a configurable topic (default/statistics).

Note that the publishing period also serves as the sample collection window period.Since received message period requires a message timestamp in a header field, empty data is published.

That is, all statistics values are NaN if no timestamp is found.

Publishing NaN values instead of not publishing at all avoids the absence of a signal problem and is meant to explicitly show that a measurement could not be made.The first sample of each window for the received message period statistic does not yield a measurement.


key: chroma:document
string_value:
This is because calculating this statistic requires knowing the time the previous message arrived, so subsequent samples in the window yield measurements.Comparison to ROS 1Similar to ROS 1Topic Statistics, both message age and message period are calculated, albeit from the subscription side.

Other ROS 1 metrics, e.g., the number of dropped messages or traffic volume, are currently not provided.SupportThis feature is currently supported in ROS 2 Foxy for C++ only (rclcpp).

Future work and improvements, such as Python support, can be foundhere.


key: chroma:document
string_value:
Title: Examining network traffic

URL: https://docs.ros.org/en/jazzy/Tutorials/Advanced/Security/Examine-Traffic.html

Section: Installation

--------------------------------------------------------------------------------

Examining network trafficGoal:Capture and examine raw ROS 2 network traffic.Tutorial level:AdvancedTime:20 minutesContentsOverviewPrerequisitesRun the demoInstalltcpdumpStart the talker and listenerDisplay unencrypted discovery packetsDisplay unencrypted data packetsEnable encryptionDisplay encrypted discovery packetsDisplay encrypted data packetsOverviewROS 2 communications security is all about protecting communications between nodes.

Prior tutorials enabled security, but how can youreallytell if traffic is being encrypted?


key: chroma:document
string_value:
In this tutorial we’ll take a look at capturing live network traffic to show the difference between encrypted and unencrypted traffic.Notermw_fastrtps_cppusesShared Memory Transportby default to improve the performance in the transport layer when the endpoints are in the same host system.

Security enclaves are still applied, and data will be encrypted.

However, you cannot capture live network traffic since the data will not be on the network interface.

If you are usingrmw_fastrtps_cpp, you need to either go through this tutorial and use a different host system between the publisher and subscriber, or disable shared memory transport withEnabling UDP TransportandHow to set Fast-DDS XML configuration.PrerequisitesThis guide only runs on Linux, and assumes you have alreadyinstalled ROS 2.Run the demoInstalltcpdumpBegin in a new terminal window by installingtcpdump, a command-line tool for capturing and displaying network traffic.


key: chroma:document
string_value:
Although this tutorial describestcpdumpcommands, you can also useWireshark, a similar graphical tool for capturing and analyzing traffic.sudoaptupdate

sudoaptinstalltcpdumpRun following commands on a single machine through multiplesshsessions.Start the talker and listenerStart both the talker and the listener again, each in its own terminal.

The security environment variables are not set so security is not enabled for these sessions.# Disable ROS Security for both terminalsunsetROS_SECURITY_ENABLE# In terminal 1:ros2rundemo_nodes_cpptalker--ros-args--enclave/talker_listener/talker# In terminal 2:ros2rundemo_nodes_cpplistener--ros-args--enclave/talker_listener/listenerDisplay unencrypted discovery packetsWith the talker and listener running, open another terminal and starttcpdumpto look at the network traffic.


key: chroma:document
string_value:
You need to usesudosince reading raw network traffic is a privileged operation.The command below uses the-Xoption to print packet contents, the-ioption to listen for packets on any interface, and captures onlyUDPport 7400 traffic.sudotcpdump-X-ianyudpport7400You should see packets like the following:20:18:04.400770 IP 8_xterm.46392 > 239.255.0.1.7400: UDP, length 252

0x0000:  4500 0118 d48b 4000 0111 7399 c0a8 8007  E.....@...s.....

0x0010:  efff 0001 b538 1ce8 0104 31c6 5254 5053  .....8....1.RTPS

...

0x00c0:  5800 0400 3f0c 3f0c 6200 1c00 1800 0000  X...?.?.b.......

0x00d0:  2f74 616c 6b65 725f 6c69 7374 656e 6572  /talker_listener

0x00e0:  2f74 616c 6b65 7200 2c00 2800 2100 0000  /talker.,.(.!...

0x00f0:  656e 636c 6176 653d 2f74 616c 6b65 725f  enclave=/talker_

0x0100:  6c69 7374 656e 6572 2f74 616c 6b65 723b  listener/talker;

0x0110:  0000 0000 0100 0000                      ........This is a discovery datagram–the talker looking for subscribers.


key: chroma:document
string_value:
As you can see, the node name (/talker_listener/talker) and the enclave (also/talker_listener/talker) are passed in plain text.

You should also see similar discovery datagrams from thelistenernode.

Some other features of a typical discovery packet:The destination address is 239.255.0.1, which is a multicast IP address; ROS 2 uses multicast traffic for discovery by default.UDP 7400 is the destination port, as per theDDS-RTPS specification.The packet contains the “RTPS” tag, also as defined to the DDS-RTPS specification.Display unencrypted data packetsUsetcpdumpto capture non-discovery RTPS packets by filtering on UDP ports above 7400:sudotcpdump-iany-Xudpportrange7401-7500You will see few different types of packets, but watch for something like the following which is obviously data being sent from a talker to a listener:20:49:17.927303 IP localhost.46392 > localhost.7415: UDP, length 84

0x0000:  4500 0070 5b53 4000 4011 e127 7f00 0001  E..p[S@.@..'....


key: chroma:document
string_value:
0x0010:  7f00 0001 b538 1cf7 005c fe6f 5254 5053  .....8...\.oRTPS

0x0020:  0203 010f 010f 4874 e752 0000 0100 0000  ......Ht.R......

0x0030:  0901 0800 cdee b760 5bf3 5aed 1505 3000  .......`[.Z...0.

0x0040:  0000 1000 0000 1204 0000 1203 0000 0000  ................

0x0050:  5708 0000 0001 0000 1200 0000 4865 6c6c  W...........Hell

0x0060:  6f20 576f 726c 643a 2032 3133 3500 0000  o.World:.2135...Some features to note about this packet:The message contents, “Hello World: 2135”, are sent in clear textThe source and destination IP address islocalhost: since both nodes are running on the same machine, the nodes discovered each other on thelocalhostinterfaceEnable encryptionStop both the talker and the listener nodes.

Enable encryption for both by setting the security environment variables and run them again.# In terminal 1:exportROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystoreexportROS_SECURITY_ENABLE=trueexportROS_SECURITY_STRATEGY=Enforce


key: chroma:document
string_value:
ros2rundemo_nodes_cpptalker--ros-args--enclave/talker_listener/talker# In terminal 2:exportROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystoreexportROS_SECURITY_ENABLE=trueexportROS_SECURITY_STRATEGY=Enforce

ros2rundemo_nodes_cpplistener--ros-args--enclave/talker_listener/listenerDisplay encrypted discovery packetsRun the sametcpdumpcommand used earlier to examine the output of discovery traffic with encryption enabled:sudotcpdump-X-ianyudpport7400The typical discovery packet looks somewhat like the following:21:09:07.336617 IP 8_xterm.60409 > 239.255.0.1.7400: UDP, length 596

0x0000:  4500 0270 c2f6 4000 0111 83d6 c0a8 8007  E..p..@.........

0x0010:  efff 0001 ebf9 1ce8 025c 331e 5254 5053  .........\3.RTPS

0x0020:  0203 010f bbdd 199c 7522 b6cb 699f 74ae  ........u"..i.t.

...

0x00c0:  5800 0400 3f0c ff0f 6200 2000 1a00 0000  X...?...b.......

0x00d0:  2f74 616c 6b65 725f 6c69 7374 656e 6572  /talker_listener

0x00e0:  2f6c 6973 7465 6e65 7200 0000 2c00 2800  /listener...,.(.


key: chroma:document
string_value:
0x00f0:  2300 0000 656e 636c 6176 653d 2f74 616c  #...enclave=/tal

0x0100:  6b65 725f 6c69 7374 656e 6572 2f6c 6973  ker_listener/lis

0x0110:  7465 6e65 723b 0000 0110 c400 1400 0000  tener;..........

0x0120:  4444 533a 4175 7468 3a50 4b49 2d44 483a  DDS:Auth:PKI-DH:

0x0130:  312e 3000 0400 0000 0c00 0000 6464 732e  1.0.........dds.

...

0x0230:  1100 0000 6464 732e 7065 726d 5f63 612e  ....dds.perm_ca.

0x0240:  616c 676f 0000 0000 0d00 0000 4543 4453  algo........ECDS

0x0250:  412d 5348 4132 3536 0000 0000 0000 0000  A-SHA256........

0x0260:  0510 0800 0700 0080 0600 0080 0100 0000  ................This packet is much larger and includes information which can be used to set up encryption among ROS nodes.

As we will see shortly, this actually includes some of the security configuration files that were created when we enabled security.


