小言_互联网的博客

香橙派3LTS部署ROS2阿克曼开源平台

396人阅读  评论(0)

1.系统镜像下载

  1. 这里我们需要安装ROS2的humble版本,需要ubuntu 22.04版本的系统。

  2. 香橙派镜像下载:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3-LTS.html

  3. 点击Ubuntu镜像,选择jammy桌面版或者服务器版,如下图所示

2.系统镜像安装

  1. 插入读卡器,使用SD Card Formatter软件 格式化SD卡
  2. 选好盘符,点击Format,点击弹窗确认,如下图所示:

  1. 打开Win32Disklmanger软件,然后选择 你需要安装的*.img文件,点击写入,等待写入完成,如下图所示:

3.配网以及xshell连接香橙派

  1. 香橙派连接wifi,获得IP地址
  2. 客户端和香橙派连接同一个局域网
  3. 打开xshell,新建一个链接
  4. 用户名:orangepi ,密码:orangepi

4.环境准备

# 0. 可通过配置选择关闭桌面版 (非必选)
sudo orangepi-config 

# 1. ROS2安装
wget http://fishros.com/install -O fishros && . fishros   # 1 、1、2、3、1、2

# 2. 安装键盘控制功能包
sudo apt-get install ros-humble-teleop-twist-keyboard

# 3. 安装机器人描述功能包需要使用的相关功能包
sudo apt-get install ros-humble-xacro 
sudo apt-get install ros-humble-joint-state-publisher

# 4. 卸载brltty程序,防止ttyUSB端口被占用
sudo apt-get purge brltty   # 删除端口占用

# 5. 安装boost,串口通信程序需要,香橙派版默认没有安装
sudo apt-get install libboost-dev 

# 6. reboot,到这里环境就准备ok了。
reboot

## -----------------------------------------------------------------------------------
## 若出现包更新错误
E: 读错误 - read (5: 输入/输出错误)
E: 无法解析或打开软件包的列表或是状态文件。


# 英文是:

E:Read error - read (5 Input/output error),
E:The package lists or status file could not be parsed or opened.

刚开始是以为分区有错,所以用ubuntu的启动盘运行fsck -f /dev/sdX,检查根目录分区,但是问题依旧。

# 解决办法是:

