【ROS】最初接触时的一些简单记录

 


之前在电脑本地的一些记录,记录遍布各个文件夹,需要的时候查找翻阅不便,现归纳到此。

安装ROS

ROS官网:有一些在linux下的安装步骤说明

前期准备:更换国内源以及将“软件和更新”下的“可从互联网下载”的四个选项都勾选上。

安装步骤:

  1. 添加ROS软件源

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

    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C6543.
    
  3. 安装ROS(安装失败可以连手机热点试试)

    $ sudo apt update   //更新软件源
    $ sudo apt install ros-melodic-desktop-full 
    
  4. 初始化rosdep

    $ sudo rosdep init
    $ rosdep update
    

    出现问题1

    • 当运行sudo rosdep init出现sudo: rosdep:找不到命令时:

    • 执行rospack find rosdep,找出rosdep这个包的路径,如果 没有,则会显示

    Command 'rospack' not found, but can be installed with:

    sudo apt install rospack-tools

    • 使用以下命令安装:
    $ sudo apt install rospack-tools
    
    • 安装好后,即可执行:sudo rosdep init

    出现问题2

    • 运行sudo rosdep init出现:
    ERROR: cannot download default sources list from:
    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
    Website may be down.
    
    • 报错原因:GitHub的raw.githubusercontent.com无法连接

    • 需要解决:GitHub的raw.githubusercontent.com无法连接问题

    • 通过IPAddress.com首页,输入raw.githubusercontent.com查询到真实IP地址,会看到四个地址(四个地址到时候都试试,另外不行的话换手机热点)

    • 修改hosts Ubuntu:

    $ sudo nano/etc/hosts
    

    添加以下内容并保存:

    185.199.108.133 raw.githubusercontent.com
    //如果不行的话,ip地址换成四个地址中别的地址
    
    • 然后运行:sudo rosdep init就会显示以下内容,就表示ok了,然后就按照说明运行rosdep update

      Wrote /etc/ros/rosdep/sources.list.d/20-default.list
      Recommended: please run
      
      	rosdep update
      

    出现问题3

    • 运行rosdep update报错,主要原因是因为网络造成的响应超时,也可以FQ解决。或者用CSDN教程,方法三牛逼!
  5. 设置环境变量

    $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    $ source ~/.bashrc
    
  6. 安装rosinstall,也是帮助安装ros依赖包的

    $ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
    
  7. 这样安装就基本完成了,接着输入命令可以查看是否安装成功,可以看到版本号就说明安装成功了

    $ roscore
    
  8. 启动小海龟仿真器,新开一个终端输入

    $ rosrun turtlesim turtlesim_node
    
  9. 启动海龟控制节点,新开一个终端输入,这个用方向键可以控制海龟运动

    $ rosrun turtlesim turtle_teleop_key
    

