当前位置: 首页 > news >正文

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

文章目录

  • 硬件
  • 安装Ubuntu Server20.04
    • 下载rpiboot工具
    • 下载imager
  • 刷写系统
  • 配置USB
  • 配置WIFI
  • 开机安装桌面
  • 配置wifi
  • 配置串口
  • 安装ROS
  • 安装mavros
  • 安装MAVSDK-Python
  • Internet设置
  • 最后

参考:
https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard

硬件

自己要买个树莓派cm4
建议是买带wifi和emmc版本的
此外袋子里面还有四个螺丝用来固定树莓派
在这里插入图片描述
侧面有一个开关,用来切换rpi/emmc
拨到rpi,配合rpiboot可以用来刷系统
刷完了拨到emmc就正常启动系统

安装Ubuntu Server20.04

下载rpiboot工具

Linux下面

sudo apt install libusb-1.0-0-dev
git clone --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
make
sudo ./rpiboot

Windows下面
这里下载

下载imager

imager

根据系统选择

刷写系统

把开关拨到rpi
用usb接cm4 slave到电脑
根据Windows/Linux运行rpiboot
在这里插入图片描述

cm4一侧的ACT和PWR灯会亮
在这里插入图片描述
然后打开imager,general purpose,Ubuntu,选择这个系统
在这里插入图片描述
这个要下载一会,也可以在这里下载https://cdimage.ubuntu.com/releases/focal/release/
下图这个,是64位的
在这里插入图片描述
然后在imager里面选自定义或者custom
在这里插入图片描述
然后选择树莓派烧录
在这里插入图片描述
再点击右下角齿轮,配置ssh用户名和密码,作为Ubuntu登录的用户名密码
wifi配置无所谓,反正不好使

烧录,需要二十分钟差不多

配置USB

在Linux下面可以访问boot盘(可能要再跑一次rpiboot)
在这里插入图片描述

在usercfg.txt里面添加

dtoverlay=dwc2,dr_mode=host

不然usb不会启动,CM4 Host的两个Type-C口不能外接设备

配置WIFI

在这里插入图片描述
写入:

wifis:wlan0:dhcp4: trueoptional: trueaccess-points:"你wifi的名字":password: "你wifi的密码"hidden: true

如果wifi可见,hidden就删了
可以参考这俩文章:
树莓派安装Ubuntu server无屏幕开机自动连接WIFI
树莓派4B安装Ubuntu Server20.04(18.04)连接wifi(对于ubuntu server 99%适用)
其中第二篇文章很有用,安装完图形化界面后还要设置wifi

开机安装桌面