sudo rm /var/lib/dpkg/status
sudo cp /var/lib/dpkg/status-old  /var/lib/dpkg/status
sudo rm -rf /var/lib/apt/lists/*

sudo apt-get update

# 问题解决。
## -----------------------------------------------------------------------------------

 

5.阿克曼小车驱动功能包相关准备

1.打开一个终端,新建ROS2工作空间文件夹

mkdir -p ~/ros2_ws/src

2.将分享的ROS2相应的功能包文件拷贝到src目录下

## 拷贝后文件结构如下
.
└── src
    ├── mbot_bringup
    ├── mbot_description
    └── sllidar_ros2-humble

3.打开终端,进入工作空间目录下,编译功能包

cd ~/ros2_ws
colcon build # 一起编译,若出现编译错误,可以单个单个编译功能包

colcon build --packages-select mbot_description
colcon build --packages-select mbot_bringup
colcon build --packages-select sllidar_ros2

编译成功后,终端将打印类似如下的信息

Starting >>> mbot_bringup
Starting >>> mbot_description
Starting >>> sllidar_ros2                                                        

Finished <<< mbot_bringup [2.16s]                                                          Finished <<< sllidar_ros2 [2.46s]                                                        
Finished <<< mbot_description [5.35s]

Summary: 3 packages finished [7.67s]

4.刷新环境

source ~/ros2_ws/install/setup.bash

5.设置工作空间刷新环境(一劳永逸)

echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

6.香橙派端口号配置

1.打开终端,在/etc/udev/rules.d/目录下,新建一个名为99-robot-usb.rules文件

cd /etc/udev/rules.d/
sudo vi 99-robot-usb.rules

2.将如下内容复制到文件中

KERNELS=="1-1", ATTRS{
   idVendor}=="1a86", ATTRS{
   idProduct}=="7523", SYMLINK+="mbot",MODE:="0777"
KERNELS=="6-1", ATTRS{
   idVendor}=="10c4", ATTRS{
   idProduct}=="ea60", SYMLINK+="lidar",MODE:="0777"
KERNELS=="5-1", ATTRS{
   idVendor}=="10c4", ATTRS{
   idProduct}=="ea60", SYMLINK+="camera",MODE:="0777"

**一定要注意:**否则运行程序时,会提示找不到端口

单片机串口的端口:命名为mbot

激光雷达驱动的端口:命名为lidar

3.然后根据你的实际情况更改,KERNELS、idVendor、idProduct对应的值。

这里主要参考我的这篇文章:linux系统下串口设备和串口号绑定

详细的细节如下:

1.问题由来

​ 在ROS小车的开发过程中,需要使用ROS通信串口模块、激光雷达的串口模块、IMU的串口模块等,为了防止每次开机这些设备的串口号发生变动,所以需要对串口号与串口设备绑定;为了更好的识别串口,我们也可以对串口号进行设置静态名称;为了更好的使用串口,我们也可以对串口进行权限设置。

一次设置,终身受益。

2.原理

在linux系统下,虽然每一个固定的端口可能由于外接设备启动的时间差异分配的ttyUSB*不同,但是对于每一个固定的端口,都有固定的 KERNELS、idProduct、idVendor,并且每一个端口的KERNELS都不相同。

所以,我们只要固定串口设备的安装位置,还是可以从端口物理性质的不同解决这个问题。

3.方法

第一步:如何查询每一个端口的KERNELS、idProduct、idVendor?

这里需要使用下面这条命令

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

并且当每次独立插入一个串口设备时,串口号总为/dev/ttyUSB0,若不放心,可以使用下面命令查询

ls /dev | grep ttyUSB

使用第一条命令,窗口将打印一堆设备信息,我们只需要KERNELS、idProduct、idVendor,我们向下滑找到类似下图的部分找到该端口的信息。

**注意:**查询端口信息时,请单独插入串口设备。

第二步:在/etc/udev/rules.d/目录下创建自己的99-*.rules文件

比如这里创建99-robot-usb.rules文件,使用如下命令

sudo vim /etc/udev/rules.d/99-robot-usb.rules

填入如下内容,保存

KERNELS=="3-2", ATTRS{
   idVendor}=="1a86", ATTRS{
   idProduct}=="7523", SYMLINK+="robot",MODE:="0777"

对上述的解释

==”:比较键、值,若等于,则该条件满足;
“+=”:为一个表示多个条目的键赋值。
“:=”:对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。

第三步:重启并查看配置是否生效

重启

sudo reboot

等待开机,查看端口

ll /dev | grep ttyUSB

中断打印出如下信息,设置成功

lrwxrwxrwx   1 root root           7 Sep 20 22:30 robot -> ttyUSB0
crwxrwxrwx   1 root dialout 188,   0 Sep 20 22:30 ttyUSB0

之后我们再使用该物理位置的端口时,它的串口号就固定为 /dev/robot,并且具有可读可写可执行的权限。

注意事项:

以上只是对一个端口设置的流程,大家在多数情况下都是多个设备。聪明的你,一定知道怎么举一反三。

每次独立插入一个串口设备,获得它的KERNELS、idProduct、idVendor值,记录下来;在/etc/udev/rules.d/目录下创建自己的99-*.rules文件,一次性填入这些设备的信息以及你需要的映射的名字;然后重启即可。

7.启动功能包测试

此时,需要具备的条件

1.线路都链接正确且正常(单片机->香橙派)(激光雷达->香橙派)

2.单片机正常且烧录好程序

这里我们准备了两个launch文件,一个含激光雷达,一个不含激光雷达

mbot_with_lidar_launch.py
mbot_launch.py

以运行含激光雷达的launch文件举例,在终端输入如下指令:

ros2 launch mbot_bringup mbot_with_lidar_launch.py

终端打印如下就是正常启动了

[mbot_bringup-1] [INFO] [1666446425.232926736] [mbot_bringup]: y_:-0.006942
[mbot_bringup-1] 
[mbot_bringup-1] [INFO] [1666446425.233090570] [mbot_bringup]: th_:338.204911
[mbot_bringup-1] 
[mbot_bringup-1] [INFO] [1666446425.253658500] [mbot_bringup]: dt:0.021006
[mbot_bringup-1] 
[mbot_bringup-1] [INFO] [1666446425.253865001] [mbot_bringup]: x_:-0.004255
[mbot_bringup-1] 
[mbot_bringup-1] [INFO] [1666446425.253914877] [mbot_bringup]: y_:-0.006942

8.总结

以上的内容主要讲述的,在获取的阿克曼开源平台后,如何快速的部署软件代码的过程讲解。

如果你感觉,我的文章比较适合你,关注我,点个赞,给你不一样的惊喜。


转载:https://blog.csdn.net/zhao_ke_xue/article/details/127475987
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场