ROS机器人系统常规命令行操作
(图文设计来源于创客贴-免费非商用板块)
ROS机器人操作系统是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。ROS的前身是斯坦福人工智能实验室为了支持斯坦福智能机器人STAIR而建立的交换庭(switchyard)项目。到2008年,主要由威楼加拉吉继续该项目的研发。ROS系统是机器人操作系统。
# 0x1实验环境:
本实验环境使用的是Ubuntu16.04系统环境,当然目前ROS在Ubuntu18.04上也较为兼容。并且如果使用C语言进行ROS开发的话,可安装类似于Windows下VS的Cmake工具,便于更近一步开发。
本篇文章是作者在年前总结所写,参考课程为ROS大佬“古月居”的ROS21讲,若相关概念解释存在问题,还请各位斧正。
本文近1400字,阅读需要8分钟
# 0x2开启ROS:
king@king:~$ roscore
# 0x3启动小乌龟测试节点:
king@king:~$ rosrun turtlesim turtlesim_node
此时,我们可以看到在Ubuntu系统终端命令行的控制下,ROS为我们打开了ROS自带的小乌龟测试节点。此时在配合控制节点就可以对于小乌龟进行方向操控。
# 0x4查看各节点直接的关系:
king@king:~$ rqt_graph
# 0x5列出各系统节点:
king@king:~$ rosnode list /rosout /teleop_turtle /turtlesim
其中 /rosout 是采集所有节点里面的日志信息,用来提交给上面的仿真模拟界面来做显示。
查看指定节点的具体信息 (以 turtlesim 节点具体信息为例):
king@king:~$ rosnode info /turtlesim -------------------------------------------------------------------------------- Node [/turtlesim] Publications: * /rosout [rosgraph_msgs/Log] * /turtle1/color_sensor [turtlesim/Color] * /turtle1/pose [turtlesim/Pose] Subscriptions: (通过键盘方向来反馈给仿真模拟系统) * /turtle1/cmd_vel [geometry_msgs/Twist] Services: * /clear * /kill * /reset * /spawn * /turtle1/set_pen * /turtle1/teleport_absolute * /turtle1/teleport_relative * /turtlesim/get_loggers * /turtlesim/set_logger_level contacting node http://king:45867/ ... Pid: 2709 Connections: * topic: /rosout * to: /rosout * direction: outbound (45045 - 127.0.0.1:38664) [24] * transport: TCPROS * topic: /turtle1/cmd_vel * to: /teleop_turtle (http://king:39861/) * direction: inbound (58676 - king:50595) [31] * transport: TCPROS
通过分析,我们甚至能够看到底层运行的TCP协议,会话等。
# 0x6打印当前系统的所有话题列表:
king@king:~$ rostopic list/rosout/rosout_agg/turtle1/cmd_vel/turtle1/color_sensor/turtle1/pose
尝试通过 rostopic 命令来控制海龟实例按照要求移动
其中 rostopic 表示发布数据给某一个 topic
其中 /turtle1/cmd_vel 为话题名 (选中后直接按 Tab 会自动补全话题)
自动补全的 geometry_msgs/Twist 为发布的数据内容,消息结构
消息结构内的具体数据,例如本实例中即为 x,y,z
king@king:~$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
# 0x7终端产生器的服务器列表:
king@king:~$ rosservice list/clear/kill/reset/rosout/get_loggers/rosout/set_logger_level/spawn/teleop_turtle/get_loggers/teleop_turtle/set_logger_level/turtle1/set_pen/turtle1/teleport_absolute/turtle1/teleport_relative/turtlesim/get_loggers/turtlesim/set_logger_level
# 0x8使用/spawn产生一只新的海龟:
king@king:~$ rosservice call /spawn "x: 0.0y: 0.0theta: 0.0name: ''"
我们在模拟器中,画出模拟器的 x,y,z(具体的控制方位是这么回事)
此时就建立出了一个坐标系位于x=2 y=2的海龟。
这样我们在节点列表内在查看,出现一个名为turle2的海龟。
king@king:~$ rostopic list/rosout/rosout_agg/turle2/cmd_vel/turle2/color_sensor/turle2/pose/turtle1/cmd_vel/turtle1/color_sensor/turtle1/pose
此时我们通过第二个海龟的节点即可以对第二只海龟进行控制 (可以双人海归快打)
/turle2/cmd_vel/turle2/color_sensor/turle2/pose
# 0x9保存之前的姿势状态:
rosbag record -a -o cmd_record
-
-a指的是保存全部all,-o是将调整好的姿势状态保存成文件夹的形式,方便第二次打开处理。
开始记录姿态数据......
记录完毕后,退出自动保存
rosbag play cmd_record.bag(保存的bag目录)
- 点赞
- 收藏
- 关注作者
评论(0)