断电,把开关拨到emmc,连接micro HDMI口到显示器,然后再用usb电源插入cm4 slave(电脑可能功率不足
此处要注意,先上电树莓派,启动后再上电fc的Type-C口给飞控和风扇供电,不然可能开机乱码
用电脑或者其他的开一个2.4G的wifi给cm4用
登录用户
安装桌面

sudo apt-get install ubuntu-desktop

然后重启,接个鼠标什么的到cm4 host

配置wifi

/etc/netplan/nano 50-cloud-init.yaml里面删干净,不然图形化界面看不到wifi列表

$ sudo netplan -debug try
$ sudo netplan -debug generate
$ sudo netplan -debug apply
$ reboot

如果用蓝牙

sudo apt-get install pi-bluetooth

配置串口

文档里面的raspi-config不好使!
所以要手动设置才行

ls -l /dev

可以看到串口列表,其中有两个是这样,目标是把他俩调换一下,serial0对应ttyAMA0
在这里插入图片描述

去/boot/firmware下面
找config.txt
修改:

enable_uart=1
dtoverlay=miniuart-bt.dtbo
cmdline=cmdline.txt

此处相当于用miniuart替换给了蓝牙
再找cmdline.txt
将console=ttyAMA0(或者serial0),115200的语句删除,改成这个样子

elevator=deadline net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash

此处相当于关掉了串口的console
然后重启,就变换了
在这里插入图片描述
查看串口配置

stty -F /dev/ttyAMA0 -a  #ttyAMA0为要查看的串口

配置串口

stty -F /dev/ttyAMA0 ispeed 921600 ospeed 921600 cs8

更改串口的权限,username可以在terminal输入whoami查看

sudo usermod -aG dialout username

可以安装一个cutecom,如果不用sudo就能打开这个串口,就证明配置好了

安装ROS

先在~/.bashrc里面配置代理,代理自寻,不然ros安装就是噩梦

export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

继续安装

# 添加ros软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'# 如果没有安装curl
sudo apt install curl# 设置密钥
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -# 更新软件源
sudo apt update# 安装ros
sudo apt install ros-noetic-desktop-full# 设置环境变量 
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc# 运行该脚本,让环境变量生效
source ~/.bashrc# 安装开发ROS必要的package
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential# 初始化
sudo rosdep init
rosdep update

运行roscore能得到下面这个就成功了
在这里插入图片描述

安装mavros

sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras  //安装MAVROS
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo bash ./install_geographiclib_datasets.sh   

参考文档配置pixhawk6x的telem2

- MAV_1_CONFIG: 102
- MAV_1_MODE: 2
- SER_TEL2_BAUD: 921600

运行mavros

roslaunch mavros px4.launch fcu_url:="/dev/ttyAMA0:921600"

得到
在这里插入图片描述

安装MAVSDK-Python

python3 -m pip install mavsdk
https://github.com/mavlink/MAVSDK-Python.git
cd MAVSDK-Python
sudo python3 setup.py install
sudo python3 setup.py build

然后进入example文件夹,修改一个文件,我用的是all_params.py

system_address="udp://:14540"

改为

system_address="serial:///dev/ttyAMA0:921600"

运行

python3 all_params.py

在这里插入图片描述

不知道为何我每次都得先install一下才可以

Internet设置

参考文档即可

最后

推荐一波obs studio配MS2130采集卡开发cm4,这个卡不到¥100就能1080p 60hz采集,良心的很
在这里插入图片描述

相关文章:

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

文章目录硬件安装Ubuntu Server20.04下载rpiboot工具下载imager刷写系统配置USB配置WIFI开机安装桌面配置wifi配置串口安装ROS安装mavros安装MAVSDK-PythonInternet设置最后参考: https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard…...

后端开发过程中的安全问题

安全问题是木桶效应,整个系统的安全等级取决于安全性最薄弱的那个模块。在写业务代码的时候,要从我做起,建立最基本的安全意识,从源头杜绝低级安全问题。 1、数据源头的安全处理 对于 HTTP 请求,我们要在脑子里有一个…...

基于Hyperledger Fabric的学位学历认证管理系统

基于Hyperledger Fabric的学位学历认证管理系统 项目源码:https://github.com/Pistachiout/Academic-Degree-BlockChain 一、选题背景 学历造假、认证造假等是一个全球日益普遍的现象,不仅对社会产生了巨大的负面影响,同时也极大增加了企业…...

jq条件判断验证,正则表达式

// 判断是否包含为至少8位及以上字符,大小写字母及特殊字符 jQuery.validator.addMethod("isPwd", function (value, element) { var pwdRegex new RegExp((?.*[0-9])(?.*[A-Z])(?.*[a-z])(?.*[^a-zA-Z0-9]).{8,30}); return this.optional(elemen…...

23.3.9打卡 AtCoder Beginner Contest 259

A题 题解 对于x特判一下就好 代码 void solve() {ll x,d;cin>>n>>m>>x>>t>>d;if(n>m){nmin(n,x);if(n<m){cout<<t;return;}cout<<(m-n)*dt;}else{mmin(m,x);cout<<(m-n)*dt;}return; }B 三角函数全还给高中老师了 题…...

JS - this指向

一 this 指向有哪几种 详细可见&#xff1a;https://juejin.cn/post/6844903805587619854 &#xff08;文章归类this指向为四大类&#xff09; https://www.jianshu.com/p/66eb9b21105d this是什么&#xff1f;this 就是一个指针&#xff0c;指向调用函数的对象。 1.默认绑定…...

低代码有哪些典型应用场景?

低代码有哪些典型应用场景&#xff1f; 低代码是一种全新的应用开发方式&#xff0c;它通过可视化的拖拽式界面&#xff0c;将传统的繁琐代码编写转化为简单的拖拽操作&#xff0c;让非技术人员也能够快速地开发出应用程序。 随着数字化转型的不断加速&#xff0c;低代码平台…...

Substrate 基础教程(Tutorials) -- 监控节点指标

Substrate 公开有关网络操作的度量。例如&#xff0c;您可以收集有关您的节点连接了多少个对等节点、您的节点使用了多少内存以及正在生成的块数量的信息。为了捕获和可视化Substrate节点公开的度量&#xff0c;您可以配置和使用Prometheus和Grafana等工具。本教程演示如何使用…...

lua table 详解

文章目录1.table 声明与访问2. table 的两种遍历方式 pairs 和 ipairs2.1 pairs2.2 ipairs2.3 例3.迭代器实现 ipairs 效果4.获取 table 长度4.1 #table 获取长度4.2 自定义函数获取 table 长度注意事项1.table 声明与访问 -- 初始化表 tbl {} -- 不可以是 tbl nil-- 赋值 -…...

Element表单嵌套树形表格的校验问题

普通嵌套 表单和表格是项目中最常见的项目&#xff0c;有时候就会遇到表格嵌套表单的情况&#xff0c;比如 这种形式的其实挺好处理的&#xff0c;如下&#xff1a; <el-form:model"states"ref"tableFormRef"label-width"80px"label-posit…...

1.webpack的基本使用

webpack是做工程化用的&#xff0c;并且可以对代码进行压缩(搞成min.js那样)&#xff0c;处理浏览器端JS兼容性&#xff0c;性能优化 vue-cli与webpack作用相同 目录 1 基本使用 1.1 引入场景 1.2 安装webpack 1.3 配置webpack 1.4 使用webpack 2 webpack.config.…...

面试必看:谈谈你所了解的JVM调优,JVM性能调优总结

文章目录从面试角度来谈谈你了解的JVM调优GC调优的步骤1.确定目标&#xff1a;2.优化参数3.验收优化结果GC优化案例一、Major GC和Minor GC频繁优化Minor GC频繁问题&#xff1a;1.可以适当增大新生代的内存二、请求高峰期发生GC&#xff0c;导致服务可用性降低优化标记停顿时间…...

Pytorch优化器Optimizer

优化器Optimizer 什么是优化器 pytorch的优化器&#xff1a;管理并更新模型中可学习参数的值&#xff0c;使得模型输出更接近真实标签 导数&#xff1a;函数在指定坐标轴上的变化率 方向导数&#xff1a;指定方向上的变化率&#xff08;二元及以上函数&#xff0c;偏导数&am…...

如何在MySQL 8中实现数据迁移?这里有一个简单易用的方案

文章目录前言一. 致敬IT领域的那些女性二. 进制方式安装MySQL2.1 下载软件包2.2 配置环境&#xff1a;2.2.1 配置yum环境2.2.2 配置安全前的系统环境2.3 开始安装2.4 初始化MySQL2.5 修改配置文件2.6 将MySQL设为服务并启动测试三. MySQL数据迁移总结前言 正好赶上IT女神节&am…...

java多线程(二三)并发编程:Callable、Future和FutureTask

一、Callable 与 Runnable 先说一下java.lang.Runnable吧&#xff0c;它是一个接口&#xff0c;在它里面只声明了一个run()方法&#xff1a; public interface Runnable {public abstract void run(); }由于run()方法返回值为void类型&#xff0c;所以在执行完任务之后无法返…...

day4分支和循环作业

基础题 根据输入的成绩的范围打印及格 或者不及格。 score 58 if score > 90:print(及格) else:print(不及格)根据输入的年纪范围打印成年或者未成年&#xff0c;如果年龄不在正常范围内(0~150)打印这不是人!。 age 52 if 0 < age < 18:print(未成年) elif 18 &l…...

轮毂要怎么选?选大还是选小?

随着改装车的越来越火爆&#xff0c;汽车轮毂可选择的款式也越来越多&#xff0c;90%的人换轮毂&#xff0c;首先选的就是外观。大轮毂的款式多&#xff0c;外形大气好看&#xff0c;运动感十足&#xff0c; 那是不是选大轮毂就可以呢&#xff1f;不是的&#xff0c;汽车轮毂要…...

RabbitMq 使用说明

1. 声明交换机和队列&#xff0c;以及交换机和队列绑定 import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.spr…...

Vue(10-20)

1Vue赋值方式 Object.defineProperty <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conten…...

C++-对四个智能指针:shared_ptr,unique_ptr,weak_ptr,auto_ptr的理解

回答如下&#xff1a; C的智能指针是一种特殊类型的“指针”&#xff0c;其主要目的是自动跟踪内存分配和释放&#xff0c;以避免程序中出现内存泄露或空悬指针等问题&#xff0c;主要采用的技术是&#xff1a;借助于类的生命周期&#xff0c;当超出了类的作用域时&#xff0c…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...