ROS入门

半天入门ROS,总体感觉比较好理解,python写不用编译超级爽,学完ros去学电控去了。

ros2比ros1好用,所以最终是学ros2.

ros1

安装

添加源

> sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

添加密匙

> sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

安装ros

> sudo apt update
> sudo apt install ros-melodic-desktop-full

初始化rosdep

> sudo rosdep init
> rosdep update

问题:

No module named 'rosdep2'

解决:

sudo update-alternatives --config python

手动切换python2

设置环境

> echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
> source ~/.bashrc

安装rosinstall

> sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

知识点

话题、服务。

话题有发布者和订阅者,发布者只管发布,订阅者只管开门让数据进来。发布的数据叫话题。

服务就是常用的

指令

  1. rosrun 后面接包名 + 节点名,运行节点
  2. roscore启动master
  3. rosnode list显示所有节点 rosnode info 节点名
  4. rqt_graph显示节点关系图
  5. rostopic list同理
  6. rostopic pub 话题名 内容 加上-r 可以指定每秒循环发多少次

工作空间

创建工作空间

mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace

编译空间

cd catkin_ws
catkin_make

设置环境变量

source devel/setup.sh

检查环境变量

echo $ROS_PACKAGE_PATH

创建功能包(必须要)

cd src
catkin_create test_pkg roscpp rospy std_msgs

编译功能包

cd catkin_ws
catkin_make
source devel/setup.bash

python下问题

  1. 好像只能python2
  2. 必须在文件头加上#!/usr/bin/env python2
  3. 我本来加的是#!/usr/bin/env python 结果报错no module named rospkg,感觉是python版本问题,遂换成python2解决。
  4. python写完之后不需要编译,直接rosrun即可。
  5. 记得给可执行权限。

coding

publisher

#!/usr/bin/env python2
# license removed for brevity
import rospy
from std_msgs.msg import String def talker():
pub = rospy.Publisher('chatter', String, queue_size=10) # 发布话题名为chatter的topic,类型为String,队列长10
rospy.init_node('talker', anonymous=True) # 初始化节点,节点名为talker
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()# 每隔100ms 一次 if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass

listener

#!/usr/bin/env python2
import rospy
from std_msgs.msg import String def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data) def listener(): rospy.init_node('listener', anonymous=True) # 节点初始化,后面表示节点匿名化,可以保证节点名的唯一性,用于接收的节点一般不需要暴露节点名吧? rospy.Subscriber("chatter", String, callback) # 订阅chatter话题,这里只需要指定话题,因为多个不同的节点可能发布同一话题 rospy.spin()# 循环调callback直到结束 if __name__ == '__main__':
listener()

ros2

由于ros1对python3的支持非常差,ros2对python3的支持非常好,所以要花一定时间学习ros2.

安装

本来准备装最新的ROS 2 Dashing Diademata,中间报错也不会解决,网上相关资料相当少,遂放弃,根据古月居的教程安装了Crystal Clemmys。

  1. 设置UTF-8编码
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
  1. 更新软件源
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl http://repo.ros2.org/repos.key | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
  1. 安装ros2(选一个速度比较快的源哦)
export ROS_DISTRO=crystal # or bouncy or ardent
sudo apt update
  • 桌面版安装(包含ROS, RViz, demos, tutorials)
sudo apt install ros-$ROS_DISTRO-desktop
  • 基础版安装(包含通讯库、消息包、命令行工具,没有GUI工具)
sudo apt install ros-$ROS_DISTRO-ros-base
  1. 安装自动补全工具

ros2的命令行使用argcomplete工具进行补全,所以需要安装该工具:

sudo apt install python3-argcomplete
  1. 设置环境变量

和ROS 1一样,为了让系统找到ROS命令,安装完成后需要将以下语句添加到.bashrc中:

source /opt/ros/crystal/setup.bash
  1. 安装ROS 1

目前ROS 2的功能还不是很全面,很多功能包需要依赖ROS 1,所以还是需要安装ROS 1的,安装方法可以参考ROS 1 wiki教程。

ROS 2和ROS 1之间通过ros-bridge通信,需要安装:

sudo apt updates
sudo apt install ros-$ROS_DISTRO-ros1-bridge ros-$ROS_DISTRO-turtlebot2-*

创建工作空间

mkdir -p ~/ros2_ws
cd ~/ros2_ws

编译运行节点

cd src
ros2 pkg create demo --denpendencies rclpy rclcpp std_msgs
mkdir scripts
touch talker.py

编写程序

