树莓派4b安装Ubuntu20.04及ROS并使用激光雷达建图

2023-05-16

 

一、安装Ubuntu20.04

1.1 镜像下载和烧录

树莓派的Ubuntu系统镜像可以在Ubuntu官网下载,Server是服务器版本,amd64代表64位,armhf代表32位,raspi3和raspi4分别代表树莓派3和树莓派4。

我们选择64位的Ubuntu Server 20.04.2 LTS

下载好后将系统烧写到卡里,树莓派官方出了一个烧写工具比较好用,也可以用balenaEtcher或者Win32DiskImager等其他工具。

 

1.2 使用SSH连接树莓派

SSH默认是安装的,可以直接连接,用户名和密码都是ubuntu,第一次登录会要求更改一个复杂一点儿的密码。

如果无法连接可以尝试把卡插在电脑上在system-boot目录新建一个ssh文件(没有后缀)

Mac可以直接在终端输入:

touch /Volumes/system-boot/ssh

 之后将卡插入树莓派开机即可。

第一次开机推荐直接使用网线连接电脑,容易获取树莓派的IP地址,如果电脑连网的话树莓派也会自动连网。

如果Mac已经连网,用网线连接树莓派后在终端输入:

arp -a

找到后缀为[bridge]的IP就是树莓派的IP地址。

树莓派开机后在终端输入:

ssh ubuntu@192.168.2.4        //改为你树莓派的IP地址

就可以使用ssh连接树莓派了。

Windows可以用putty连接。

 

1.3 更换国内源

命令行输入:

sudo su                //切换为root用户
nano /etc/apt/sources.list

把所有的url全换为https://mirrors.ustc.edu.cn/ubuntu-ports/

之后

sudo apt-get update
sudo apt-get upgrade

 

1.4 安装桌面

sudo apt-get install ubuntu-desktop

等待安装完成后重启树莓派就可以进入桌面了

sudo reboot

1.5 打开VNC

Ubuntu自带屏幕共享的功能,但必须要插上屏幕才能使用VNC连接。

在设置中找到Sharing中的Screen Sharing

需要先连接一个wifi才能打开

现在连接会报错,需要安装dconf-editor:

sudo apt-get install dconf-editor

打开dconf Editor,在/org/gnome/desktop/remote-acess/

中关闭require-encryption

之后就可以使用wifi的IP地址进行vnc连接了。

 

二、安装ROS

 

ROS的安装可以参考官网的教程。

2.1 添加ROS源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

这个源的速度可以接受,也可使用国内源,但有的源会404。

设置密钥:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

也可以使用curl代替apt-key:

curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -

更新软件包列表:

sudo apt-get update

 

2.2 安装ROS

有好多版本可选,这里我们安装最全的

sudo apt install ros-noetic-desktop-full

注意这里的noetic,Ubuntu20.04对应的版本号是noetic,如果添加源后无法找到包的话可以检查一下版本号是否和系统版本对应。

 

如果还是找不到包的话可以使用命令找一下有哪些包可用,并安装可用的包

sudo apt-cache search ros-noetic

 

2.3 配置环境变量

Bash:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

zsh:

echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc

 

2.4 安装依赖包

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

注意这里都是python3,有些18.04的教程是python,会出现问题。

 

2.3 初始化rosdep

sudo rosdep init
rosdep update

到这里ROS就安装好了,可以用小乌龟测试一下,这里就不写了,直接使用激光雷达。

 

三、测试激光雷达

这里使用的是思岚A1激光雷达,其他激光雷达方法类似。

3.1 安装思岚激光雷达包

新建一个文件夹并clone

mkdir -p ~/rplidar_test/src
cd ~/rplidar_test/src
git clone https://gitee.com/h_yun/rplidar_ros.git

从GitHub clone速度可能会很慢,这里用的是是我导入码云后的链接。

编译

cd ..
catkin_make

3.2配置环境变量

source /turtlebot_ws/devel/setup.bash

3.4配置端口权限

将激光雷达连接树莓派

ls -l /dev |grep ttyUSB
sudo chmod a+rw /dev/ttyUSB0

3.5测试

命令行输入

roscore

打开另一个终端

cd ~/rplidar_test/src
. devel/setup.bash
roslaunch rplidar_ros view_rplidar.launch

这时会发现激光雷达停转一下后继续转,之后就能在屏幕上可以看见图像了

这样就说明环境已经配置好了,雷达正常工作。

参考[ROS学习笔记]ROS中使用激光雷达(RPLIDAR)

 

四、使用hector_mapping建图

这里参考思岚A1激光雷达hector_mapping建图与定位

 

4.1 安装hector_mapping:

sudo apt-get install ros-noetic-hector-slam

如果之前安装的是ros-noetic-desktop-full,那么就可以直接进行下一步了。

 

4.2 新建一个launch文件

nano ~/rplidar_test/src/rplidar_ros/launch/test0.launch

内容如下:

<launch>

<include file="$(find rplidar_ros)/launch/rplidar.launch" />

<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<!-- Frame names -->
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />


<!-- Tf use -->
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>


<!-- Map size / start point -->
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="512"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
<param name="map_multi_res_levels" value="2" />


<param name="map_pub_period" value="2" />
<param name="laser_min_dist" value="0.4" />
<param name="laser_max_dist" value="5.5" />
<param name="output_timing" value="false" />
<param name="pub_map_scanmatch_transform" value="true" />
<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->


<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.7" />    
<param name="map_update_distance_thresh" value="0.2"/>
<param name="map_update_angle_thresh" value="0.06" />


<!-- Advertising config --> 
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>


<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>


  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>


</launch>

