前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ROS学习——第1讲 ROS概述及环境搭建

ROS学习——第1讲 ROS概述及环境搭建

原创
作者头像
Arya
发布于 2024-11-22 09:21:39
发布于 2024-11-22 09:21:39
5500
举报
文章被收录于专栏:后端开发专栏后端开发专栏

在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!

题目:HarmonyOS 应用中复杂业务场景下的接口设计

好事文章地址:https://cloud.tencent.com/developer/article/2469534

在开发复杂业务应用时,接口设计不仅需要满足业务功能,还要考虑通用性和高效性。对于多业务耦合场景,接口如何灵活扩展、避免过度设计,同时保证数据传输的高效,是开发者需要解决的重要问题。本文结合 HarmonyOS 的开发实践,分享如何针对复杂业务场景设计高扩展性、低耦合的接口。

引出


ROS学习——第1讲 ROS概述及环境搭建

第1讲 ROS概述及环境搭建

Ros的安装

代码语言:java
复制
root@ubuntu:/# cd /usr/lib/python3/dist-packages/
root@ubuntu:/usr/lib/python3/dist-packages# find . -type f | xargs grep "raw.githubusercontent"
代码语言:java
复制
sudo gedit ./rosdistro/__init__.py 
sudo gedit ./rosdep2/gbpdistro_support.py
sudo gedit ./rosdep2/sources_list.py
sudo gedit ./rosdep2/rep3.py

Ros测试

ROS 内置了一些小程序,可以通过运行这些小程序以检测 ROS 环境是否可以正常运行

  1. 首先启动三个命令行(ctrl + alt + T)
  2. 命令行1键入:roscore
  3. 命令行2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
  4. 命令行3键入:rosrun turtlesim turtle_teleop_key(在3中可以通过上下左右控制2中乌龟的运动)

如何进入root用户

如果没有在root用户下,会出现很多奇奇怪怪的问题,包括不限于ros运行不起来,得切换su,vs编译命令报错等,所以最好开始登录就进入root用户

Ubuntu 20.04使用root身份自动登录_ubuntu20.04root登录-CSDN博客

代码语言:java
复制
sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 
sudo gedit /etc/pam.d/gdm-autologin
sudo gedit /etc/pam.d/gdm-password
sudo gedit /root/.profile
tty -s &&mesg n || true
sudo gedit /etc/gdm3/custom.conf
代码语言:java
复制
user-session=ubuntu
#手工输入登陆系统的用户名和密码
greeter-show-manual-login=true
#禁用guest用户
all-guest=false
#启动后以root身份自动登录
autologin-user=root

HelloWorld程序

包冲突解决

创建文件目录,catkin_make

创建工作空间

代码语言:java
复制
root@ubuntu:/home/peter/demo01_ws# cd src/
root@ubuntu:/home/peter/demo01_ws/src# catkin_create_pkg helloworld roscpp rospy std_msgs

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

解决:没有新建文件选项

C++的实现

编写源文件

代码语言:java
复制
// 1. ros hand file

#include "ros/ros.h"
// 2. main 
int main(int argc, char *argv[]){
    // 3. ros node
    ros::init(argc,argv,"hello_node");
    // 4. output log
    ROS_INFO("hello world");
    return 0;
}
关于 permissions necessary to save

Could not save the file "/home/peter/demo01_ws/sr...oworld/src/helloworld.cpp". You do not have the permissions necessary to save the file.Please check that you typed the location correctly and try again. 1//1

修改配置文件

进行编译

报错解决:
没有roscpp
代码语言:java
复制
CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "roscpp" with any
  of the following names:

    roscppConfig.cmake
    roscpp-config.cmake
没有rospy
代码语言:java
复制
CMake Error at /usr/share/catkin/cmake/catkinConfig.cmake:82 (find_package):
  Could not find a package configuration file provided by "rospy" with any of
  the following names:

    rospyConfig.cmake
    rospy-config.cmake

进行运行

代码语言:java
复制
cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点
报错解决
python3-roslaunch
代码语言:java
复制
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
root@ubuntu:/home/peter# roscore

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

apt install python3-roslaunch
python3-catkin-pkg-modules_1.0.0-1_all.deb
代码语言:java
复制
Errors were encountered while processing:
 /var/cache/apt/archives/python3-catkin-pkg-modules_1.0.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
代码语言:java
复制
Resource not found: roslaunch
ROS path [0]=/opt/ros/noetic/share/ros
ROS path [1]=/opt/ros/noetic/share
The traceback for the exception was written to the log file
代码语言:java
复制
sudo apt-get install ros-noetic-roslaunch
代码语言:java
复制
… logging to /home/gm/.ros/log/24112dc4-6213-11e9-87a9-98541bdb0e48/roslaunch-gm-Lenovo-ideapad-4266.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB

https://blog.csdn.net/qq_50942093/article/details/126998638

