[未修订]ROS学习笔记

本文章内容是我在阅读ROS初级教程(beginner level)时的随笔,内容不是连续的,用于给我自己学习进行提示之用。主要内容来源于ROS的Wiki。

ROS tutorials


Creating a ROS Package

3. Creating a catkin Package

cd ~/catkin_ws/src

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

4. Building a catkin workspace and sourcing the setup file

cd ~/catkin_ws

catkin_make

 . ~/catkin_ws/devel/setup.bash

5. package dependencies

rospack depends1 beginner_tutorials

dependencies也列在package.xml文件中。

rospack depends beginner_tutorials 将列出所有依赖,将递归的寻找间接依赖。

Building a ROS Package

2. Building Packages

确保source 相应的setup.bash。

catkin_make

build目录即为build space

devel目录即为devel space

Understanding ROS Nodes

2. Quick Overview of Graph Concepts

Nodes: A node is an executable that uses ROS to communicate with other nodes.

Messages: ROS data type used when subscribing or publishing to a topic.

Topics: Nodes can publish messages to a topic as well as subscribe to a topic to receive messages.

Master:
Name service for ROS (i.e. helps nodes find each other)

rosout: ROS equivalent of stdout/stderr

roscore: Master + rosout + parameter server

3. Nodes

 Nodes can publish or subscribe to a Topic. Nodes can also provide or use a Service.

4. Client Libraries

ROS client libraries allow nodes written in different programming languages to communicate:

rospy = python client library
roscpp = c++ client library

5. roscore

执行

roscore

6. Using rosnode

rosnode list列出正在运行的node。

rosnode infor node_name列出node_name所代表的node的信息。

7. Using rosrun

运行rosnode时可带有Remapping Argument。

rosrun turtlesim turtlesim_node __name:=my_turtle

可能有用的命令,rosnode cleanup。

rosnode ping 正在运行的node的name(remap后的名称)

Understanding ROS Topics

2. Ros topics

Using rqt_graph

rosnode rqt_graph rqt_graph


运行rostopic -h以查看所支持的命令。


rostopic echo 显示某一个topic(正在传输)的数据。

rostopic list 显示topics。对于像list一类的命令,还有自命令可使用,利用rostopic list -h来查看。

3. ROS Messages

每个topic都有一个type,type由topic的publisher发送来的message决定。

查看一个topic的type用

rostopic type topic_name

所得结果为这个topic的message

利用

rosmsg show msg_name

来查看该message的具体定义。(都可以用tab补全)


术语: advertised topic


利用rostopic pub 命令来像一个topic 以某种特定的message type发送数据,例如

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

其中 -1 表示只发送一次,--表示其后方为message的参数。参数使用了YAML command line的形式。YAML command line

重复发送使用-r参数。


利用rostopic hz 命令来显示某个topic的publish的频率。


有用的node: rqt_plot


Understanding ROS Services and Parameters

1. ROS Services

Services are another way that nodes can communicate with each other. Services allow nodes to send a request and receive a response.


2. Using rosservice

rosservice list  列出所有service

rosservice type 列出service的type

rosservice call 对一个service提出request


有用的命令 rossrv show,可用管道接在rosservice type后面


3. Using rosparam

parameter使用YAML格式。

rosparam list 列出目前有的parameter

rosparam set 设定某个parameter的值(可能需要call某些service使parameter的设定生效)

rosparam get 查看某个parameter的值,rosparam get / 查看所有parameter的值

rosparam dump 将parameter输出到文件上。

rosparam load 从文件张读回parameters。可以读回并存放在其他“名称空间”中。


Using rqt_console and roslaunch

2. Using rqt_console and rqt_logger_level

Using roslaunch

写一个xml文件作为launch的输入。内有<group><node>和<launch>等xml element。


Using rosed to edit files in ROS

1. Using rosed

rosed [pkg name] [file name] 来修改一个pkg内的文件。

设定~/.bashrc内export EDITOR的值,以确定默认使用的编辑器。


Creating a ROS msg and srv