原文中有较为详细的代码解释,可以参考一下。

 

4.4启动RVIZ

roscoe

打开另一个终端:

cd ~/rplidar_test/src
. level/steup.bash
roslaunch rplidar_ros view_rplidar.launch

这时就可以看见二维图像了

至此,环境的配置就全部结束了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派4b安装Ubuntu20.04及ROS并使用激光雷达建图 的相关文章

  • 信号signal编程测试

    信号会打断系统调用 xff0c 慎用 xff0c 就是用的时候测一测 下面是信号的基础测试 信号 信号 xff08 signal xff09 机制是UNIX系统中最为古老的进程之间的通信机制 它用于在一个或多个进程之间传递异步信号 信号可以
  • 线程间通讯的信号量semaphore.h

    sem init SEM INIT 3 Linux Programmer 39 s Manual SEM INIT 3 NAME sem init initialize an unnamed semaphore SYNOPSIS inclu
  • posix线程的优先级测试

    测试的时候 xff0c 如果创建的线程不够多 xff0c 有些问题体现不出来 xff0c 例如pthread cond signal和pthread cond broadcast 奇怪的优化是不会有好结果的 优先级打印 xff1a 测试目的
  • getpwent系统调用

    getpwent系统调用 NAME getpwent setpwent endpwent get password file entry SYNOPSIS include lt sys types h gt include lt pwd h
  • 调试信息:linux彩色调试信息的输出

    一 printf实现的宏 测试代码 xff1a include lt sys types h gt include lt pwd h gt include lt stdio h gt include lt stdlib h gt defin
  • UML里面静态建模及动态建模都有哪些图?

    静态建模 xff1a 创建并建立一个系统的静态特征 1 用例图 xff1a 描述系统功能及功能的使用者 2 类 图 xff1a 表现系统里实体的关系 责任 类和类之间的关系 xff0c 属性及方法 3 对象图 xff1a 当类图不能完全显示
  • warning: ISO C++11 requires at least one argument for the “...“ in a variadic macro

    关于警告 xff1a warning ISO C 43 43 11 requires at least one argument for the 34 34 in a variadic macro 相关代码如下 xff0c 把下面的代码放到
  • IMX6开发板设置DHCP功能和验证DNS功能

    一 udhcpc命令 root 64 host udhcpc help BusyBox v1 29 3 2022 11 09 15 51 05 CST multi call binary Usage udhcpc fbqRB a MSEC
  • 常用端口号/etc/services

    etc services文件存储的内容 记录一下 xff0c 防止忘记 etc services Id services v 1 1 2004 10 09 02 49 18 andersen Exp Network services Int
  • 网络字节序和主机字节序转换函数

    大小端判断 include lt stdio h gt include lt stdint h gt int is little endian union uint32 t num uint8 t c e e num 61 1 return
  • 在ubuntu连接Xlight FTP Server

    一 在windows上搭建服务器 http www xlightftpd com download htm 使用英文版 xff0c 使防止在ubuntu中登录中文版时 xff0c 显示乱码 新建用户和用户对应的服务器目录 如下所示 xff0
  • xinetd服务

    检查xinetd服务是否安装 lkmao 64 ubuntu ps au grep xinetd lkmao 2536 0 0 0 1 11760 2172 pts 0 S 43 06 17 0 00 grep color 61 auto
  • ssh免密登录mobaxterm使用方法

    1 如果要在服务器上添加两个公钥 xff0c 在服务器 ssh authorized keys上添加公钥 xff0c 在第一个公钥的下一行添加第二个公钥即可 xff1b 2 在mobaxterm上使用公私钥免密登录时 xff0c 需要在se
  • eclipse和ubuntu使用小技巧

    1 在当前界面查找某一关键字ctrl 43 f 然后在当前界面切换关键字下一个是ctrl 43 k 上一个是ctrl 43 shift 43 k 2 打开一个新的页面要激活输入法切换是ctrl 43 sapce
  • 关于pixhawk2.1+px4 1.7.3stable出现mag sensors inconsistent问题分析

    因为前两天在学校测试代码时 xff0c 飞机在mission模式下突然出现在每一个mission点都会停留两三分钟的问题 xff0c 而且偏航还一直在旋转 xff0c QGC上也会提示mag sensors inconsistent 于是考
  • px4+pixhawk2.1使用出现无sensors问题

    今天外场试飞突然发现地面站无法检测到sensors xff0c 距离上一次正常试飞没有进行任何操作 xff0c 怀疑可能是飞控板子上面的cube接触不良 xff0c 于是重新安装了下还是不能解决问题 xff0c 重新刷px4官方固件也是不能
  • Ubuntu安装之后卡顿解决方法

    前两天刚为电脑装了Ubuntu18 04 xff0c 然后发现很卡 这就奇怪了 xff0c 我这电脑在Windows运行还挺流畅的 xff0c 难道是系统是真的卡 xff1f 后来百度之后 xff0c 发现可能是以下两点原因 xff1a 1
  • AdGuard Home 安装使用教程

    原文链接 xff1a 使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时 xff0c 宽带运营商会为我们分配一个 DNS 服务器 这个 DNS 通常是最快的 xff0c 距离最近的服务器 xff0c 但会有很
  • gdb调试段错误

    https blog csdn net Deutschester article details 6739861
  • 嵌入式开发:C++在深度嵌入式系统中的应用

    深度嵌入式系统通常在C语言中实现 为什么会这样 这样的系统是否也能从C 43 43 中获益 嵌入式开发人员在将广泛 高效的深度嵌入式代码库从C转换为C 43 43 方面的实践经验的贡献 嵌入式和深度嵌入式系统通常用C而不是C 43 43 实

随机推荐