ROS使用简介

news/2024/6/17 3:08:09 标签: c++, ROS, ubuntu

文章目录

  • ROS
    • 安装
  • ROS2
    • 安装
    • 卸载
  • Launch 文件

ROS_1">ROS

安装

  ROS 安装选择Noetic版本,对应Ubuntu Focal 20 版本。

  1. 设置sources.list。新建 /etc/apt/sources.list.d/ros-latest.list并添加内容
# 官方
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 清华源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 信任 ROS 的 GPG Key,并更新索引

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
  1. 安装
conda create -n python310-ros python=3.10 # 创建ros专用python环境
conda activate python310-ros
sudo apt install ros-noetic-desktop-full # 完整桌面版安装(Desktop-Full,推荐):除了桌面版的全部组件外,还包括2D/3D模拟器(simulator)和2D/3D 感知包(perception package)
sudo apt install ros-noetic-desktop # 桌面版(Desktop):包括了ROS-Base的全部组件,还有一些工具,比如rqt和rviz。
sudo apt install ros-noetic-ros-base # ROS-Base(仅含骨架):ROS packaging,build,和communication库。没有图形界面(GUI)工具。

# 初始化设置
pip install rospkg
sudo apt install python3-rosdep
sudo rosdep init
rosdep update

  1. 环境配置
source /opt/ros/noetic/setup.bash && conda activate python310-ros

ROS2_44">ROS2

安装

  ROS2 安装选择Foxy版本,对应Ubuntu Focal 20 版本。

  1. 检验是否支持 UTF-8
locale

  如果不支持

sudo apt update && sudo apt install locales
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. 添加GPG key到安装源。清华源帮助
# Ensure that the Ubuntu Universe repository is enabled
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl  gnupg2 -y

# add the ROS 2 GPG key with apt
# 官方源
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 清华源
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  1. 安装ROS2包。
sudo apt update
sudo apt upgrade
conda create -n python310-ros2 python=3.10
conda activate python310-ros2
# Desktop Install (Recommended): ROS, RViz, demos, tutorials.
sudo apt install ros-foxy-desktop python3-argcomplete 
# ROS-Base Install (Bare Bones): Communication libraries, message packages, command line tools. No GUI tools. 
sudo apt install ros-foxy-ros-base python3-argcomplete
# Development tools: Compilers and other tools to build ROS packages
sudo apt install ros-dev-tools

  1. ROS2 环境配置
source /opt/ros/foxy/setup.bash && conda activate python310-ros2

卸载

sudo apt remove ~nros-foxy-* && sudo apt autoremove
sudo rm /etc/apt/sources.list.d/ros2.list
sudo apt update
sudo apt autoremove
# Consider upgrading for packages previously shadowed.
sudo apt upgrade

Launch 文件

  launch文件与src处于同一级目录下,一般为 catkin_ws/src/example/launch
  launch文件本质是一个xml类型的文件,通过各种标签进行功能的实现,下面列举launch文件的基本格式及各标签的作用 launch文件的基本格式如下:

<launch>
    <node .../>
    <param ... />
    <rosparam .../>
    <include .../>
    <remap .../>
    <arg .../>
    <group>  </group>
</launch>
  • node标签会指定一个准备运行的ROS节点,node标签是 launch 文件中最重要的标签,因为它实现了launch文件的基本功能,即同时启动多个ROS节点。
 <node pkg="package_name" type="executable_node" name="node_name" args="$()" respawn="true" output="sceen">
    • pkg:节点所在功能包的名称package_name;
    • type:节点类型是可执行文件(节点)的名称executable_node;
    • name:节点运行时的名称node_name;
    • args:传递命令行设置的参数;
    • respawn:是否自动重启,true表示如果节点未启动或异常关闭,则自动重启;false则表示不自动重启,默认值为false;
    • output:是否将节点信息输出到屏幕,如果不设置该属性,则节点信息会被写入到日志文件,并不会显示到屏幕上。
  • param:在工程项目开发中,我们常常需要改变程序变量的一些参数,如果在程序中赋值,我们每次修改参数都需要重新编译程序,大大降低了开发效率,而param标签则可以实现传递参数的功能,它可以定义一个将要被设置到参数服务器的参数,它的参数值可以通过文本文件、二进制文件或命令等属性来设置。
<param name="param_name" type="param_type" value="param_value" />
<!-- param 标签可以嵌入到 node 标签中,以此来作为该 node 的私有参数 -->
<node>
    <param name="param_name" type="param_type" value="param_value" />
</node>
    • name:参数名称param_name
    • type:参数类型double,str,int,bool,yaml
    • value:需要设置的参数值param_value
  • rosparam:标签可以实现节点从参数服务器上加载(load)、导出(dump)和删除(delete)YAML文件
