(在vmware上安装)#方便后面的调试
首先,需要我们去官网下载镜像文件,但是由于官方的服务器搭建在境外,因此我们更倾向于使用国内镜像进行下载,比如清华大学镜像,一般来说,比较常用的是16.04和18.04版本,这里我选择了18.04版本。
(在nano上安装)
①、 Jetson nano 开发套件,厂家标配;
②、 MicroSD 卡,至少 32GB和读卡器;
③、 5V, 2A 电源。
④、网线。
①、下载 jetson nano系统镜像
官网下载地址:https://developer.nvidia.com/jetson-nano-sd-card-image
②、下载 SD卡格式化软件-- SD Card Formatter(用来处理内存卡烧录失败的情况,烧录系统的时候会将sd卡分多个区,使用这个软件可以直接格式化F盘)
官网下载地址: https://www.sdcard.org/downloads/formatter_4/eula_windows
③、将镜像文件写入microSD卡-- Etcher(或者Win32DiskImager)
a、官网下载地址: https://www.balena.io/etcher
b、官网下载地址: http://starplatinumora.top/images/file/tool/win32diskimager-1.0.0-install.exe
之后就是等待了,大概是20,30分钟。
①、将内存卡插入到jeston Nano卡槽中(nano)
开机
nano官方英伟达的ubuntu安装的很快,但是vmware下挺慢的,主要是nano的ubuntu功能简单一点没有集成化太多。
(vmware环境下)打开软件和更新弹窗
在Ubuntu软件这里点击右边红色框,选择其他站点
测试完之后选择服务器就行,点击关闭就行。
最后在终端更新一下:
sudo apt-get update
nano环境下的ubuntu版本简陋没有这个界面
不过可以先输入
wget http://fishros.com/install -O fishros && . fishros
换源成功后,更新一下
sudo apt-get update
终端输入上面命令进行安装ros,会自动帮我们检测环境依赖
(注意版本不同对应的ros版本不同)
ubuntu版本 Ros版本
Ubuntu14.04 Ingigo
Ubuntu16.04 Kinetic
Ubuntu18.04 Melodic
Ubuntu20.04 Noetic
这里我选择1,然后进到下一个选择
详细看原文链接:https://blog.csdn.net/jin15203846657/article/details/125849049
之后跑下ros测试(分别打开3个终端测试)
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
安装计算图
sudo apt install ros-melodic-rqt
sudo apt install ros-melodic-rqt-common-plugins
计算图演示
运行案例
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
直接在终端窗口中输入
rosrun rqt_graph rqt_graph
安装
sudo apt-get install ros-melodic-rosserial-arduino
sudo apt-get install ros-melodic-rosserial
roscore
打开 ROS终端
rosrun rosserial_arduino make_libraries.py [PathToYourSketchbookLibraries]
下载与ROS相关的文件ros_lib到用户文件夹下的PathToYourSketchbookLibraries文件夹
打开arduino IDE
之后编译运行,上传
打开一个新的终端,输入
roscore
此时arduino就相当于ROS上的一个结点:(插上板子,在串口那儿查看自己的串口,一般是dev下面tty啥啥啥的 )
如果arduin上没有显示端口,应该是没有识别到开发板,在下面选择自己的开发板
如果还没有识别到,首先先检查自己的开发板是否没坏,是正版的。
然后就是就是检查驱动程序
详情,可看http://t.csdn.cn/qvO6K
这种情况还是比较少的,大部分都是板子的问题。
运行节点
rosrun rosserial_python serial_node.py /dev/自己板子的端口
rostopic echo /chatter
如果使用串口的话,需要给予串口权限
sudo chmod 666 /dev/自己的端口
使用Python的pyserial库对串口进行通信
import serial
import time
ser = serial.Serial('/dev/自己的端口',9600)#设置波特率为9600
time.sleep(2)
ser.write('f'.encode()) #对串口进行写入
ser.close #关闭串口
安装插件(根据自己的编码习惯,其中c/c++和CMakeTool,python,ROS为必要的开发工具。
安装中文输入法(方便写注释)
用shift切换中英输入法
2.mkdir -p 工作空间/src
在工作空间下catkin_make
2.在工作空间下 code . 打开vscode
快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build
配置编译工具
修改
{
// 有关 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"
}
]
}
3.创建 ROS 功能包
选定 src 右击 ---> create catkin package
设置包名 添加依赖
包名命名一般命名为功能介绍
添加依赖为
roscpp rospy std_msgs
4. 创建scripts文件夹(编写python文件要在包的文件下创建scripts文件夹,python文件在里面进行编写)
编写代码
#! /usr/bin/env python
# coding=UTF-8
'''
Python 版本的 HelloVScode,执行在控制台输出 HelloVScode
实现:
1.导包
2.初始化 ROS 节点
3.日志输出 HelloWorld
'''
import rospy # 1.导包
if __name__ == "__main__":
rospy.init_node("Hello_Vscode_p") # 2.初始化 ROS 节点
rospy.loginfo("................................") #3.日志输出 HelloWorld
rospy.loginfo("................................")
rospy.loginfo(".......1234.................")
其中#!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。
# coding=UTF-8是防止中文乱码
5.为 python 文件添加可执行权限
6.配置 CMakeLists.txt
7.编译执行
编译: ctrl + shift + B(vscode的快捷键)
执行: 和之前一致,只是可以在 VScode 中添加终端,首先执行:source ./devel/setup.bash
配置工作空间时,source devel/setup.bash命令用于刷新环境,编译完成后必须使用source命令刷新一下工作空间的环境。每次进行catkin_make之后,都要进行source devel/setup.bash,进行package创建时,当加入新的package并编译完成后,也要进行source devel/setup.bash刷新环境,否则会出现package XXX not found 的问题。由于我在使用时,经常忘记source,所以我将source devel/setup.bash命令添加到了.bashrc文件中,让系统自动刷新工作空间环境,这样,在这个工作空间下的所有package都可以在编译后直接运行了,不用再source devel/setup.bash
运行ros环境
roscore
执行
#在vscode下打开终端
source ./devel/setup.bash #刷新环境变量
rosrun 包名 自定义文件名.py #运行程序
结果
如果不编译直接执行 python 文件,会抛出异常
1.第一行解释器声明,可以使用绝对路径定位到 python3 的安装路径 #! /usr/bin/python3,但是不建议
2.建议使用 #!/usr/bin/env python 但是会抛出异常 : /usr/bin/env: “python”: 没有那个文件或目录
3.解决1: #!/usr/bin/env python3 直接使用 python3 但存在问题: 不兼容之前的 ROS 相关 python 实现
4.解决2: 创建一个链接符号到 python 命令:
sudo ln -s /usr/bin/python3 /usr/bin/python
launch文件的作用
launch文件可以用来同时启动多个节点。其基本思想是在一个XML格式的文件内将需要同时启动的一组节点罗列出来。
常见的launch文件
node ---> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
output-> 输出
output="screen在多节点时输出信息到日志上
运行launch文件
roslaunch 包名 launch文件名
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: 编译的基本配置