ros2
action
当需要实时反馈指令效果时,ROS需要应用级的通信机制--动作(action)
action也并不是一个全新的机制,而是由底层的三个话题和服务组成:
- 一个任务目标(Goal,服务)
- 一个执行结果(Result,服务)
- 周期数据反馈(Feedback,话题)
action是可抢占式的,由于需要执行一段时间,比如执行过程中你不想跑了,那可以随时发送取消指令,动作终止,如果执行过程中发送一个新的action目标,则会直接中断上一个目标开始执行最新的任务目标。
action是一个客户端/服务器的通信模型,客户端发送一个任务目标,服务器端根据收到的目标执行并周期反馈状态,执行完成后反馈一个执行结果。
利用按键 G|B|V|C|D|E|R|T 都是围绕“F”的,可以向客户端发送action的任务目标,海龟仿真器后台运行的服务器端接收到之后就会开始执行,执行完成后反馈给客户端类似下边的结果:
action是抢占式的,后一个action的执行直接中断了前一个action的执行。
查看节点信息
海龟仿真器节点有哪些action:
ros2 node info /turtlesim
可以看到所有仿真器中的订阅者、发布者、服务、动作服务器和客户端。
查看action列表
ros2 action list
查看action的数据类型
ros2 action list -t
查看action的信息
ros2 action info /turtle1/rotate_absolute
可以看到提供该action的服务器和客户端的数量
查看action数据类型
查看action更详细的数据结构
ros2 interface show turtlesim/action/RotateAbsolute.action
- 第一段是描述客户端发送的请求目标
- 第二段描述的是的反馈结果
- 第三段描述的是action执行过程中的周期反馈
命令行发送action目标
发送goal的格式
ros2 action send_goal <action_name> <action_type> <values>
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
利用feedback参数 终端会不断周期刷新反馈信息.
##rqt_console 运行ros2节点时,节点日志信息会在终端中显示出来. ros2还提供了一个专门用于管理日志信息的可视化工具 rqt_console
ros2 run rqt_console rqt_console
日志的基本由高到低:
- Fatal:致命级,描述系统为了自我保护即将终止的消息
- Error:错误级,描述非致命但是会阻碍程序运行的消息
- Warn:警告级,描述不损坏功能运行但是预期之外的行为的消息
- Info:信息级,描述系统正常运行时事件和状态消息
- Debug:调试级,描述系统一步一步运行的详细消息
ROS2中默认开启的日志级别是Info,会自动显示info级别以上的所有日志,包括Info、Warn、Error、Fatal。
可以修改允许发布的日志级别
比如只想显示Warn级别以上:
ros2 run turtlesim turtlesim_node --ros-args --log-level WARN
launch
launch启动文件,可以通过一个类似脚本的文件,一起启动多个节点.
from launch import LaunchDescription
from launch_ros.actions import Node # 引用模块
def generate_launch_description(): # 在LaunchDescription中描述三个节点的启动
return LaunchDescription([
Node(
package='turtlesim',
namespace='turtlesim1',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
namespace='turtlesim2',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
executable='mimic',
name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
])
#mimic节点通过订阅turtle1的位置,转换成对turtle2的速度指令发布出去,最后应该可以达到让turtle2模仿turtle1完成同样的运动。
启动launch文件
ros2 launch <package_name> <launch_file_name>
ros2 launch turtlesim_mimic_launch.py
可以利用rqt_graph观测
但是mac下的工具有bug,没有信号连接线
launch中在ros2_eloquent
版本中有改动:
namespace --> node_namespace
executable --> node_executable
ros2bag
ros2 bag是一个命令行工具,可以实现对ROS2系统中话题数据的录制和回放,选定的数据会被打包放到一个数据库文件中,未来使用该工具即可按照时间轴回放所有话题数据。
确认是否安装:
sudo apt-get install ros-<distro>-ros2bag ros-<distro>-rosbag2*
ros2 bag录制话题数据
ros2 bag录制话题数据的命令是:
ros2 bag recode <topic_name>
数据会保存在当前终端所在的路径下,最好先cd到创建的目录下,再运行record
录制数据的日志提示
利用ctrl+C
停止录制,已经录制好的数据会保存在rosbag2_year_month_day-hour_minute_second
命名的文件中。
录制多个话题
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
-o 参数是用来设置数据库文件名的,此时文件名叫subset.多个话题名通过空格隔开.
可以使用-a参数来录制所有话题的数据.
查看数据库文件
可以使用命令查看数据库文件的信息:
ros2 nag info <bag_info_name>
ros2 bag回放数据
回放数据的命令:
ros2 bag play subset