1. Introduction to msg and srv

    msg: msg files are simple text files that describe the fields of a ROS message. They are used to generate source code for messages in different languages.

    srv: an srv file describes a service. It is composed of two parts: a request and a response.

msg files are stored in the msg directory of a package, and srv files are stored in the srv directory.

msgs are just simple text files with a field type and field name per line. The field types you can use are:

    int8, int16, int32, int64 (plus uint*)
    float32, float64
    string
    time, duration
    other msg files
    variable-length array[] and fixed-length array[C]

There is also a special type in ROS: Header, the header contains a timestamp and coordinate frame information that are commonly used in ROS. You will frequently see the first line in a msg file have Header header.


srv files are just like msg files, except they contain two parts: a request and a response. The two parts are separated by a '---' line.


2. Using msg

在pkg的文件夹下创建msg文件夹,在其中创建msg的描述文件。创建后即可用rosmsg show来显示这个新的msg的定义。

在pkg的package.xml文件中增加对message_generation的编译依赖,和对message_runtime的运行依赖。

修改pkg的CMakeLists.txt,调整find_package,catkin_package,add_message_files和generate_message的配置。


3. Using srv

在pkg的文件夹下创建srv文件夹,在其中创建srv的描述文件。创建后即可用rossrv show来显示这个新的srv的定义。

在pkg的package.xml文件中增加对message_generation的编译依赖,和对message_runtime的运行依赖。

修改pkg的CMakeLists.txt,调整find_package,catkin_package,add_message_files和generate_message的配置。


有用的网址:

Message Description Language

Building messages, services or actions


Writing a Simple Publisher and Subscriber (C++)

#include "ros/ros.h"
#include "std_msgs/String.h"

ros::init(argc, argv, name_of_node);
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
while (ros::ok())
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();

ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);


修改CMakeLists.txt文件。


有用的网址:

CMakeLists


Writing a Simple Publisher and Subscriber (Python)

The python version of the above code is more simpler.

The difference is that there is no "handler" but a rospy object that is imported throuh

import rospy

And in the talker code, there is no direct invocation of spin() function.


Remember to chmod the python scripts.

Examining the Simple Publisher and Subscriber

启动新的terminal时记得source相应的setup.bash。


Writing a Simple Service and Client (C++)

首先必须已经根据srv和msg的描述,生成了相应的C++头文件。在源文件中include这些生成的头文件。

service启动后一直处于运行状态。client启动后请求server进行服务,一旦server响应了请求,client既退出。


Writing a Simple Service and Client (Python)

Python形式的server和client也使用ros自动生的python代码,这些自动生成的python代码位于workspace的devel/lib/python2.7/dist-packages内。自动生成的代码主要用于定义service的“类型”。


对于client的代码,并不再要求进行init_node(),而是使用rospy.wait_for_service()。通过rospy.ServiceProxy()获得service的一个句柄(也就是一个函数接口)来向server进行请求。在client的代码中应该是用try,except进行异常的捕捉。


注意修改python脚本的可执行权限。


Recording and playing back data

rosbag record -a 记录所有topic的信息。记录将持续进行,直到退出。记录将保存在一个bagfile中。 -O 指定输出文件,并以topic名称作为后续参数,来记录部分topic的信息。

rosbag info [record_file_name] 显示一个bagfile的基本信息。

rosbag play [record_file_name] 回放一个bagfile,此时可以代替原来用于输入的node,向指定的topic输入信息。回放时可以选择启示的等待时间(-d),可以指定开始回放的起始时间(-s),可以选择回放的速度(-r)。


Getting started with roswtf

其实我很好奇,roswtf中的wtf是不是What the f*ck 的意思。。。

使用roswtf以查看系统的运行状况,用于调试系统是否有问题或者故障。


Where next?

初级教程在最后给出了几个比较重要的内容

(1)机器人simulator。可以在使用真实硬件之前在simulator上进行测试。

(2)仿真环境,例如RViz。

(3)TF。是用于对坐标变换进行建模的工具。

(4)actionlib,用于对可抢占任务设计的库。

(5)navigation,一个2D的建地图,路径规划的库。

(6)MoveIt,一个对机械臂进行建模的库。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值