ROS的生态系统

  1. 发行版(Distribution):ROS发行版包括一系列带有版本号、可以直接安装的功能包。

  2. 软件源(Repository):ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或者共享自己的机器人软件。

  3. ROS wiki:记录ROS信息 文档的主要论坛。

  4. 邮件列表(Mailing list):交流ROS更新的主要渠道,同时也可以交流ROS开发的各种疑问。

  5. ROS Answer:咨询ROS相关问题的网站。

  6. 博客(Blog):发布ROS社区中的新闻、图片、视频(http://www.ros.org/news)

节点与节点管理器

节点 (Node):——执行单元

  • 执行具体任务的进程、独立运行的可执行文件;

  • 不同节点可使用不同的编程语言,可分布式运行在不同的主机;

  • 节点在系统中的名称必须是唯一的。

节点管理器(ROS Master)——控制中心 (ROS2 中取消了Master)

  • 为节点提供命名和注册服务;

  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;

  • 提供参数服务器,节点使用此服务器存储和检索运行时的参数。

ROS1 与ROS2部分比较

  • ROS 1主要构建于Linux系统之上,主要支持Ubuntu。而ROS 2采用全新的架构,底层基于DDS(Data Distribution Service)通信机制,支持实时性、嵌入式、分布式、多操作系统。ROS 2支持的系统包括Linux、windows、Mac、RTOS,甚至是单片机等没有操作系统的裸机。
  • ROS 1的通讯系统基于TCPROS/UDPROS,强依赖于master节点的处理,而ROS 2的通讯系统是基于DDS,进而取消了master,同时在ROS2内部提供了DDS的抽象层实现,有了这个抽象层,用户就可以不去关注底层的DDS使用了哪个商家的API。

话题通信

话题(Topic)——异步通信机制

  • 节点间用来传输数据的重要总线
  • 使用发布\订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。

消息(Message)——话题数据

  • 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
  • 使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件。

ROS是通过节点来进行消息传递的,所以需要节点管理平台来负责分配相互匹配的节点。

服务通信

服务(service)——同步通信机制

  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
  • 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。

文件系统

功能包(Package)

  • ROS软件中的基本单元,包含节点源码、配置文件、数据定义等

功能包清单(Package manifest)

  • 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等

元功能包(Meta Packages)

  • 组织多个用于同一目的功能包

ROS命令行工具

常用命令:

rostopic:显示一些rostopic的指令信息

  • rostopic list:例举话题信息

  • 比如可以通过rostopic控制小海龟运动,表示向前走1个单位:

    $ rostopic pub /turtle1/cmd_vel geometist "linear:
      x: 1.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0"
    

    循环发送指令,-r 10表示频率是10,即一秒钟运行10次(用Ctrl + C关闭):

    $ rostopic pub -r 10 /turtle1/cmd_vel geometist "linear:
      x: 1.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0"
    

rosservice:

  • 比如:发布服务请求(在(5.0,5.0)处创建了一个叫‘turtle2’的海龟):

    $ rosservice call /spawn "x:5.0
    y:5.0
    theta:0.0
    name:'turtle2'"
    

rosnode:显示rosnode节点相关的指令

  • rosnode list:将节点都列出来的指令
  • rosnode info /turtlesim:查看节点/turtlesim的信息

rosparam:

rosmsg:查看发送的消息的指令

rossrv:

rosbag:可以用来采集数据然后复现

  • 话题记录:

    $ rosbag record -a -O cmd_record
    
  • 话题复现:

    $ rosbag play cmd_record.bag
    

rqt_graph:【rqt开头的指令都是基于QT的可视化工具】这条指令是显示系统计算图例的可视化工具

创建工作空间与功能包

工作空间(workspace)是一个存放工程开发相关文件的文件夹

  • src:代码空间(Source Space)
  • build:编辑空间(Build Space)存放编译过程中的二进制文件以及一些中间文件
  • devel:开发空间 (Development Space)存放开发时的可执行文件和一些库
  • install:安装空间(Install Space)存放编译生成的可执行文件

创建工作空间

  • 创建工作空间:

    $ mkdir -p ~/catkin_ws/src    //创建文件夹
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
    
  • 编译工作空间:

    $ cd ~/catkin_ws/
    $ catkin_make
    $ catkin_make      //产生install安装空间
    
  • 设置环境变量:

    $ source devel/setup.bash
    
  • 检查环境变量:

    $ echo $ROS_PACKAGE_PATH
    

创建功能包

同一个工作空间下,不允许存在同名功能包

不同工作空间下,允许存在同名功能包

创建功能包的形式如下

$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
  • 创建功能包:

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg test_pkg std_msgs rospy roscpp
    
  • 编译功能包:

    $ cd ~/catkin_ws
    $ catkin_make
    $ source ~/catkin_ws/devel/setup.bash
    

发布者Publisher的编程实现

创建功能包

$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

如何实现一个发布者(C++/Python)

  • 初始化ROS节点;
  • 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
  • 创建消息数据;
  • 按照一定的频率循环发布消息。

如何配置CMakeLists.txt中的编译规则

  • 设置需要编译的代码和生成的可执行文件
  • 设置链接库
add_executable(velocity_publisher src/velocity_publisher.cpp) 

target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

编译并运行发布者

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash   //设置环境变量
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher

其中环境变量设置可以去 /home/bck路径下Ctrl + C打开隐藏文件,打开.bashrc文件,在最后一行加上

source /home/bck/catkin_ws/devel/setup.bash

这样在文件夹里面就不用每次设置环境变量了

订阅者Subscriber的编程实现

创建订阅者代码(C++)

**如何实现一个订阅者 **

  • 初始化ROS节点
  • 订阅需要的话题
  • 循环等待话题消息,接收到消息后进入回调函数
  • 在回调函数中完成消息处理

客户端client的编程实现

创建功能包

$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

编译并运行客户端

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_service turtle_spawn
posted @   乞力马扎罗山的雪  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示

目录导航