蓝桥云课ROS机器人旧版实验报告-02架构及概念

news2024/9/21 0:29:21

项目名称

实验二 ROS[Kinetic/Melodic/Noetic]架构及概念

成绩

内容:机器人操作系统文件系统级、计算图级、社区级、创建功能包并实现功能等

实验记录(70分)

安装一个可用的 build-from-source 包:

    在克隆之前,确保仍在 dev_ws/src 目录中。

    $ cd ~/dev_ws/src

    $ git clone https://github.com/ros/ros_tutorials.git -b Kinetic/Melodic/Noetic-devel

`# git clone -b <branch> <address>`

要查看 ros_tutorials 中的包,请输入命令:

    $ ls ros_tutorials

    会发现有四个包:`roscpp_tutorials rospy_tutorials ros_tutorials turtlesim`

只有 **turtlesim** 是 ROS2 包

在运行 rosdep 之前,请确保您位于工作区根目录 (~/dev_ws) 中。

    第一次运行`rosdep`,需要先运行`rosdep init`。

    $ cd ..

    $ rosdep install --from-paths src --ignore-src -r -y

    此命令会神奇地安装工作区中的软件包所依赖但计算机上缺少的所有软件包。

使用 colcon 构建工作区

    不要忘记在构建之前获取 ROS 安装源,并确保位于工作区的根目录中(~/dev_ws)。

    $ source /opt/ros/Kinetic/Melodic/Noetic/setup.bash

    $ colcon build --symlink-install

2023补充,现在ROS1、ROS2社区,除了机器人爱好者贡献的资料之外,引入了AI生成的内容。

所有的源码下载地址:

https://labfile.oss.aliyuncs.com/courses/854/rosdemos_ws.zip

如果下载的是zip压缩包,使用如下命令解压缩:

unzip 压缩包名/home/shiyanlou/src/ros_tutorials/turtlesim文件夹,

放到code/自己命名/src文件夹下。

解压完成后,

从网上下载一些自己喜欢机器人头像做成图标png格式大小45*45

然后,上传到蓝桥云课code文件夹下,移动到

/home/shiyanlou/Code/robot/src/turtlesim/images/

打开代码:/home/shiyanlou/Code/robot/src/turtlesim/src/

 

图2.1: 需修改文件的路径和对应文件

找到如下代码片段:

  QVector<QString> turtles;

  turtles.append("box-turtle.png");

  turtles.append("robot-turtle.png");

  turtles.append("sea-turtle.png");

  turtles.append("diamondback.png");

  turtles.append("electric.png");

  turtles.append("fuerte.png");

  turtles.append("groovy.png");

  turtles.append("hydro.svg");

  turtles.append("indigo.svg");

  turtles.append("jade.png");

  turtles.append("kinetic.png");

将不用的代码注释,并添加自己的图标名。

进入到ros2_ws文件夹下,单击鼠标右键,打开终端!

注意路径zhangrelay@cslg:~/code/ros2_ws$

输入如下命令:

ros2 pkg prefix turtlesim

显示如下:

/opt/ros/galactic

这是使用sudo apt install 安装后的默认功能包位置。输入如下命令看一看效果:

ros2 run turtlesim turtlesim_node

导入自己的功能包(一定要在对应功能包目录下操作): 

source install/setup.bash 

重复上述指令:

ros2 pkg prefix turtlesim

ros2 run turtlesim turtlesim_node

查看变化!

修改如下代码:

主要后面修改为自己的学号

#define DEFAULT_BG_R 0x45

#define DEFAULT_BG_G 0x56

#define DEFAULT_BG_B 0xff

namespace turtlesim