<!-- 加载package_name功能包下的example.yaml文件 -->
<rosparam command="load" file="$(find package_name)/example.yaml">
<!-- 导出example_out.yaml文件到package_name功能包下 -->
<rosparam command="dump" file="$(find package_name)/example_out.yaml" />
<!-- 删除参数 -->
<rosparam command="delete" param="xxx/param">
    • command:功能类型(load、dump、delete)
    • file:参数文件的路径
    • param:参数名称
  • include标签功能和编程语言中的include预处理类似,它可以导入其他launch文件到当前include标签所在的位置,实现launch文件复用。

<include file="$(find package_name)/launch_file_name">
  • remap标签可以实现节点名称的重映射,每个remap标签包含一个原始名称和一个新名称,在系统运行后原始名称会被替换为新名称。
<remap from="turtle1/cmd_vel" to="/cmd_vel" />
<!-- remap 标签同样可以嵌入到 node 标签中,以此来作为该 node 的私有重映射 -->
<node>
    <remap from="turtle1/cmd_vel" to="/cmd_vel" />
</node>
  • arg标签表示启动参数,该标签允许创建更多可重用和可配置的启动文件,其可以通过命令行、include 标签、定义在高级别的文件这 3 种方式配置值。同时注意:arg标签声明的参数不是全局的,只能在声明的单个启动文件中使用,可以当成函数的局部参数来理解。
    注意:arg和param标签的区别:
函数作用
arg启动时的参数,只在launch文件中有意义
param运行时的参数,参数会存储在参数服务器中
  • group标签可以实现将一组配置应用到组内的所有节点,它也具有命名空间ns特点,可以将不同的节点放入不同的 namespace。
<!-- 用法1 -->
<group ns="namespace_1">
    <node pkg="pkg_name1" .../>
    <node pkg="pkg_name2" .../>
    ...
</group>

<group ns="namespace_2">
    <node pkg="pkg_name3" .../>
    <node pkg="pkg_name4" .../>
    ...
</group>
<!-- 用法2 -->
<!-- if = value:value 为 true 则包含内部信息 -->
<group if="$(arg foo1)">
    <node pkg="pkg_name1" .../>
</group>

<!-- unless = value:value 为 false 则包含内部信息 -->
<group unless="$(arg foo2)">
    <node pkg="pkg_name2" .../>
</group>
<!--
    当 foo1 == true 时包含其标签内部
    当 foo2 == false 时包含其标签内部
-->

http://www.niftyadmin.cn/n/1008560.html

相关文章

Axure教程——循环倒计时

本文介绍的是用Axure制作的循环倒计时 效果 预览&#xff1a;https://zhgcck.axshare.com 功能 1、点击“开始”按钮&#xff0c;倒计时开始 2、数值到1时&#xff0c;从10重新倒计时 制作 一、需要的元件 矩形、动态面板 二、制作过程 拖入一个动态面板&#xff0c;命名为…

【Python入门系列】第五篇:Python面向对象编程

文章目录 前言一、类和对象二、继承三、封装四、多态五、面向对象编程的优势总结 前言 在Python中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种常用的编程范式。它通过将数据和操作封装在对象中&#xff0c;以模拟…

HOT 100(41~60)【LeetCode】

HOT 100&#xff08;41~60&#xff09;【LeetCode】 前言推荐HOT 100&#xff08;41~60&#xff09;102. 二叉树的层序遍历【中等】104. 二叉树的最大深度【简单】105. 从前序与中序遍历序列构造二叉树【中等】114. 二叉树展开为链表【中等】121. 买卖股票的最佳时机【简单】12…

Python 识别拼图验证码

需要识别的某易易盾验证码如下: 识别过程也是非常简单,使用现成的拼图库就行,本文记录一下使用心得(其实也没啥心得,开箱即用,太简单了): 首先,下载gaps拼图库 Install requirements: $ pip install -r requirements.txt $ sudo apt-get install python-tkInstall …

简单的手机记事本怎么把内容标记为完成状态?

很多人平时会在手机记事本上记录一些自己身边需要记住的事情&#xff0c;有的事情做完之后不想删除&#xff0c;又想要和未完成的内容区分开&#xff0c;那么这种情况下可以将它标记为已完成状态。简单的手机记事本怎么把内容标记为完成状态呢&#xff1f;以iPhone手机端敬业签…

蜣螂优化算法(DBO)优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码

蜣螂优化算法是华大学沈波教授团队&#xff0c;继麻雀搜索算法(Sparrow Search Algorithm&#xff0c;SSA&#xff09;之后&#xff0c;于2022年11月27日又提出的一种全新的群体智能优化算法。已有很多学者将算法用于实际工程问题中&#xff0c;今天咱们用蜣螂优化算法优化一下…

pandas【groupby函数】用法总结

groupby函数用法 函数定义axis参数的作用level参数的作用as_index参数的作用sort参数的作用group_keys参数的作用squeeze参数的作用observed参数的作用dropna参数的作用 函数定义 pandas中的groupby函数用于根据一个或者多个字段划分分组。 首先了解一下groupby函数的定义&…

SpringBoot2概览-原理篇

1.自动配置 bean加载方式 XML方式声明bean&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"..."><!--声明自定义bean--><bean id"bookService" class"com.itheima.service.impl.BookSer…