ROS 最为一款广为人知的机器人作业系统,当然也能让很多种程序语言来做使用。 尽管是不同的程序语言,但是他们都是需要建立 Topic 、 Service 、 param 等等 来让 ROS 可以进行通讯, 而此时便是需要 ROS Client Library 的时候了,他便是 ROS 提供给我们的 API ,可以让我们轻松的跨语言去沟通。
这边是目前 ROS 支援的 Client Library
Client Library | 介绍 |
---|---|
roscpp | ROS的C++库,是目前最广泛应用的ROS客户端库,执行速度快 |
rospy | ROS的Python库,开发速度快,通常用在对运行时间没有太大要求的场合,例如配置、初始化等操作 |
roslisp | ROS的LISP库 |
roscs | Mono/.NET.库,可用任何Mono/.NET语言,包括C#,Iron Python, Iron Ruby等 |
roseus | EusLisp 语言库 |
rosgo | ROS Go 语言库 |
rosjava | ROS Java 语言库 |
rosnodejs | Javascript 客户端库 |
RobotOS.jl | Julia 语言库 |
rosR | R 语言库 |
rosruby | ruby 语言库 |
ROS-MATLAB Interface | 跟 MATLAB 的 ROS 工具包 进行通讯用 |
ROS-Simulink Interface | 跟 Simulink 的 ROS 节点进行通讯用 |
目前最常被用到的还是只有 ROS CPP 、 ROS Py 所以後面介绍还是以这两个为主。
Roscpp 他被放在 /opt/ros/kinetic 下面, 用 C++ 来达到跟 ROS 通讯的目的,在 ROS 中 , C++ 的程序码是通过 catkin 来进行编译的,这在前面有提到,忘记的话可以回去翻一下,所以我们在写的时候,只要直接 include roscpp 等等的 ROS libraries,我们就可以在 ROS 中进行使用了。
起手式,当我们要去使用 ROS C++ 时,需要把它 include 进来
#include <ros/ros.h>
roscpp 中,他主要的部份包含以下几点:
详细的部分可以参考 http://docs.ros.org/api/roscpp/html/index.html
这边展示一下怎麽从开启到关闭
#include<ros/ros.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "your_node_name");
ros::NodeHandle nh;
ros::shutdown()
}
首先先引入套件,然後宣告 main 函式,接下来初始化我们的 node 节点,再来我们帮我们的 node 加一个手把 NodeHandle ,让我们可以方便地去使用他,接下来我们关闭我们的节点 。
接下来我们来看 NodeHandle 有哪一些功能
这个便是创建一个新的 publisher,第一个参数是话题名称,第二个是资讯最大长度,如果发送的资ㄒ讯大於可被接受的资讯,就会被退回,第三个参数则是来看是否把这个参数锁住。
这是用来创建一个新的 Subscriber ,,第一个参数是订阅的话题名称,第二个是资讯最大长度,但是如果收到的资讯还没来的及处理,旧的资讯就会被丢掉,第三个参数则是 回传函数的指标,指标指向一个函式来处理接收到的讯息。
这是用来创建一个新的 ServiceServer , 第一个参数是服务的名称,第二个是用来设定说服务是否要持续的连接,这样我们後面在传递时会比较快一点
从参数服务器上拿到某个 key 的 value
给 key 对应的 val 赋值
以上便是 NodeHandle 的一些使用方式,从中可以看到 NodeHandle 是很重要的,毕竟沟通类的方式基本上都是靠他完成的。
ros::master 底下有许多的功能可以让我们进行使用。
函式 | 功能 |
---|---|
bool check() | 检查 master 是否启动 |
const string & getHost | 回传 master 所属的 hostname |
bool getNodes (V_string &nodes) | 回传 master 中已知的 node 名称 |
boolgetTopics (V_TopicInfo &topics) | 回传所有正在发讯息的 topic 名单 |
bool getURI () | 返回到 master 的 URL 位址 |
uint32_t getPort () | 回传在正使用中的 port |
void getTopics (V_TopicInfo &topics) | 拿到这个 node 发布的 topic |
以上就是常用到的 master 参数
今天介绍了 ROS Client Library 与 Roscpp ~ 在明天我们将继续摸索 Roscpp
#Arm Arm Platforms
前言 UI 跟 UX 是两个完全不一样的东西,以工程师的角度简单来说, UI 是美术视觉看得到的, ...
Progressive Web App 跨平台安装 Progressive Web App 本身就具...
回圈有两种语法可以使用,分别是while与for回圈,今天这篇会先来讲到while回圈的部分。 基本...
令我意外的是…昨天的面试考古题破解区(1)人气满高的也,哈哈哈! 事不疑迟,我们今天马上来看看面试...
今天会轻松一点,介绍coroutine的优势 coroutine有点难决定从哪里开始讲,最後决定从a...