ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版)
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo
1. 前言 :
Hello world 程序,在我们编程界,代表学习某种语言编写的第一个程序。对于 ROS 机器人 *** 作系统来说握乱,这个 Hello World 程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)。
2. 准备工作 :
C++ 的程序都会存放在每个程序包的 src 文件夹里。 Python 不同,Python 程序都存放在 scripts 文件夹中, 反正意思都是 源文件 包。
Step 1 . 所以,先在 beginner_tutorials 软件包中创建一个 scripts 文件夹:
$ roscd beginner_tutorials$ mkdir scripts$ cd scripts123
3. 编写消息发布器节点程序:
如果你懒得去写的话,你可以使用 wget 命令, 在 github 上获取一个 talker.py 源代码。如何获取呢 ?
Step 2 . 开一个终端,输入下面的命令就可以获取 talker.py :
$ wget
-devel/rospy_tutorials/001_talker_listener/talker.py$ ls
talker.py123
但是我建议你亲自动手,写一写:手动创建一个 talker.py 文件在 /scripys 文件夹里:
$ roscd beginner_tutorials/scripts$ gedit talker.py12
将这上面链接里的代码手动输入到 talker.py 文件中。(我就不将代码贴上来了)
下面我来讲解一下代码:
Step 3 . 最后一步,给这个 talker.py 文件加上可执行权限:
$ chmod +x talker.py1
这样,一个发布器就编写完了。我们不要急着去运行它,现在我们编写一个订阅器,来接收这个发布器发布的话题:
4. 编写消息订阅器节点程序:
Step 4 . 和发布器一样,我们使用wget命令获取订阅器的源代码 listener.py:
$ roscd beginner_tutorials/scripts/$ wget
ials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py$ ls
listener.py talker.py1234
但是,我还是雀皮前建议你自己动手写一下。
好吧,下面我们开始讲解 listener.py 里面的代码,这个listener.py程序的代码简单:
Step 5 . 最后不要忘了给这个listener.py 加可执行权限:
$ chmod +x listener.py1
5. 运行 :
对于python 来说,我们不需要使用 catkin_make 命令对 ~/catkin_ws 工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限)。
OK,发布器 和 订阅器 都创建完了。下面我们运行它们,看看效果:
Step 6 . 新打开一个终端,先执行 roscore 命令:
$ roscore1
Step 7 . 新打开一个终端,启动 发布器 :
$ rosrun beginner_tutorials talker.py 1
Step 8 . 新打开一个终端,启动 订阅器 :
$ rosrun beginner_tutorials listener.py 1
运行效果:
Step 9 . 我们来使用 rostopic list ,看看当前的话题有哪些:
$ rostopic list
/chatter
/rosout
/rosout_agg1234
其中 /chatter 就是我们在发布器里面发布的 ROS话题。
6. 扩展,编写一个启动脚本文件 :
还记得上一顷清节,我们讲的ROS的启动脚本文件吧,下面我们来编写一个launch文件,来将 talker.py 和listener.py 文件的启动工作交个这个launch文件来做:
Step 10 . 来到 beginner_tutorials程序包的 /launch 路径下,新建一个 hello_world_topic.launch 文件:
$ roscd beginner_tutorials/launch$ gedit hello_world_topic.launch #使用你自己喜欢的文本编辑器12
Step 11 . 输入下面的代码:
<launch>
<node pkg="beginner_tutorials" name="talker" type="talker.py" />
<node pkg="beginner_tutorials" name="listener" type="listener.py" /></launch>1234
Step 12 . 现在,将之前打开的终端都关闭,我们启动这个脚本: (开一个终端 : Ctrl+Alt+T)
$ roslaunch beginner_tutorials hello_world_topic.launch1
运行结果:
上面截图的输出显示: talker.py 和 listener.py 脚本运行成功。但是并没有出现刷屏的现象。这是为什么? 为了证明这个脚本程序真的成功的运行了,我们来试一试:
Step 13 . 重新开一个终端,输入下面的命令:
$ rosrun list$ rostopic list$ rostopic echo /chatter123
Step 14 . 现在 Ctrl+C 结束监听 /chatter 话题。使用 rqt_graph 对当前启动的节点可视化:
$ rqt_graph1
这些足以说明,hello_world_topic.launch 启动脚本文件,启动成功。
总结: 发布器 和 订阅器 是很简单的, 就是简单的发布一个 自定义的话题。
我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic) 和 服务(rosservice)
所以,接下来,我们会讲:使用ROS服务来完成ROS版 Hello World 程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便 ROS 服务版的 Hello World 程序的编写。
所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。
1 先建立工作空间~/catkin_ws2 在工作空间~/catkin_ws下创建包pkg目录second
好处是通过创建包自动生成package.xml和CMakeLists.txt
3 在second目录下创建hello.cpp源代码文件
~~~~伍启~~~~~~~~~~~~~~~~~~~~~~~
eagle:~/catkin_ws$ cd src
eagle:~/catkin_ws/src$ tree second/
second/
├── CMakeLists.txt
├── package.xml
└── src
└── hello.cpp
1 directory, 3 files
4 编写hello.cpp文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <ros/ros.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "helloros1234444")
ros::NodeHandle n
ROS_INFO("Hello, ROS!")
ros::spinOnce()
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 修改编译册唤makefile文件 CMakeLists.txt
~~~~~~~~~~~~~~~~~~
cmake_minimum_required(VERSION 2.8.3)
project(simple_examples)
find_package(catkin REQUIRED COMPONENTS roscpp)
catkin_package()
include_directories(include $catkin_INCLUDE_DIRS)
add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})
~~~~~~~~~~~~~~~~~~
6 回到~/catkin_ws编译程序
liao@liao-eagle:~/catkin_ws$ catkin_make
Base path: /home/liao/catkin_ws
Source space: /home/liao/catkin_ws/src
Build space: /home/liao/catkin_ws/build
Devel space: /home/liao/catkin_ws/devel
Install space: /home/liao/catkin_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/liao/catkin_ws/build"
####
####
#### Running command: "make -j2 -l2" in "/home/liao/catkin_ws/build"
####
Scanning dependencies of target hello
[100%] Building CXX object second/CMakeFiles/hello.dir/src/hello.cpp.o
Linking CXX executable /home/liao/catkin_ws/devel/lib/second/hello
[100%] Built target hello
liao@liao-eagle:~/catkin_ws$
7 测腔姿如试c++程序
7.1一个终端里运行roscore
7.2 另外一个终端里运行 rosrun second hello
liao@liao-eagle:~/catkin_ws$ rosrun second hello
[ INFO] [1442208641.400826666]: Hello, ROS!
liao@liao-eagle:~/catkin_ws$ rospack find second
/home/liao/catkin_ws/src/second
liao@liao-eagle:~/catkin_ws$
望采纳
使用ros_qtc_plugin插件新建项目使用插件的“新建项目”中的“Import ROS
Workspace”选项不仅可以新建工作空间还可以导入现有的工作空间,而“新建文件”中的“ROS”下面的“Package”、“Basic
Node”等选项可以创建package和和节点、launch文件、urdf文件等
现在我们来创建一个新的catkin工作空间,并且在里面创建一个package
1、新建项目
“文件”——“新建文件或猛纳项目”,选择”Import ROS Workspace”——“choose”如上图
然后填写catkin工作空间的名字和位置,如下图
我这里的Name和catkin工作空间文件夹名字相同(也可以不同)名为catkin_new,然后选择“浏览”——“创建文件夹”,创建一个名为catkin_new的文件夹,如下图,按回车,再选择“打开”
出现一个对话框,询问新建的工作空间未被初始化,是否执行初始化,我们选择“yes”
这里相当于执行一次catkin_init_workspace命令,使工作空间初始化
然后点击下方的“Generate Project File”,再点击“下一步”
在“项目管理”步骤可以配置版本控制系统,我们选择“完成”,如下图兆知空
建好的工作空间catkin_new是空的,如下图
2、创建package
接下来我们在这个工作空间创建一个新的package
在catkin_new下面的src上右键单击,选择“添加新文件”,如下图
然后选择“ROS”——“package”——“choose”
填写package的名字,如test1
填写作者(Authors)和维护者(Maintainers),如果你的Qt环境部没有配置中文支族瞎持请不要用中文,否则无法新建package,或者新建的package里面的package.xml会是空文件
在“Dependencies”下的“Catkin”一栏填写依赖,通常用C++写节点需要添加对roscpp的依赖
如下图
点击“完成”
3、添加新的节点
目前这个package还是空的,没有任何节点
我们在test1的src文件夹上右键单击,选择“添加新文件”
选择“ROS”——“Basic Node”——“choose”,创建一个节点,也就是新建一个.cpp文件
节点名称写为“node1”,则生成一个名为node1.cpp的源文件
用ROS模板新建的node1.cpp的源文件如下图,是自动生成的一个Hello World程序
4、编译节点
为了让它编译成可执行文件我们还需要编辑test1的makefile,如下图
为test1的CMakeLists.txt加上下面几行,意思是把node1.cpp编译成名为node1的节点
add_executable(node1 src/node1.cpp)
target_link_libraries(node1
${catkin_LIBRARIES}
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)