代码语言:java
复制
rosclean check
rosclean purge
代码语言:java
复制
root@ubuntu:/home/peter/demo01_ws# rosrun helloworld HAHA

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

apt install rosbash

任意地方都能运行

Pyhton实现

报错解决:python 软连接到Python3
代码语言:java
复制
/usr/bin/env: ‘python’: No such file or directory
代码语言:java
复制
sudo ln -s /usr/bin/python3 /usr/bin/python
报错:只能开一个roscore
代码语言:java
复制
RLException: roscore cannot run as another roscore/master is already running. 
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://127.0.0.1:11311/
The traceback for the exception was written to the log file

集成开发环境搭建

终端工具

vscode安装

代码语言:java
复制
sudo apt update
sudo apt install software-properties-common apt-transport-https wget
代码语言:java
复制
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
sudo apt install code

安装插件

报错解决:root启动code . 失败
代码语言:java
复制
root@ubuntu:/home/peter/demo02_ws# code .
You are trying to start Visual Studio Code as a super user which isn't recommended. If this was intended, please add the argument `--no-sandbox` and specify an alternate user data directory using the `--user-data-dir` argument.
代码语言:java
复制
vi ~/.bashrc
# 添加一行
alias code='/usr/share/code/code . --no-sandbox --unity-launch'
# 报存生效
source ~/.bashrc
关于字体太小

在vscode中开发C++

项目配置

代码语言:java
复制
{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

新建包+添加依赖

代码语言:java
复制
roscpp rospy std_msgs

新建文件写代码

代码语言:java
复制
#include "ros/ros.h"

int main(int argc, char *argv[])
{
    ros::init(argc,argv,"hello_c");
    ROS_INFO("HELLO");
    
    return 0;
}

修改CMakeList文件

进行编译

终端运行

解决乱码

使用Python开发

添加权限

代码语言:java
复制
chmod +x *.py

修改配置

编译执行

其他问题

launch文件

代码语言:java
复制
<launch>
     <!-- add node -->
     <!-- Tutle gui -->
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
代码语言:java
复制
    <node pkg= "hello_vscode" type="hello_vscode_c" name="hello" output="screen" />

报错解决

ERROR: cannot launch node of type turtlesim/turtlesim_node: turtlesim
代码语言:java
复制
sudo apt-get install ros-noetic-ros-tutorials
ERROR: cannot launch node of type turtlesim /turtlesim_node: turtlesim

ROS架构

ROS文件系统

代码语言:java
复制
WorkSpace --- 自定义的工作空间

    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。

    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。

    |--- src: 源码

        |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成

            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件

            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)

            |-- scripts 存储python文件

            |-- src 存储C++源文件

            |-- include 头文件

            |-- msg 消息通信格式文件

            |-- srv 服务通信格式文件

            |-- action 动作格式文件

            |-- launch 可一次性运行多个节点 

            |-- config 配置信息

        |-- CMakeLists.txt: 编译的基本配置
package.xml
CMakeList.txt
代码语言:java
复制
apt search ros-noetic-* | grep -i gmapping

ROS计算图


总结

ROS学习——第1讲 ROS概述及环境搭建

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
集合框架3-Arrays 类
Arrays 和 Collections是分别操作数组和集合的两个工具类。今天就来对 Arrays 中的内容作个总结。
归思君
2023/10/16
2000
Java-常用类
哈喽!大家好,我是小简。今天开始学习《Java-常用类》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
3690
Java-常用类
【Java宝典】——二维数组的寻宝之旅
由上面的输出结果我们可以得出:其实二维数组的本质就是一个大的一维数组array,里面包含着两个小的一维数组。由此我们可以将上面的循环打印二维数组的语句修改为如下样式:
ImAileen
2024/09/20
660
【Java宝典】——二维数组的寻宝之旅
Java 常用类
String a="hello"+"abc";//==>优化等价 String a="helloabc";
用户9615083
2022/12/25
6110
Java 常用类
数组排序的实现
利用Collections.reverseOrder()方法:倒叙排列,数组倒置。
泰斗贤若如
2019/06/19
6480
Java 比较器 和 包装类
Java Comparable接口强行对实现它的每个类的对象进行整体排序 这种排序被称为:自然排序
Java_慈祥
2024/08/06
1410
Java 比较器 和 包装类
java中数组遍历的三种方式
通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。
全栈程序员站长
2022/09/05
1.4K0
Arrays:点燃你的数组操作技巧的隐秘武器
  数组在 Java 中是一种常用的数据结构,用于存储和操作大量数据。但是在处理数组中的数据,可能会变得复杂和繁琐。Arrays 是我们在处理数组时的一把利器。它提供了丰富的方法和功能,使得数组操作变得更加简单、高效和可靠。无论是排序、搜索、比较还是复制,Arrays 都能够满足我们的需求,来帮助我们充分发挥数组的潜力。接下来我们一起看看 Arrays 的各种功能和用法,以帮助我们更好地利用这个强大的工具。
