Robot Ignite是一个线上ROS编程教学网站。其网站环境如下:
主要分为: 文字教程区
IDE
仿真环境
终端
四个板块
文字教程区
采用jupyter notebook作为编辑器, 也就是说是可以自己加以批注修改的。
IDE
是编写程序的区域
仿真环境
则是Gazebo的线上版
终端
emmm就是终端
让小车动起来,在终端输入如下
roslaunch publisher_example move.launch
但在用Ctrl+C
结束进程后,会发现小车依然在运动,这是因为ROS的通讯机制是消息发送publisher-消息接收subscriber。在使用上述命令后,创建了一个move消息发布者,小车订阅该消息,然后就一直按照该消息指令运动。 结束上述进程的操作其实只是结束了创建过程,小车依然会监听之前发布的最后一条消息,所以小车依然会向前运动。要想让小车停下了则需要创建另一个消息发布者,发布停止指令使得小车停下。
roslaunch publisher_example stop.launch
如果同时发布两条指令,会发现小车一停一走。这是因为小车会接收两个消息发布者的消息。
一个正常的ros项目包含有如下文件
+ launch folder: Contains launch files启动文件
+ src folder: Source files (cpp, python)源文件
+ CMakeLists.txt: List of cmake rules for compilation 编译配置
+ package.xml: Package information and dependencies包信息及其依赖
<launch>
<node pkg="turtlebot_teleop" type="turtlebot_teleop_key.py" name="turtlebot_teleop_keyboard" output="screen">
<param name="scale_linear" value="0.5" type="double"/>
<param name="scale_angular" value="1.5" type="double"/>
<remap from="turtlebot_teleop_keyboard/cmd_vel" to="/cmd_vel"/>
node>
launch>
launch文件采用xml文件格式组织内容。根节点为launch, 在ros中每个程序称之为节点node.
节点标签中有一些关键字:
catkin_create_pkg <package_name> <package_dependecies>
在工作空间中执行上述命令,从而初始化一个package .
是package名字,
是相关依赖。
rospack
查看管理已安装包。 rospack list
可以查看所有已安装包 rospack list | grep my_package
则是使用管道定向查找指定名称的包#! /usr/bin/env python
import rospy
rospy.init_node('ObiWan')
print("help me Obi-Wan Kenobi,you're my only hope")
第一行不可缺少,用于指定编译器
该脚本启动了一个节点Obiwan,并输出一行文字
<launch>
<node pkg="my_package" type="simple.py" name="ObiWan" output="screen">
node>
launch>
节点的生命周期是从节点被创建到其结束。
如果要长期维持节点运行,可以使用rospy.is_shutdown()
来进行持续化,这样只有当终端使用ctrl+c
后节点才会关闭。
指定包编译
catkin_make --only-pkg-with-deps <package_name>