environment:
Linux pc 5.17.1-051701-generic #202203290924-Ubuntu SMP PREEMPT Tue Mar 29 09:30:23 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu20.04
安装:Installing ROS 2 via Debian Packages — ROS 2 Documentation: Foxy documentation
教程:Tutorials — ROS 2 Documentation: Foxy documentation
安装好之后配置Setup:
source /opt/ros/foxy/setup.bash
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc //避免每次cmd输入上一行命令
DDS:The ROS_DOMAIN_ID — ROS 2 Documentation: Foxy documentation
As explained elsewhere, the default middleware that ROS 2 uses for communication is DDS. In DDS, the primary mechanism for having different logical networks share a physical network is known as the Domain ID. ROS 2 nodes on the same domain can freely discover and send messages to each other, while ROS 2 nodes on different domains cannot. All ROS 2 nodes use domain ID 0 by default. To avoid interference between different groups of computers running ROS 2 on the same network, a different domain ID should be set for each group
同一个物理上面虚拟多个逻辑domain id.
计算分配规则,链接中都有计算。
Introducing turtlesim and rqt
rqt is a GUI tool
小乌龟例程
ros2 run turtlesim turtlesim_node
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
安装rqt:
可以生成spawn 初始化其他自定义的小乌龟。在画布中。
/*************************************************************************************************/
Understanding ROS 2 nodes
节点NODE= 功能模块
通讯方式:2种
- topic 话题,message, 话题下面的聊天内容,订阅话题(subscribe)
- service,服务,请求,响应
actions (the ROS graph connections) 键盘请求动作client-->乌龟server执行
In ROS 2, a single executable (C++ program, Python program, etc.) can contain one or more nodes 一个可执行文件,可以包含多个节点(设计上,尽可能单独设计?)
ros2 run <package_name> <executable_name>
例子:
ros2 run turtlesim turtlesim_node
remap, 把自己的乌龟 node maping 到系统默认的乌龟node ,然后用键盘控制的那个节点,来控制自己的。
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
是否有办法在键盘节点做mapping?
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=luke/cmd_vel
重要命令:
ros2 node list
ros2 node info
乌龟:
$ ros2 node info /luke
/my_turtle
Subscribers:<---
/parameter_events: rcl_interfaces/msg/ParameterEvent
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Publishers:--->
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/color_sensor: turtlesim/msg/Color
/turtle1/pose: turtlesim/msg/Pose
Services:
/clear: std_srvs/srv/Empty
/kill: turtlesim/srv/Kill
/reset: std_srvs/srv/Empty
/spawn: turtlesim/srv/Spawn
/turtle1/set_pen: turtlesim/srv/SetPen
/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
/turtle1/teleport_relative: turtlesim/srv/TeleportRelative
/my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
键盘:
ros2 node info /teleop_turtle
/teleop_turtle
Subscribers:<---
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:-->
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute