自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 11机器人系统仿真

机器人系统仿真相关组件1.URDFURDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件2.rvizRViz 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维

2022-04-12 09:52:15 4930 1

原创 09ROS分布式通信

ROS分布式通信ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。因此,ROS对网络配置有某些要求:所有端口上的所有机器之间必须有完整的双向连接。每台计算机必须通过所有其他计算机都可以解析的名称来公告自己。实现准备先要保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式;配置文件修改分别修改不同计算机的 /etc/hosts 文件,在该文件中加

2022-04-12 09:50:34 164

原创 07ROS重名问题

ROS重名问题ROS工作空间覆盖所谓工作空间覆盖,是指不同工作空间中,存在重名的功能包的情形。ROS 开发中,会自定义工作空间且自定义工作空间可以同时存在多个,可能会出现一种情况: 虽然特定工作空间内的功能包不能重名,但是自定义工作空间的功能包与内置的功能包可以重名或者不同的自定义的工作空间中也可以出现重名的功能包,那么调用该名称功能包时,会调用哪一个呢?比如:自定义工作空间A存在功能包 turtlesim,自定义工作空间B也存在功能包 turtlesim,当然系统内置空间也存在turtlesi

2022-04-12 09:46:55 485

原创 06Launch文件

launch文件关于 launch 文件的使用我们已经不陌生了,在第一章内容中,就曾经介绍到:一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?采用的优化策略便是使用roslaunch 命令集合 launch 文件启动管理节点,并且在后续教程中,也多次使用到了 launch 文件。概念launch 文件是一个 XML 格式的文件

2022-04-12 09:45:56 1186 1

原创 05ROS运行管理

ROS运行管理ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现:可能包含多台主机;每台主机上又有多个工作空间(workspace);每个的工作空间中又包含多个功能包(package);每个功能包又包含多个节点(Node),不同的节点都有自己的节点名称;每个节点可能还会设置一个或多个话题(topic)…在多级层深的ROS系统中,其实现与维护可能会出现一些问题,比如,如何关联不同的功能包,繁多的ROS节点应该如何启动?功能包、节点、话题、参数重名时应该如何处理?不同主机上的节点如

2022-04-12 09:43:30 196

原创 05ROS运行管理

ROS运行管理ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现:可能包含多台主机;每台主机上又有多个工作空间(workspace);每个的工作空间中又包含多个功能包(package);每个功能包又包含多个节点(Node),不同的节点都有自己的节点名称;每个节点可能还会设置一个或多个话题(topic)…在多级层深的ROS系统中,其实现与维护可能会出现一些问题,比如,如何关联不同的功能包,繁多的ROS节点应该如何启动?功能包、节点、话题、参数重名时应该如何处理?不同主机上的节点如

2022-04-12 09:36:48 107

原创 04ROS中的头文件与源文件

ROS中的头文件与源文件本节主要介绍ROS的C++实现中,如何使用头文件与源文件的方式封装代码,具体内容如下:设置头文件,可执行文件作为源文件;分别设置头文件,源文件与可执行文件。在ROS中关于头文件的使用,核心内容在于CMakeLists.txt文件的配置,不同的封装方式,配置上也有差异。自定义头文件调用**需求:**设计头文件,可执行文件本身作为源文件。流程:编写头文件;编写可执行文件(同时也是源文件);编辑配置文件并执行。头文件在功能包下的 include/功能包名 目

2022-04-12 09:35:48 376

原创 04Python常用API-cnblog

Python常用API初始化def init_node(name, argv=None, anonymous=False, log_level=None, disable_rostime=False, disable_rosout=False, disable_signals=False, xmlrpc_port=0, tcpros_port=0): """ 在ROS msater中注册节点 @param name: 节点名称,必须保证节点名称唯一,节点名称中不能使用命名空间(

2022-04-12 09:34:05 162

原创 04C++常用API

C++常用API初始化/** @brief ROS初始化函数。 * * 该函数可以解析并使用节点启动时传入的参数(通过参数设置节点名称、命名空间...) * * 该函数有多个重载版本,如果使用NodeHandle建议调用该版本。 * * \param argc 参数个数(n+1) * \param argv 封装参数的数组 * \param name 节点名称,需要保证其唯一性,不允许包含命名空间 * \param options 节点启动选项,被封装进了ros::init_opt

2022-04-12 09:29:16 498

原创 03常用命令

常用命令机器人系统中启动的节点少则几个,多则十几个、几十个,不同的节点名称各异,通信时使用话题、服务、消息、参数等等都各不相同,一个显而易见的问题是: 当需要自定义节点和其他某个已经存在的节点通信时,如何获取对方的话题、以及消息载体的格式呢?在 ROS 同提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下:rosnode : 操作节点rostopic : 操作话题rosservice : 操作服务rosmsg : 操作msg消息rossrv : 操作srv消息ros

2022-04-12 09:26:37 102

原创 02参数服务器

参数服务器参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关于参数服务器的典型应用场景如下:导航实现时,会进行路径规划,比如: 全局路径规划,设计一个从出发点到目标点的大致路径。本地路径规划,会根据当前路况生成时时的行进路径上述场景中,全局路径规划和本地路径规划时,就会使用到参数服务器:路径规划时,需要参考小车的尺寸,我们可以将这些尺寸信息存储到参数服务器,全

2022-04-11 22:18:56 243

原创 01ROS通信

ROS通信话题通信话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,比如下面一个常见场景:机器人在执行导航功能,使用的传感器是激光雷达,机器人会采集激光雷达感知到的信息并计算,然后生成运动控制信息驱动机器人底盘运动。在上述场景中,就不止一次使用到了话题通信。以激光雷达信息的采集处理为例,在 ROS 中有一个节点需要实时的发布当前雷达采集到的数据,导航模块中也有节点会订阅并解析雷达数据。再以

2022-04-11 22:08:16 495

原创 01查找算法

二分查找法{1,8, 10, 89, 1000, 1234}二分查找的思路分析首先确定该数组的中间的下标​ mid = (left + right) / 2然后让需要查找的数 findVal 和 arr[mid] 比较2.1 findVal > arr[mid] , 说明你要查找的数在mid 的右边, 因此需要递归的向右查找2.2 findVal < arr[mid], 说明你要查找的数在mid 的左边, 因此需要递归的向左查找2.3 findVal == arr[mid

2021-11-28 20:02:49 216

原创 39 return和break的区别

return;表示结束当前方法。break;可以使流程跳出switch语句体,也可以用break语句在循环结构终止本层循环体,从而提前结束本 层循环。package com.itheima;import java.util.Scanner;/** * @author Macrydy **/public class Demo { public static void main(String[] args) { Scanner scanner = new Scanner

2021-11-28 20:02:33 144

原创 38 Map集合

1.1 Map集合概述和特点【理解】Map集合概述 :interface Map<K,V> K:键的类型;V:值的类型 Map集合的特点键值对映射关系一个键对应一个值键不能重复,值可以重复元素存取无序Map集合的基本使用 ://创建集合对象Map<String,String> map = new HashMap<String,String>();//V put(K key, V value) 将指定的值与该映射中的指定键相关联ma

2021-11-28 20:02:19 134

原创 37 字符流

1.1 为什么会出现字符流【理解】字符流的介绍由于字节流操作中文不是特别的方便,所以Java就提供字符流字符流 = 字节流 + 编码表中文的字节存储方式用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文的呢?汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数1.2 编码表【理解】什么是字符集是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等l计算机要准确的存储和识别各种字符集符号,

2021-11-21 15:48:06 121

原创 36 IO流

1.1 IO流介绍IO:输入/输出(Input/Output)流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载IO流的分类按照数据的流向输入流:读数据输出流:写数据按照数据类型来分字节流字节输入流字节输出流字符流字符输入流字符输出流IO流的使用场景如果操作的是纯文本文件,优先使用字符流如果操作的是图片、

2021-11-21 15:47:35 57

原创 35 递归

递归的介绍以编程的角度来看,递归指的是方法定义中调用方法本身的现象把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。//输出什么?public static void test(int n) {if (n > 2) { test(n - 1);}System.out.println.

2021-11-21 15:47:04 82

原创 34 File类

1.1 File类概述和构造方法【应用】File类介绍它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的File类的构造方法方法名说明File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例File(String paren

2021-11-21 15:46:20 48

原创 33Set集合

1.1 Set集合概述和特点Set集合的特点元素存取无序没有索引、只能通过迭代器或增强for循环遍历不能存储重复元素1.2 哈希值【理解】哈希值简介是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值如何获取哈希值Object类中的public int hashCode():返回对象的哈希码值哈希值的特点同一个对象多次调用hashCode()方法返回的哈希值是相同的默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同

2021-11-21 15:42:28 602

原创 32List集合

1.1 List集合概述和特点【记忆】List集合概述有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素与Set集合不同,列表通常允许重复的元素List集合特点有索引可以存储重复元素元素存取有序/* List集合特点 有序:存储和取出的元素顺序一致 可重复:存储的元素可以重复 */public class ListDemo01 { public static

2021-11-21 15:40:51 108

原创 29时间日期类-cnblog

1. 时间日期类1.1 Date类(应用)Date类概述Date 代表了一个特定的时间,精确到毫秒Date类构造方法方法名说明public Date()分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒public Date(long date)分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数public class DateDemo01 { public static void main(Strin

2021-11-21 15:39:34 72

原创 28Integer类-cnblog

1. 基本类型包装类(记忆)基本类型包装类的作用将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据常用的操作之一:**用于基本数据类型与字符串之间的转换 **基本类型对应的包装类基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean/* 基

2021-11-21 15:39:22 179

原创 31Collection集合-cnblog

1. Collection集合1.1 集合体系结构【记忆】集合类的特点提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变集合类的体系图1.2 Collection集合概述和基本使用【应用】Collection集合概述是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现Collection集合基本使用import java.util.ArrayList;

2021-11-21 15:38:56 101

原创 30异常-cnblog

1. 异常1.1 异常(记忆)异常的概述异常就是程序出现了不正常的情况异常的体系结构1.2 JVM默认处理异常的方式(理解)如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:把异常的名称,错误原因及异常出现的位置等信息输出在了控制台程序停止执行1.3 try-catch方式处理异常(应用)定义格式try { 可能出现异常的代码;} catch(异常类名 变量名) { 异常的处理代码;}执行流程程序从

2021-11-21 15:38:43 173

原创 27冒泡排序-cnblog

1. 冒泡排序冒泡排序概述一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序如果有n个数据进行排序,总共需要比较n-1次每一次比较完毕,下一次的比较就会少一个数据参与2. 冒泡排序代码实现(理解)/* 冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序

2021-09-30 17:28:39 146

原创 26Object类-cnblog

1 Object类的toString方法(应用)Object类概述Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份查看方法源码的方式选中方法,按下Ctrl + B重写toString方法的方式Alt + Insert 选择toString在类的空白区域,右键 -> Generate -> 选择toStringtoString方法的作用

2021-09-30 17:28:27 80

原创 25System-cnblog

1 System(应用)System类的常用方法方法名说明public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止public static long currentTimeMillis()返回当前时间(以毫秒为单位)代码需求:在控制台输出1-10000,计算这段代码执行了多少毫秒public class SystemDemo { public static void main(Str

2021-09-30 17:28:08 63

原创 24Math-cnblog

1 Math(应用)1、Math类概述Math 包含执行基本数字运算的方法2、Math中方法的调用方式Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名**.**进行调用3、Math类的常用方法方法名 方法名说明public static int abs(int a)返回参数的绝对值public static double ceil(double a)返回大于或等于参数的最小double值,等于一个整 数public st

2021-09-30 17:27:46 50

原创 23内部类-cnblog

1. 内部类1.1 内部类的基本使用(理解)内部类概念在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类内部类定义格式格式&举例:/*格式: 内部类格式: public class 类名{ 修饰符 class 类名{ } }*/class Outer { public class Inner { }}内部类的访问特点

2021-09-30 17:27:12 58

原创 22参数传递-cnblog

1. 参数传递1.1 类名作为形参和返回值(应用)1、类名作为方法的形参方法的形参是类名,其实需要的是该类的对象实际传递的是该对象的【地址值】2、类名作为方法的返回值方法的返回值是类名,其实返回的是该类的对象实际传递的,也是该对象的【地址值】示例代码:class Cat { public void eat() { System.out.println("猫吃鱼"); }} class CatOperator { public

2021-09-30 17:26:52 53

原创 21类和接口-cnblog

1. 类和接口的关系类与类的关系继承关系,只能单继承,但是可以多层继承类与接口的关系实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口public class InterImpl extends Object implements Inter1,Inter2,Inter3 {}接口与接口的关系继承关系,可以单继承,也可以多继承public class InterImp implements Inter1,Inter2,Inter3 {}2.

2021-09-30 17:26:28 43

原创 20接口-cnblog

1. 接口1.1 接口的概述(理解)接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。Java中的接口更多的体现在对行为的抽象1.2 接口的特点(记忆)接口用关键字interface修饰public interface 接口名 {}public interface Jumpping{ public abstract void jump();}类实现接口用implements表示public class 类名 implements 接口名 {}publ

2021-09-30 17:26:02 136

原创 19抽象类-cnblog

1. 抽象类抽象类概述当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!1.2 抽象类的特点抽象类定义和抽象方法必须使用 abstract 关键字修饰//抽象类的定义public abstract class 类名 {}//抽象方法的定义public abstract void eat();抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

2021-09-30 17:25:46 57

原创 18多态-cnblog

1. 多态1.1 多态的概述什么是多态同一个对象,在不同时刻表现出来的不同形态多态的前提要有继承或实现关系要有方法的重写要有父类引用指向子类对象1.2 多态中的成员访问特点(记忆)成员访问特点成员变量编译看父类,运行看父类成员方法编译看父类,运行看子类代码演示:动物类:public class Animal { public int age = 40; public void eat() { System.

2021-09-30 17:25:15 69

原创 17修饰符-cnblog

1. 修饰符1.1 package(了解)1、包的概念包就是文件夹,用来管理类文件的2、包的定义格式package 包名; (多级包用.分开)例如:package com.heima.demo;3、带包编译&带包运行带包编译:javac –d . 类名.java例如:javac -d . com.heima.demo.HelloWorld.java带包运行:java 包名+类名例如:java com.heima.demo.HelloWorld

2021-09-20 12:08:38 64

原创 16继承-cnblog

# 1. 继承1.1 继承概述格式public class 子类名 extends 父类名{}范例定义员工类Employee/* * 定义员工类Employee */class Employee { String name; // 定义name属性 // 定义员工的工作方法 public void work() { System.out.println("尽心尽力地工作"); }}定义研发部员工类Developer 继承 员工类Employee/*

2021-09-20 12:08:04 77

原创 15集合基础ArrayList-cnblog

1. 集合基础1.1 集合概述1.2 Array List构造方法和添加方法import Java_Learning.util.ArrayList;public class way_to_use { public static void main(String[] arrgs){ //ArrayList构造方法 ArrayList<String> arr = new ArrayList<String>(); //

2021-09-20 12:06:14 48

原创 14StringBuilder-cnblog

1. StringBuider1.1 StringBuilder概述String和StringBuilder的区别:String:内容是不可变的StringBuilder:内容是不可变的1.2 StringBuilder的构造方法public class way_to_use { public static void main(String[] args) { //public StringBuilder():创建一个空白可变字符串对象,不含有任何内容

2021-09-20 12:05:32 63

原创 13String-cnblog

1. String1.1 String 概述1.2 String 构造方法推荐使用直接赋值的方式来使用字符串对象//public String():创建一个空白字符串对象,不含有任何内容String s1 = new String();System.out.println("s1"+s1);//public String(char[] chs):根据字符数组的内容,来创建字符串对象char[] chs = {'a','b','c'};String s2 = new String

2021-09-20 12:04:58 75

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除