预览
roscore:在运行ros前必须打开
rospy:ros中的python库
roscpp:ros中c++库
rosnode list:所有正在运行的节点
rosnode info /节点名 :节点的信息
rosrun 包名 节点名 :直接运行具体节点
rosnode ping 节点名:查看节点是否正在运行
1. 先决条件
$ sudo apt-get install ros-<distro>-ros-tutorials
2.图形概念概述
node:节点是使用ROS与其他节点联系的可执行程序
messages:向topic话题发送数据时,主要以message为载体
topics:节点可以向话题发布消息,同时也可以订阅话题以接受消息
master:ROS的名称服务,即帮助节点找到彼此
rosout
roscore
3.NODES 节点
一个节点实际上只不过是一个ROS包中的可执行文件。ROS节点使用ROS客户端库与其他节点通信。节点可以发布或订阅主题。节点还可以提供或使用服务。
4.客户端库
ROS客户端库允许用不同编程语言编写的节点通信:
rospy=python client library
roscpp=c++ client library
5.roscore
在使用ros前,务必提前打开roscore
6.使用rosnode
打开一个新的终端,让我们用rosnode命令来查看一下当roscore运行时做了什么。请牢记,通过打开一个新的终端或者仅仅最小化之前的终端来保持之前的终端始终是打开的状态,换言之,就是不要把之前的终端窗口关闭了。
注意!:当打开一个新的终端时,你的环境被重新配置,你的 ~/.bashrc文件被source。如果在运行诸如rosnode命令时你遇到了问题,那么你或许需要向你的 ~/.bashrc文件中添加一些环境配置文件或者手动在source一下他们。
rosnode展示了目前正在运行的ROS节点的信息。rosnode list命令展示了这些活跃的节点
$ rosnode list
这意味着,目前只有一个节点正在运行:rosout。它总是在收集和记录节点的调试输出。
rosnode info 命令返回一个具体节点的有关信息。
$ rosnode info /rosout
7.rosrun
rosrun允许你使用包的名字直接运行包中的节点(不必知晓包的路径)
用法:
$ rosrun [package_name] [node_name]
举个例子,让我们来运行一下小龟游戏包中的tuitlesim_node。
在一个新的终端中:
$ rosrun turtlesim turtlesim_node
将会出现如上图所示的tuitlesim窗口。
此处需要注意,乌龟的样式可能不同,没关系,大家的都不一样。。每次打开得也不一样。。这是属于程序员的浪漫。。
同时,在又一个新的终端中输入:
$ rosnode list
ROS一个强大的功能是可以使用命令行重新分配名称。
关闭turtlesim窗口以暂停该节点(或者回到 rosrun turtlesim终端中使用 ctrl+c),下面让我重新运行该节点,不过这一次用重映射参数来改变节点的名字。
$ rosrun turtlesim turtlesim_node __name:=my_turtle //注意,name前为两条下划线,如果达成一条,则会出现改名失败的情况!!亲测
运行完后,运行rosnode list:
$ rosnode list
正常情况下,会看到
/my_turtle
/rosout
但是我运行之后出现了如上图所示情况。
先给出wiki官方的一个note:
注意:如果您仍然在列表中看到/turtlesim,这可能意味着您使用ctrl-c而不是关闭窗口来停止终端中的节点,或者您没有如网络设置-单台机器配置中所述定义的
r
o
s
h
o
s
t
n
a
m
e
环
境
变
量
。
您
可
以
尝
试
使
用
ros_hostname环境变量。您可以尝试使用
roshostname环境变量。您可以尝试使用rosnode cleanup清理rosnode列表。
在实际操作中我尝试了以上操作均不可,发来发现是命令行中少了一个下划线。。已在上面的注释中给出。
我们看到了新的 /my_turtle节点。让我们使用另一个rosnode命令,ping,来测试它是否启动
$ rosnode ping my_turtle