# 引用python接口
import numpy as np
import rclpy
from rclpy.node import Node
from std_msgs.msg import String class Talker(Node): def __init__(self):
super().__init__('talker')
self.i = 0 # 创建一个Publisher,发布名为chatter的topic,消息类型为String
self.pub = self.create_publisher(String, 'chatter')
self.img = []
# 设置定时器,周期调用定时器回调函数timer_callback
timer_period = 1.0
self.tmr = self.create_timer(timer_period, self.timer_callback) def timer_callback(self):
# 创建String类型的消息
msg = String()
msg.data = 'Hello World: {0}'.format(self.i)
self.i += 1
self.get_logger().info('Publishing: "{0}"'.format(msg.data))
self.img = np.array(self.img)
# 发布消息
self.pub.publish(msg) def main(args=None):
# ROS节点初始化
rclpy.init(args=args)
# 创建节点及发布器
node = Talker()
# 循环
rclpy.spin(node) # 销毁节点,退出程序
node.destroy_node()
rclpy.shutdown() if __name__ == '__main__':
main()
python talker.py

查看node以及topic

ros2 node talker info
ros2 topic list

[ros] ros入门记录的更多相关文章

  1. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  2. 续关于C#的微信开发的入门记录一

    前几天写了一篇博客<关于C#的微信开发的入门记录一>,原文地址:http://www.cnblogs.com/zhankui/p/4515905.html,现在继续完善: 目前很多小伙伴都 ...

  3. ES 入门记录之 match和term查询的区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  4. Linux 入门记录:二十、Linux 包管理工具 YUM

    一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...

  5. (一)ROS系统入门 Getting Started with ROS 以Kinetic为主更新 附课件PPT

    ROS机器人程序设计(原书第2版)补充资料 教案1 ROS Kinetic系统入门 ROS Kinetic在Ubuntu 16.04.01 安装可参考:http://blog.csdn.net/zha ...

  6. ROS 命令学习记录

    #catkin_init_workspace //just get CMakeList.txt #catkin_make  //增加了信文件夹 build和devel #Catkin_creat_pk ...

  7. 机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】

    转自:http://blog.csdn.net/bobsweetie/article/details/43638761 Ubuntu14.04安装ROS Indigo 一.安装ROS 1.1配置Ubu ...

  8. ROS nodelet 理解记录

    发现网上许多的例子都是基于官网的例子,还需要做进一步的说明. 1. NODELET_DEBUG 是无法打印的信息的,需要使用NODELET_INFO NODELET_DEBUG("Addin ...

  9. cmake语法入门记录

    刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young to si ...

随机推荐

  1. qt对plot柱状图颜色设置

      当使用qwtplotbarchart来使用柱状图时.可以通过下面代码来设置柱状图的颜色 QwtPlotBarChart  *barChart = new QwtPlotBarChart(" ...

  2. C语言几种常用的排序算法

    /* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解 ...

  3. thinkphp+webuploader实现大文件分片上传

    大文件分片上传,简单来说就是把大文件切分为小文件,然后再一个一个的上传,到最后由这些小文件再合并成原来的文件 webuploader下载地址及其文档:http://fex.baidu.com/webu ...

  4. 从零开始学MySQL(三)

    经过上两节的洗礼,我们能够连接上服务器,并成功地进入与mysql交互的会话中了.那么现在就可以发起SQL语句,让服务器来执行它了!这听起来很酷吧?接下来,我们开始学习MySQL的相关知识. 本文概览: ...

  5. python-ssh-远程服务器+远程docker执行命令

    在python语言中实现远程服务器执行命令+远程dcoker执行命令 def ssh_exec_command(ip, username, password, cmd=None): "&qu ...

  6. matlab读取内容为二进制的TXT文件

    本方法同样适合读取十六进制和二进制以外的其他进制文件,txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言)读取二进制txt文件:假如 ...

  7. javase中的super、this和protected关键字

    关键字 this 记住一句话:this是指向对象本身的一个指针. 注意: this只能用于方法体内,且只能在非静态方法中,也就是说只有实例调用的方法中才能出现this,我们可以认为当new了一个实例后 ...

  8. SSL交互简述及nginx双向认证配置

    一.证书生成. 1.SSL Server生成私钥/公钥对.server.key(加密)/server.pub(解密):2.server.pub生成请求文件server.csr,包含server的一些信 ...

  9. Maven搭建简单的SPring+SpringMVC+Hibernate框架

    公司的项目用到的框架是Spring+SpringMVC+Hibernate 以前没有用过,所以要系统的学习一下,首先要学会怎么搭建 第一步  创建一个Maven的web项目  创建方法以前的博客中有提 ...

  10. 超级大佬已提前布局AI域名,人工智能时代真的来临了?

    近日,郭盛华公司巨资收购的ai域名引起了业界深度关注,ai人工智能行业想必大家都熟悉不会陌生,但是ai域名你知道吗?了解域名行业的米友,对于ai域名肯定都熟悉,为什么今天小编要突然提到ai域名?因为a ...