{

TurtleFrame::TurtleFrame(rclcpp::Node::SharedPtr& node_handle, QWidget* parent, Qt::WindowFlags f)

: QFrame(parent, f)

, path_image_(500, 500, QImage::Format_ARGB32)

, path_painter_(&path_image_)

, frame_count_(0)

, id_counter_(0)

{

  setFixedSize(500, 500);

  setWindowTitle("TurtleSim-ros2-esp32@cslg-cjq-160919103");

修改后保存!但是镜像会还原,将这个目录复制到windows盘的合适位置然后编译!

缺失功能包自动补装:

rosdep install --from-paths src --ignore-src -r -y

出现如下提示:

#All required rosdeps installed successfully

说明一切准备就绪,开始编译。

使用单线程编译,否则会出现死机等问题!

colcon build --symlink-install

如果只编译turtlesim,并使用单线程,命令如下:

colcon build --symlink-install --parallel-workers 1 --packages-select turtlesim

参数顺序和不要出现中文空格。

过程如下图(将标题栏加入学号,判断是否抄袭):

下载相关源码后,放到所需要的位置然后修改其为cocube,代码文件的位置:

路径: /home/shiyanlou/Code/robot/src/cocube/src/

 

图2.2: 需修改文件的路径和对应文件

  setFixedSize(500, 500);

  setWindowTitle("CoCubeSim-CSLG");

回到robot文件夹下编译,使用catkin_make:

完成度100%并且不报错。

 

图2.3 编译没有任何问题

每一个终端都要在robot文件夹下输入:

source devel/setup.zsh ,配置为自定义功能包

否则,如果不输入,则调用系统内置功能包。

新建标签页输入roscore,然后还要新建标签页输入run turtlesim turtlesim_node(注意:source devel/setup.zsh)

 

图2.4 cocubesim-cslg界面截图

贪吃蛇如下:

 

思考题(30分):

  1. 键盘遥控小乌龟实验:

启动turtlesim,在终端中输入以下命令:

 run turtlesim turtlesim_node(注意:source devel/setup.zsh)

模拟器窗口应该出现,中间有一个随机的海龟。

  1. 在命令下的终端中,将看到来自节点的消息

打开一个新的终端窗口,并输入:

 run turtlesim turtle_teleop_key

至此通过使用turtle_teleop_key实现对turtlesim的键盘控制

turtlesim中键盘遥控机器人运动的详细步骤

首先,打开终端,输入命令“roscore”启动ROS核心。然后,在新的终端中输入命令“rosrun turtlesim turtlesim_node”启动turtlesim节点。接下来,打开新的终端,输入命令“rosrun turtlesim turtle_teleop_key”启动键盘遥控节点。此时,你可以使用键盘上的方向键来控制机器人的运动。按下“Ctrl + C”可以停止节点的运行。

 

图2.5 键盘控制的终端

 

图2.6 键盘遥控机器人运动轨迹如上图

2 这是一个开环控制,下图可以说明:

 

图2.7 单向控制,没有闭环


AI:

蓝桥云课ROS机器人实验报告-02架构及概念的大纲可能包括以下内容:

  1. ROS架构介绍:介绍ROS的总体架构,包括ROS的组成、节点、消息传递、服务、参数服务器等基本概念。
  2. ROS工作空间:介绍ROS的工作空间概念,包括工作空间的创建、使用和组织方式。
  3. ROS包管理:介绍ROS的包管理机制,包括包的定义、安装、升级和卸载等操作。
  4. ROS节点编程:介绍如何使用ROS编程语言(如Python)创建和控制ROS节点,包括节点的启动、停止和参数设置等。
  5. ROS消息传递:介绍ROS中的消息传递机制,包括话题、服务和参数服务器等,并介绍如何使用这些机制进行程序间通信。
  6. ROS机器人模型:介绍如何使用ROS的的运动学模型库定义机器人的运动学模型,包括机器人的关节、链接、运动学方程等。
  7. ROS机器人控制:介绍如何使用ROS控制机器人,包括控制机器人的运动、传感器数据采集等。
  8. ROS机器人编程实践:通过一个具体的ROS程序,介绍如何编写ROS程序,包括创建ROS包、编写ROS节点、编写ROS消息等。

以上是蓝桥云课ROS机器人实验报告-02架构及概念的大纲的一个大致框架,具体内容可能会根据实验的目的和实际情况进行调整。

要使用蓝桥云课ROS机器人turtlesim实现贪吃蛇游戏,可以按照以下步骤进行:

  1. 确保已经安装了ROS和turtlesim包。
  2. 创建一个新的ROS工作空间,并将turtlesim包添加到工作空间中。
  3. 创建一个新的ROS节点,用于控制turtlesim中的乌龟。
  4. 在节点中编写Python程序,使用ROS消息与turtlesim乌龟进行通信。
  5. 用ROS命令行工具运行程序,并使用键盘控制乌龟的运动。

下面是一个简单的示例程序,可以实现贪吃蛇游戏的基本功能:

 

python

#!/usr/bin/env python
import rospy
from turtlesim.msg import Pose
def move_turtle():
rospy.init_node('move_turtle')
pub = rospy.Publisher('/turtle1/command', Pose, queue_size=10)
rate = rospy.Rate(10) # 10hz
rospy.loginfo("Moving the turtle to home position")
# home position
pose = Pose()
pose.x = 0
pose.y = 0
pose.theta = 0
pub.publish(pose)
rate.sleep()
rospy.loginfo("Starting the game")
# game logic here
# use pub.publish to move the turtle
if __name__ == '__main__':
try:
move_turtle()
except rospy.ROSInterruptException:
pass

在上面的示例程序中,我们首先初始化了一个ROS节点,并创建了一个发布者pub,用于向turtlesim中的乌龟发送运动命令。然后我们定义了一个速率rate,用于控制程序的运行的频率。接着我们移动乌龟到初始位置(home position),并开始游戏逻辑。在这里你可以自己实现贪吃蛇游戏的规则和逻辑,例如根据方向移动乌龟、吃食物、计算分数等。最后,我们启动ROS节点并运行程序。

注意:这只是一个简单的示例程序,贪吃蛇游戏的具体实现需要根据自己的需求和规则进行编写。

 

蓝桥云课ROS机器人实验报告-02架构及概念要点如下:

  1. ROS架构:介绍ROS的总体架构,包括ROS的组成、节点、消息传递、服务、参数服务器等基本概念。
  2. ROS工作空间:介绍ROS的工作空间概念,包括工作空间的创建、使用和组织方式。
  3. ROS包管理:介绍ROS的包管理机制,包括包的定义、安装、升级和卸载等操作。
  4. ROS节点编程:介绍如何使用ROS编程语言(如Python)创建和控制ROS节点,包括节点的启动、停止和参数设置等。
  5. ROS消息传递:介绍ROS中的消息传递机制,包括话题、服务和参数服务器等,并介绍如何使用这些机制进行程序间通信。
  6. ROS机器人模型:介绍如何使用ROS的的运动学模型库定义机器人的运动学模型,包括机器人的关节、链接、运动学方程等。
  7. ROS机器人控制:介绍如何使用ROS控制机器人,包括控制机器人的运动、传感器数据采集等。
  8. ROS机器人编程实践:通过一个具体的ROS程序,介绍如何编写ROS程序,包括创建ROS包、编写ROS节点、编写ROS消息等。

以上是蓝桥云课ROS机器人实验报告-02架构及概念要点的一个大致框架,具体内容可能会根据实验的目的和实际情况进行调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter函数助手(一)随机字符串(RandomString)

一、目标 实现一个请求单次调用&#xff0c;请求体里多个集合中的相同参数&#xff08;zxqs&#xff09;值随机从序列{01、02、03、03、04、05、06、07、08}中取 若使用CSV数据文件、用户参数等参数化手段&#xff0c;单次执行请求&#xff0c;请求体里多个集合中的相同参数&a…

生产服务器突然本机无法访问本机IP的端口

生产服务器突然本机无法访问本机IP的端口 一、现象描述 生产服务器突然无法访问自己本机IP地址的端口&#xff0c;通过localhost或者127.0.0.1都可以正常访问 二、问题分析 服务器是搭建在虚拟机上面&#xff0c;起初由于服务器内存不足的原因&#xff0c;导致了服务器故障无…

基于ssm 网上购物系统-计算机毕设 附源码12503

基于SSM网上购物系统 摘 要 近年来&#xff0c;随着移动互联网的快速发展&#xff0c;电子商务越来越受到网民们的欢迎&#xff0c;电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越…

Nginx配置与使用

引言 早期的业务都是基于单体节点部署&#xff0c;由于前期访问流量不大&#xff0c;因此单体结构也可满足需求&#xff0c;但随着业务增长&#xff0c;流量也越来越大&#xff0c;那么最终单台服务器受到的访问压力也会逐步增高。时间一长&#xff0c;单台服务器性能无法跟上业…

Spring学习记录----十五、面向切面编程AOP+十六、Spring对事务的支持

十五、面向切面编程AOP IoC使软件组件松耦合。AOP让你能够捕捉系统中经常使用的功能&#xff0c;把它转化成组件。 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;面向方面编程。&#xff08;AOP是一种编程技术&#xff09; …

什么是EhCache 缓存

EhCache 缓存-提高检索效率的利器 缓存-官方文档 文档地址: https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache EhCache 缓存 配置文档: https://www.cnblogs.com/zqyanywn/p/10861103.html 基本介绍 EhCache 是一个纯Java 的缓存框架&#xff0c;具有快速、精干等…

GORM 并发执行 Save 更新记录报:Error 1062 (23000)

文章目录 1.Save 简介2.问题3.原因4.小结参考文献 1.Save 简介 先看一下 Save 方法的描述&#xff1a; // Save updates value in database. If value doesnt contain a matching primary key, value is inserted. func (db *DB) Save(value interface{}) (tx *DB)Save 有两个…

lc1109.航班预定统计

暴力解法&#xff1a;按照示例在firsti到lasti遍历&#xff0c;将seati加到每个数上。时间复杂度取决于bookings的长度 一维差分&#xff1a;建立初始数组和差分数组&#xff0c;在差分数组的firsti位置加上seati&#xff0c;差分数组的lasti1位置减去seati&#xff08;避免影…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日&#xff0c; 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品&#xff0c;分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

vscode如何包含第三方库

方法1&#xff1a;使用C Extension 在include 的 rapidjson的头文件时&#xff0c;vscode会提示找不到的问题 悬停&#xff0c;点击黄色提示 Edit "includePath" setting Include Path&#xff0c;输入rapidjson的include路径 /Users/xxx/workspaces/rapidjson-1.1.…

服务器出入口IP通俗理解

一、出口IP 这是机房的网络设备&#xff08;如防火墙&#xff09;给内网主机生成的一个外网IP&#xff0c;用来保证内网主机能和其他公网主机进行来回通信&#xff0c;通常作为其他接入方的IP白名单使用&#xff0c;一般有几台内网主机就有几个出口IP&#xff0c;出口IP通常和入…

TSINGSEE青犀视频AI算法引擎中台在渣土车智慧管控场景中的应用

一、行业背景 随着社会的发展和人们生活水平的不断进步&#xff0c;大家对环境卫生和空气质量的要求越来越重视。渣土车是建筑垃圾的运输主力&#xff0c;也存在行驶频繁、不合规、不合法的操作&#xff0c;可能对交通安全、环境卫生和城市形象造成影响。比如在施工工地&#x…

Django音乐电台推荐系统【纯干货分享,免费领源码00750】

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

【云原生】K8S超详细概述

目录 一、Kubernets概述1.1 K8S什么1.2为什么要用K8S 二、Kubernetes 集群架构与组件2.1Master组件Kube-apiserverKube-controller-managerKube-scheduler 2.2 配置存储中心etcd 2.3 Node 组件KubeletKube-Proxydocker 或 rocket 三、 Kubernetes 核心概念3.1Pod3.2Pod 控制器K…

WPF上位机5——C#运算符、特性、反射

C#运算符 按位操作 特性 预定义特性&#xff08;内置&#xff09; 自定义特性 通过特性获得数据表列的名称 反射 通过反射创建对象并调用对象的方法

【Vue组件eval方法的使用】

Vue页面中条件可以放在当前vue页面中而无需影响到组件 如 这是我的表格操作列按钮&#xff0c;需求是第四个按钮如果表格当前数据的is_execl字段为0则显示否则隐藏 这种条件判断很频繁 如果像之前一样给一个标识&#xff0c;页面多了就难以维护&#xff0c;而且判断条件如果不…

使用docker部署Wordpress

文章目录 1.创建网络2.创建volume存储3.拉取镜像4.创建mysql容器mysql修改密码 5.创建wordpress容器6.访问localhost:80就可以直接使用啦 1.创建网络 docker network create --subnet172.18.0.0/24 pro-net2.创建volume存储 # mysql 存储 docker volume create volume_mysql…

程序员成长之路心得篇——高效编码诀窍

随着AIGC的飞速发展&#xff0c;程序员越来越能够感受到外界和自己的压力。如何能够在AI蓬勃发展的时代不至于落后&#xff0c;不至于被替代&#xff1f;项目的开发效率起了至关重要的作用。 首先提出几个问题&#xff1a; 如何实现高效编程?高效编程的核心在于哪里&#xff…

无涯教程-Lua - 变量声明

变量的名称可以由字母&#xff0c;数字和下划线字符组成。它必须以字母或下划线开头&#xff0c;由于Lua区分大小写&#xff0c;因此大写和小写字母是不同的。 在Lua中&#xff0c;尽管无涯教程没有变量数据类型&#xff0c;但是根据变量的范围有三种类型。 全局变量(Global) …

功率信号源的输出阻抗是多大的

功率信号源是一种产生高功率信号的电子设备&#xff0c;它通常用于测试和测量、无线电通信、音频系统等领域。在实际应用中&#xff0c;功率信号源的输出阻抗对于整个电路的性能和准确性非常重要。 输出阻抗是指电路输出端产生的电阻值。在功率信号源中&#xff0c;输出阻抗通常…