不一样的科技宅
2023/09/01
1540
Arrays:点燃你的数组操作技巧的隐秘武器
java打印数组元素_java Arrays快速打印数组的数据元素列表案例
public static strictfp void main(String[] args) {
全栈程序员站长
2022/08/23
1.7K0
java打印数组元素_java Arrays快速打印数组的数据元素列表案例
Java常用类应用详解
可以通过图查询到其含有的字段和方法,jump to source 可以查看到源码。
timerring
2023/05/01
4800
Java常用类应用详解
Arrays类
  为了简化对数组的操作,JDK1.2在java.util包下增加了一个Arrays类(数组工具类),里面提供了一系列静态方法,用于对数组进行排序、查找等。Arrays类常见方法如表所示。
别团等shy哥发育
2023/02/25
3090
Arrays类
java-接口、lambda表达式
接口中所有方法必须为public 接口中不能定义成员变量,但是可以定义为一个常量(类型为public static final) 不能用new来实例化一个接口,但是允许定义一个接口变量 接口变量必须引用实现了该接口的类对象 同一个类可以同时实现多个接口 接口可以定义default方法,该方法提供了一个默认的实现,实现该接口时可以按需重写该方法 接口中的默认方法可以调用其他任意方法 java-SE8后允许接口定义静态方法 public class InterfaceTest implements Test{
卢衍飞
2023/02/16
5120
Java学习笔记4-数组操作
在笔记3中已经学习了for和for each相关操作,可以使用两者对数组进行变量,但要记住for是通过计数器来进行遍历,而for each则是直接访问数组中的元素值;
村雨遥
2020/03/23
3190
JAVA打印数组的四种方法
无聊看模块Integer.java源码时(IDEA中鼠标悬浮在Integer上按ctrl+alt 可以转到类源码),因为刚学java,想尝试着仿照python的方法打印数组:
全栈程序员站长
2022/08/11
1.4K0
JAVA打印数组的四种方法
挑战程序竞赛系列(19):3.1最小化第k大的值
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/73743661
用户1147447
2019/05/26
3650
(31) 剖析Arrays / 计算机程序的思维逻辑
数组是存储多个同类型元素的基本数据结构,数组中的元素在内存连续存放,可以通过数组下标直接定位任意元素,相比我们在后续章节介绍的其他容器,效率非常高。 数组操作是计算机程序中的常见基本操作,Java中有一个类Arrays,包含一些对数组操作的静态方法,本节主要就来讨论这些方法,我们先来看怎么用,然后再来看它们的实现原理。学习Arrays的用法,我们就可以避免重新发明轮子,直接使用,学习它的实现原理,我们就可以在需要的时候,自己实现它不具备的功能。 用法 toString Arrays的toString方法可
swiftma
2018/01/31
1.4K0
【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
本文将整理 java.util.Arrays 工具类比较常用的方法:  本文介绍的方法基于JDK 1.7 之上。  1.  asList方法  @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }    使用该方法可以返回一个固定大小的List,如:  List<String> stringList = Arrays.asList("Welcome", "
Angel_Kitty
2018/04/09
6470
【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
java多维数组
Java 是一种高级编程语言,广泛应用于各种软件开发和企业应用中。Java 语言支持多维数组,这是一个非常强大和有用的特性。多维数组可以帮助开发人员处理各种复杂的数据结构和算法,同时提高代码的可读性和可维护性。本文将详细介绍 Java 多维数组的概念、用法和示例。
堕落飞鸟
2023/04/03
1.8K0
Java –如何打印数组
这是打印数组的最简单方法– Arrays.toString (自JDK 1.5起)
全栈程序员站长
2022/09/01
9840
Java程序设计(基础)- 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。 Java语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如numbers[100]来代替直接声明100个独立变量number0,number1,…,number99。 Java数组的声明、创建和初始化,并给出其对应的代码。
全栈程序员站长
2022/06/30
5890
Java程序设计(基础)- 数组
相关推荐
集合框架3-Arrays 类
更多 >
目录
  • 引出
  • 第1讲 ROS概述及环境搭建
    • Ros的安装
    • Ros测试
      • 如何进入root用户
    • HelloWorld程序
      • 包冲突解决
      • 创建文件目录,catkin_make
      • 创建工作空间
    • C++的实现
      • 编写源文件
      • 修改配置文件
      • 进行编译
      • 进行运行
      • 任意地方都能运行
    • Pyhton实现
    • 集成开发环境搭建
      • 终端工具
      • vscode安装
    • 在vscode中开发C++
      • 项目配置
      • 新建包+添加依赖
      • 新建文件写代码
      • 修改CMakeList文件
      • 进行编译
      • 终端运行
    • 使用Python开发
      • 添加权限
      • 修改配置
      • 编译执行
    • 其他问题
    • launch文件
      • 报错解决
    • ROS架构
      • ROS文件系统
      • ROS计算图
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档