ROS使用简介

news/2024/10/17 10:39:07/

文章目录

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

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

安装

  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.ppmy.cn/news/662972.html

相关文章

Unity学习笔记--EventSystem事件系统在使用上需要注意的地方(很基础,但是很多人会忘记!!!)

目录 前言代码Unity 场景配置运行报错分析解决办法拓展&#xff08;预告&#xff09; 前言 之前有写过一篇关于事件系统实现以及使用的文章 Unity学习笔记–C#事件系统的实现与应用 最近在使用的时候遇到了一些问题&#xff0c;所以在此记录下&#xff0c;也为看到这篇文章的人…

如何升级android10系统,告诫!系统升级完安卓10务必双清

不懂如何双清&#xff0c;请百度搜索问题找回答。将个人资料重要的备份至内存卡或者PC。双清完成再恢复回来了也没有多费事了。三星S换机助手不怎么好用&#xff0c;若三星自己来个无需root像钛备份那样子的神器就好了。 以我多年使用三星手机的经验更新完大版本没有双清会发生…

将samsung Salaxy S2双清

Get Android into Restore Mode and Wipe Cache in Samsung Galaxy S2 整合如下 1. Turn off the phone. 2. Remove the battery and Reinsert it. 3.Press Volumn up() and Home key(the middle button) Together and Switch on your phone, Keep pressing all of them un…

【JS算法系列】1.翻转字符串的四种方法

1.使用数组的 reverse() 方法 let str hello; let reversed str.split().reverse().join(); // "olleh"2.从字符串的尾部开始迭代&#xff0c;并逐个添加字符到新的字符串中 let str hello; let reversed ; for (let i str.length - 1; i > 0; i--) {rever…

java idea tomcat关闭时报错,不知道哪里出问题了

30-Jun-2023 16:33:27.650 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver]&#xff0c;但在Web应用程序停止时无法注销它。 为防止内存泄…

ios相机内存_邱哥教你iPhone优化照片占用空间,节省内存

大家好&#xff0c;我是苹果店邱哥&#xff0c;对于小内存“丐”版的iphone用户&#xff0c;最纠结的就是内存使用了&#xff0c;如果正巧你还是一个拍照拍视频爱好者&#xff0c;最基础的内存肯定不够用&#xff0c;那么如何在不删除照片与视频的前提下减少内存使用呢&#xf…

iphone7plus计算机,iPhone7 Plus的内存容量是多少?运存ram是多少?

iPhone7 Plus的内存容量是多少 iPhone7 Plus的内存容量是32GB/64GB/256GB。 根据提供的消息资料&#xff0c;就能了解到iPhone7 Plus的内存容量是多少。iPhone7 Plus的前置FaceTime摄像头提升到了700万像素&#xff0c;苹果将其命名为了“FaceTime HD”。其光圈为f/2.2&#xf…

获取iPhone手机的内存信息

可用内存 //获取当前设备可用内存及所占内存的头文件 #import <sys/sysctl.h> #import <mach/mach.h> // 获取当前设备可用内存(单位&#xff1a;MB&#xff09; - (double)availableMemory { vm_statistics_data_t vmStats; mach_msg_type_number_t infoCo…