ROS入门-ROS的安装及编写简单的节点talker和listener
废话不多说,我们开始吧!!!
我使用的Ubuntu 18.04的系统,所以安装的是最新的ROS版本。
以下是ROS版本和Ubuntu系统版本的对照。
安装ROS
1 配置Ubuntu软件库
先配置Ubuntu存储库以允许 “restricted,” “universe,” and “multiverse.”
1.2设置sources.list
先将电脑设置为接受来自packages.ros.org的软件,然后执行命令:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
1.3设置密钥
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
这里如果遇到连接到密钥服务器的问题,可以尝试在前面的命令中替换hkp://pgp.mit.edu:80 或 hkp://keyserver.ubuntu.com:80。
②执行安装命令
先更新软件包:apt-get update```
123456789
桌面完整版安装:`sudo apt-get install ros-melodic-desktop-full`2. 编写程序2.1创建工作环境创建工作目录:mkdir -p catkin_ws/src2.2创建第一个软件包在工作目录下的src文件夹下创建一个名为beginner_tutorials的程序包:这个程序包依赖于std_msgs、rospy、roscpp.``` javascriptcatkin_create_pkg beginner_tutorials std_msgs rospy roscpp
3编写cpp文件
在程序包的src目录创建一个talker.cpp文件以及listener.cpp文件。
//talker.cpp
12345678910111213141516171819202122232425262728293031 |
#include "ros/ros.h"#include "std_msgs/String.h"#include <sstream>int main(int argc, char **argv){ //初始化ROS,名称重映射(唯一),必须为base name,不含/ ros::init(argc, argv, "talker"); // 为进程的节点创建一个句柄,第一个创建的NodeHandle初始化节点 ros::NodeHandle n; // 告诉主机要在chatter topic上发布一个std_msgs消息 // 主机会订阅所有chatter topic节点,参数表示发布队列的大小(先进先出) ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); ros::Rate loop_rate(10); // 自循环频率 int count = 0; while (ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "hello world " << count; msg.data = ss.str(); // 输出,用来替代prinf/cout ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg); ros::spinOnce(); // 休眠,来使发布频率为10Hz loop_rate.sleep(); ++count; } return 0;} |
//listener.cpp
123456789101112131415161718 |
#include "ros/ros.h"#include "std_msgs/String.h"// 回调函数void chatterCallback(const std_msgs::String::ConstPtr& msg){ ROS_INFO("I heard: [%s]", msg->data.c_str());} int main(int argc, char **argv){ ros::init(argc, argv, "listener"); ros::NodeHandle n; // 告诉master需要订阅chatter topic消息 ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); // 自循环 return 0;} |
2.4修改Cmakelist配置
在该文件加入各项依赖关系:
1234567 |
add_executable(talker src/talker.cpp)target_link_libraries(talker ${catkin_LIBRARIES})add_dependencies(talker beginner_tutorials_generate_messages_cpp) add_executable(listener src/listener.cpp)target_link_libraries(listener ${catkin_LIBRARIES})add_dependencies(listener beginner_tutorials_generate_messages_cpp) |
- 编译并运行程序
依次执行下面的操作:
①Cd ~/catkin_ws
②Catkin_make
(编译完成后,生成的可执行文件会放在
/home/demons/catkin_ws/devel/lib/beginner_tutorials下)
③ 执行roscore
这个命令是你在运行所有ROS程序前首先要运行的命令
④ 打开一个新的Terminal cd ~/catkin_ws并执行:source ./devel/setup.bash
(这个地方执行这句话是让ROS能够找到你想要执行的可执行文件,因为第二步执行完成后,生成的可执行文件并不在/home/demons/catkin_ws/src/beginner_tutorials/src/下,这个时候执行第五步就会报错: [rosrun]Couldn’t find executable named talker below /home//catkin_ws/src/beginner_tutorials.
每次运行程序前先执行一次这句话)
⑤rosrun beginner_tutorials talk
(命令格式是 rosrun [package_name] [node_name])
⑥ 再打开一个terminal cd ~/catkin_ws 再执行
rosrun beginner_tutorials listener
ROS入门-ROS的安装及编写简单的节点talker和listener相关推荐
- Android学习路线_入门篇(一)编写简单的APP
Android学习入门的目标就是能够编写出一个完整的APP,有可交互的界面,有基本的功能,有本地的数据库,有与后台的数据交换.在本文我们会了解到如何在AndroidStudio中新建.运行.打包一个A ...
- ROS入门跟着我就够了(二)上 ROS通信机制
由于这一章东西比较多,我分了上下两篇,下部分可以在< ROS 入门跟着我就够了>专辑中查看 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式)服务通信(请求响应模式 ...
- ROS入门笔记(十一):编写与测试简单的Service和Client (Python)
ROS入门笔记(十一):编写与测试简单的Service和Client (Python) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建自定义服务类型 3.1 定义srv文件 3.2 在 ...
- ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++) 文章目录 01 导读 02 功能包的创建 03 功能包的源代码编写 3.1 编写发布器节点(talker.cpp) 3.2 编写订阅 ...
- ROS入门笔记(九):编写ROS的第一个程序hello world(重点)
ROS入门笔记(九):编写ROS的第一个程序hello world(重点) 文章目录 1 Catkin工作空间 1.1 创建catkin工作空间 1.2 编译工作空间 1.3 设置环境变量 1.4 检 ...
- 基础篇——ROS入门:学习资料、基本介绍、安装配置、文件系统、包创建
简介 本篇文章主要介绍ROS入门基础,通过此篇文章,可以学习到安装配置.文件系统使用.ROS包创建和构建相关内容. ROS资源网站 ROS官网:http://wiki.ros.org/,可以这么说,市 ...
- ROS入门与实践--1(ROS简介与ROS的安装)
ROS入门与实践--1 1 ROS简介 1.1 什么是ROS? 1.2 ROS设计目标 1.3 ROS发行版本列表 2 ROS的安装 2.1 虚拟机及操作系统安装 2.1.1 虚拟机VMware下载 ...
- ROS 入门教程 —— 小海龟简单控制
ROS 入门教程 -- 小海龟简单控制 这里我们直接介绍命令使用方法,原理请查看我的另外几篇博客: ROS 命令行工具的使用 ROS 创建工作空间与功能包 运行并控制小海龟 由于小海龟并不是 ROS ...
- ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
ROS入门笔记(二):ROS安装与环境配置及卸载(重点) 文章目录 1 ROS安装步骤 1.1 ROS版本 1.2 确定Ubuntu版本号 1.3 安装ROS 1.3.1 Ubuntu初始环境配置 1 ...
最新文章
- python 生成器_Python生成器的用法
- Linux下tar.xz压缩解压
- Python 的类其实是一个特殊的对象
- mysql 并发_mysql如何处理高并发
- 《Go语言圣经》学习笔记 第十章 包和工具
- android 调用默认铃声后怎么改起始的默认选择位置?
- Angular 小试牛刀[1]:Getting Started
- map怎么转化dto_使用MapStruct进行Dto到实体的转换时出错
- liblfds 测试
- 大学四年,我把私藏的自学「学习网站/实用工具」都贡献出来了
- 分享一个jQuery的自动客户端本地保存插件Sisyphus.js - 帮助你自动保存用户输入内容...
- linux远程客户端软件,rdesktop(Linux下面的远程桌面客户端)
- ASCII栅格的显示
- win10系统重装之u盘装系统,u盘安装win10系统
- [案例4-8]模拟物流快递系统程序设计
- Windows Server 2008 防火墙开放 Oracle 的1521端口
- CISSP 第五章 物理和环境安全
- Securify之旅1之TOD漏洞剖析
- layui card高度不匹配文字
- phpstudy启动MySQL服务遇到的问题及解决过程
热门文章
- lua 16进制转10 10转16进制
- python阶梯图_不会你还不懂怎么用Python制图吧?师兄教你如何学会绘制漂亮的阶梯图...
- Unity摄像机跟随转动分析
- 厉害了!你的技术真的到天花板了吗?年薪50W
- java字符转转长整型_P104 将数字字符串转换成长整型整数 ★★
- php单链表检测有没有环,写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即P点...
- Web应用防火墙 (WAF) 挡不住的攻击类型
- Markdown格式文档图片设置居中
- Python编程:使用os.urandom生成Flask的秘钥SECRET_KEY
- 高斯噪声/白噪声/高斯白噪声的区别