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

ROS云课基础篇-01-Linux-250529

ROS云课基础篇收到了很多反馈,正面评价比例高,还有很多朋友反馈需要写更具体一点。 

ROS云课基础篇极简复习-C++、工具、导航、巡逻一次走完-CSDN博客 

于是,有了这篇以及之后的案例,案例均已经测试过8年,但没有在博客公开。

截止250529博客已经公开内容不足开发全部教程的3%,后续力争达到10%,以点带面。

自主探索最为关键。

博客仅供参考,其实看不看都无所谓的。

时间有限,写得稀巴烂,非常非常抱歉。



ROS Kinetic工作空间(catkin_ws)详细实验流程(基于Zsh)

一、实验目标

通过实践掌握ROS Kinetic工作空间的创建、编译、包管理及环境配置,结合Zsh特性与Bash脚本自动化备份,形成完整的ROS开发环境搭建能力。


二、实验环境

  • 操作系统:Ubuntu 16.04 LTS
  • ROS版本:ROS Kinetic Kame
  • Shell环境:Zsh(需替代默认Bash)
  • 工具catkin_makeoh-my-zsh(可选)、treesshaptsudo

三、实验步骤与结果

1. 安装并配置Zsh

1.1 安装Zsh
# 安装Zsh
sudo apt update
sudo apt install zsh -y# 验证安装
zsh --version

bash

# 安装Zsh
sudo apt update
sudo apt install zsh -y
# 验证安装
zsh --version

 

1.2 安装Oh-My-Zsh(可选,增强体验)
 

bash

# 通过curl安装Oh-My-Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 或通过wget安装
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
1.3 设置Zsh为默认Shell
 

bash

# 修改默认Shell为Zsh
chsh -s $(which zsh)
# 重新登录或重启终端使配置生效

2. 创建并初始化ROS工作空间

2.1 创建工作空间目录结构
 

zsh

# 创建工作空间顶级目录
mkdir -p ~/catkin_ws/src
# 进入src目录并初始化工作空间
cd ~/catkin_ws/src
catkin_init_workspace
# 返回工作空间根目录
cd ~/catkin_ws
# 编译工作空间(生成build和devel目录)
catkin_make
2.2 验证工作空间结构
 

zsh

# 安装tree工具(若未安装)
sudo apt install tree -y
# 查看工作空间目录结构
tree -L 2

预期输出


~/catkin_ws
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles/
│ └── Makefile
├── devel
│ ├── env.sh
│ ├── setup.zsh # 注意:Zsh下自动生成setup.zsh
│ └── lib/
└── src
├── CMakeLists.txt
└── (空或已有ROS包)

3. 创建ROS功能包

3.1 使用catkin_create_pkg创建包
 

zsh

# 进入src目录
cd ~/catkin_ws/src
# 创建名为my_package的包,依赖roscpp、rospy、std_msgs
catkin_create_pkg my_package roscpp rospy std_msgs
3.2 验证包结构
 

zsh

tree ~/catkin_ws/src/my_package

预期输出

 

~/catkin_ws/src/my_package
├── CMakeLists.txt
├── include/
│ └── my_package/
├── package.xml
└── src/

4. 编译工作空间

 

zsh

# 返回工作空间根目录并编译
cd ~/catkin_ws
catkin_make
# 刷新环境变量(临时生效)
source devel/setup.zsh # 使用setup.zsh而非setup.bash
# 永久生效(添加到.zshrc)
echo "source ~/catkin_ws/devel/setup.zsh" >> ~/.zshrc
source ~/.zshrc
4.1 验证环境变量
 

zsh

echo $ROS_PACKAGE_PATH

预期输出

 

/home/user/catkin_ws/src:/opt/ros/kinetic/share

5. 编写并运行ROS节点

5.1 创建Python节点
 

zsh

# 进入包的scripts目录
mkdir -p ~/catkin_ws/src/my_package/scripts
cd ~/catkin_ws/src/my_package/scripts
# 创建Python脚本
gedit talker.py &

脚本内容(同Bash版本):

 

python

#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
5.2 添加执行权限并运行
 

zsh

chmod +x talker.py
# 启动roscore
roscore &
# 在新终端中运行节点
rosrun my_package talker.py

6. 编写Zsh脚本自动化备份

6.1 创建备份脚本
 

zsh

# 进入scripts/backup目录
mkdir -p ~/catkin_ws/src/scripts/backup
cd ~/catkin_ws/src/scripts/backup
# 创建备份脚本
gedit backup_kinetic.zsh &

脚本内容(Zsh与Bash语法兼容):

 

zsh

#!/bin/zsh
# ROS Kinetic备份脚本
set -euo pipefail
ROS_WS_DIR="$HOME/catkin_ws"
BACKUP_DIR="/var/backups/ros_kinetic"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar --exclude='./build' --exclude='./devel' -czf "$BACKUP_DIR/ros_kinetic_$TIMESTAMP.tar.gz" "$ROS_WS_DIR"
echo "ROS Kinetic工作空间已备份至:$BACKUP_DIR"
6.2 添加执行权限并测试
 

zsh

chmod +x backup_kinetic.zsh
./backup_kinetic.zsh

7. 配置.zshrc与进程管理

7.1 自定义.zshrc
 

zsh

gedit ~/.zshrc &

添加内容

 

zsh

# ROS Kinetic环境变量
source /opt/ros/kinetic/setup.zsh # 使用setup.zsh而非setup.bash
source ~/catkin_ws/devel/setup.zsh
# 自定义别名
alias cdw='cd ~/catkin_ws'
alias cds='cd ~/catkin_ws/src'
alias rosbackup='~/catkin_ws/src/scripts/backup/backup_kinetic.zsh'
# 修改命令提示符(Oh-My-Zsh主题可简化配置)
# 示例:使用agnoster主题(需安装Powerline字体)
ZSH_THEME="agnoster"
# 启用插件(如git、zsh-autosuggestions)
plugins=(git zsh-autosuggestions)
7.2 进程管理
# 查看ROS进程
ps aux | grep roscore  # 终止进程(假设PID为1234)
kill -9 1234

 zsh

 

# 查看ROS进程
ps aux | grep roscore
# 终止进程(假设PID为1234)
kill -9 1234

8. 使用SSH远程管理

8.1 配置SSH服务
 

zsh

sudo apt install openssh-server -y
sudo service ssh start
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096
# 将公钥复制到远程服务器(假设IP为192.168.1.100)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.100
# 测试SSH连接
ssh user@192.168.1.100

9. 软件包管理

9.1 安装ROS Kinetic软件包
 

zsh

sudo apt update
sudo apt install ros-kinetic-rviz ros-kinetic-turtlesim -y

四、实验总结

  1. Zsh环境配置
    • 安装并设置Zsh为默认Shell,可选安装Oh-My-Zsh增强体验。
    • ROS Kinetic自动生成setup.zsh,需在.zshrc中加载。
  2. 工作空间创建
    • 通过catkin_init_workspacecatkin_make完成初始化与编译。
  3. 包管理
    • 使用catkin_create_pkg创建功能包,并通过catkin_make编译。
  4. 节点开发
    • 编写Python节点并通过rosrun运行。
  5. 自动化备份
    • Zsh脚本结合tar命令实现ROS工作空间备份。
  6. 环境配置
    • 通过.zshrc自定义终端行为,简化开发流程。
  7. 远程管理
    • SSH密钥认证提升安全性。
  8. 软件包管理
    • apt统一管理ROS Kinetic依赖。

五、实验扩展

  1. Zsh插件推荐

    • zsh-autosuggestions:命令行自动补全。
    • zsh-syntax-highlighting:语法高亮。
  2. 定时备份

     

    zsh

    # 编辑crontab
    crontab -e
    # 添加每日凌晨2点备份任务
    0 2 * * * /home/user/catkin_ws/src/scripts/backup/backup_kinetic.zsh >> /var/log/ros_backup.log 2>&1
  3. 多节点通信
    结合rostopicrosservice实现节点间通信。

  4. 依赖解析
    使用rosdep自动安装依赖项。


通过本实验,系统掌握了ROS Kinetic工作空间的创建、编译、包管理及自动化开发流程,并熟悉了Zsh环境下的高效开发配置。


bash-zsh

ROS Kinetic工作空间(catkin_ws)详细实验流程

一、实验目标

通过实践掌握ROS Kinetic工作空间的创建、编译、包管理及环境配置,结合Bash脚本自动化备份与进程管理,形成完整的ROS开发环境搭建能力。


二、实验环境

  • 操作系统:Ubuntu 16.04 LTS
  • ROS版本:ROS Kinetic Kame
  • 工具catkin_makegedittreesshaptsudo

三、实验步骤与结果

1. 创建并初始化ROS工作空间

1.1 创建工作空间目录结构
 

bash

# 创建工作空间顶级目录
mkdir -p ~/catkin_ws/src
# 进入src目录并初始化工作空间
cd ~/catkin_ws/src
catkin_init_workspace
# 返回工作空间根目录
cd ~/catkin_ws
# 编译工作空间(生成build和devel目录)
catkin_make
1.2 验证工作空间结构
 

bash

# 安装tree工具(若未安装)
sudo apt install tree -y
# 查看工作空间目录结构
tree -L 2

预期输出

 

~/catkin_ws
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles/
│ └── Makefile
├── devel
│ ├── env.sh
│ ├── setup.bash
│ └── lib/
└── src
├── CMakeLists.txt
└── (空或已有ROS包)

2. 创建ROS功能包

2.1 使用catkin_create_pkg创建包
 

bash

# 进入src目录
cd ~/catkin_ws/src
# 创建名为my_package的包,依赖roscpp、rospy、std_msgs
catkin_create_pkg my_package roscpp rospy std_msgs
2.2 验证包结构
 

bash

tree ~/catkin_ws/src/my_package

预期输出

 

~/catkin_ws/src/my_package
├── CMakeLists.txt
├── include/
│ └── my_package/
├── package.xml
└── src/

3. 编译工作空间

 

bash

# 返回工作空间根目录并编译
cd ~/catkin_ws
catkin_make
# 刷新环境变量(临时生效)
source devel/setup.bash
# 永久生效(添加到.bashrc)
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.1 验证环境变量
 

bash

echo $ROS_PACKAGE_PATH

预期输出

 

/home/user/catkin_ws/src:/opt/ros/kinetic/share

4. 编写并运行ROS节点

4.1 创建Python节点
 

bash

# 进入包的scripts目录
mkdir -p ~/catkin_ws/src/my_package/scripts
cd ~/catkin_ws/src/my_package/scripts
# 创建Python脚本
gedit talker.py &

脚本内容

 

python

#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
4.2 添加执行权限并运行
 

bash

chmod +x talker.py
# 启动roscore
roscore &
# 在新终端中运行节点
rosrun my_package talker.py

5. 编写Bash脚本自动化备份

5.1 创建备份脚本
 

bash

# 进入scripts/backup目录
mkdir -p ~/catkin_ws/src/scripts/backup
cd ~/catkin_ws/src/scripts/backup
# 创建备份脚本
gedit backup_kinetic.sh &

脚本内容

 

bash

#!/bin/bash
# ROS Kinetic备份脚本
set -euo pipefail
ROS_WS_DIR="$HOME/catkin_ws"
BACKUP_DIR="/var/backups/ros_kinetic"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar --exclude='./build' --exclude='./devel' -czf "$BACKUP_DIR/ros_kinetic_$TIMESTAMP.tar.gz" "$ROS_WS_DIR"
echo "ROS Kinetic工作空间已备份至:$BACKUP_DIR"
5.2 添加执行权限并测试
 

bash

chmod +x backup_kinetic.sh
./backup_kinetic.sh

6. 配置.bashrc与进程管理

6.1 自定义.bashrc
 

bash

gedit ~/.bashrc &

添加内容

 

bash

# ROS Kinetic环境变量
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
# 自定义别名
alias cdw='cd ~/catkin_ws'
alias cds='cd ~/catkin_ws/src'
alias rosbackup='~/catkin_ws/src/scripts/backup/backup_kinetic.sh'
# 修改命令提示符
PS1="\[\e[32;1m\]\u@\h:\w\n\[\e[0;0m\]\$ "
6.2 进程管理
 

bash

# 查看ROS进程
ps aux | grep roscore
# 终止进程(假设PID为1234)
kill -9 1234

7. 使用SSH远程管理

7.1 配置SSH服务
 

bash

sudo apt install openssh-server -y
sudo service ssh start
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096
# 将公钥复制到远程服务器(假设IP为192.168.1.100)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.100
# 测试SSH连接
ssh user@192.168.1.100

8. 软件包管理

8.1 安装ROS Kinetic软件包
 

bash

sudo apt update
sudo apt install ros-kinetic-rviz ros-kinetic-turtlesim -y

四、实验总结

  1. 工作空间创建:通过catkin_init_workspacecatkin_make完成初始化与编译。
  2. 包管理:使用catkin_create_pkg创建功能包,并通过catkin_make编译。
  3. 节点开发:编写Python节点并通过rosrun运行。
  4. 自动化备份:Bash脚本结合tar命令实现ROS工作空间备份。
  5. 环境配置:通过.bashrc自定义终端行为,简化开发流程。
  6. 远程管理:SSH密钥认证提升安全性。
  7. 软件包管理apt统一管理ROS Kinetic依赖。

五、实验扩展

  1. 定时备份:使用cron实现每日自动备份。
  2. 多节点通信:结合rostopicrosservice实现节点间通信。
  3. 依赖解析:使用rosdep自动安装依赖项。

通过本实验,系统掌握了ROS Kinetic工作空间的创建、编译、包管理及自动化开发流程,为机器人开发奠定了坚实基础。


Linux系统操作与自动化实验报告(ROS Kinetic版本)

一、实验目标

本实验通过实践掌握Linux系统基础操作(目录管理、文件编辑、权限控制)、Bash脚本编程、环境变量配置、进程管理、SSH安全连接及软件包管理,结合ROS Kinetic工作空间(catkin_ws)案例进行系统化学习。


二、实验环境

  • 操作系统:Ubuntu 16.04 LTS
  • ROS版本:ROS Kinetic Kame
  • 工具:gedit、tree、ps、ssh、apt、sudo

三、实验步骤与结果

1. 目录与文件操作

1.1 查看ROS工作空间目录结构
 

bash

# 安装tree工具(若未安装)
sudo apt install tree
# 查看catkin_ws目录结构(限制显示深度为2层)
tree -L 2 ~/catkin_ws

预期输出

 

~/catkin_ws
├── build
│ ├── CMakeCache.txt
│ ├── cmake_install.cmake
│ └── Makefile
├── devel
│ ├── env.sh
│ ├── setup.bash
│ └── lib/
└── src
├── CMakeLists.txt
├── package1
└── package2
1.2 导航与创建目录/文件
 

bash

# 进入src目录
cd ~/catkin_ws/src
# 创建嵌套目录(如需备份ROS包)
mkdir -p scripts/backup
# 创建空文件
touch scripts/backup/backup_kinetic.sh
# 使用gedit编辑文件(写入ROS备份命令)
gedit scripts/backup/backup_kinetic.sh & # &表示后台运行gedit

gedit内容示例

 

bash

#!/bin/bash
# ROS Kinetic备份脚本
ROS_WS_DIR="$HOME/catkin_ws"
BACKUP_DIR="/var/backups/ros_kinetic"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 打包ROS工作空间(排除build和devel目录)
tar --exclude='./build' --exclude='./devel' -czf "$BACKUP_DIR/ros_kinetic_$TIMESTAMP.tar.gz" "$ROS_WS_DIR"
echo "ROS Kinetic工作空间已备份至:$BACKUP_DIR"

2. 文件权限管理

2.1 查看与修改权限
 

bash

# 查看backup_kinetic.sh的当前权限
ls -l ~/catkin_ws/src/scripts/backup/backup_kinetic.sh
# 添加所有者执行权限
chmod u+x ~/catkin_ws/src/scripts/backup/backup_kinetic.sh
# 修改权限为755(所有者可读写执行,组用户和其他用户可读执行)
chmod 755 ~/catkin_ws/src/scripts/backup/backup_kinetic.sh
2.2 权限说明
  • 权限类型
    • r(4):读取权限
    • w(2):写入权限
    • x(1):执行权限
  • 用户组
    • u:所有者(User)
    • g:组用户(Group)
    • o:其他用户(Others)
  • 示例chmod 755 file 等价于 chmod u=rwx,g=rx,o=rx file

3. Bash脚本编程

3.1 编写ROS备份脚本
 

bash

#!/bin/bash
# ROS Kinetic自动化备份脚本
set -euo pipefail # 错误处理:遇到错误立即退出
# 配置参数
ROS_WS_DIR="$HOME/catkin_ws"
BACKUP_DIR="/var/backups/ros_kinetic"
LOG_FILE="$BACKUP_DIR/backup.log"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 创建日志目录
mkdir -p "$BACKUP_DIR"
# 记录日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# 执行备份
log "开始备份ROS Kinetic工作空间..."
tar --exclude='./build' --exclude='./devel' -czf "$BACKUP_DIR/ros_kinetic_$TIMESTAMP.tar.gz" "$ROS_WS_DIR"
log "备份完成:$BACKUP_DIR/ros_kinetic_$TIMESTAMP.tar.gz"
3.2 运行脚本与参数传递
 

bash

# 直接运行脚本
~/catkin_ws/src/scripts/backup/backup_kinetic.sh
# 模拟参数传递(需修改脚本支持getopts)
# 修改脚本头部添加参数解析:
while getopts "v" opt; do
case $opt in
v) VERBOSE=true ;;
*) echo "用法: $0 [-v]" ;;
esac
done
# 调用时:
bash ~/catkin_ws/src/scripts/backup/backup_kinetic.sh -v # 启用详细模式

4. 环境变量与.bashrc配置

4.1 查看与修改环境变量
 

bash

# 临时添加ROS Kinetic路径到PATH
export PATH="$HOME/catkin_ws/devel/bin:$PATH"
# 查看当前PATH
echo $PATH
# 过滤包含ROS的环境变量
env | grep "ROS"
4.2 自定义.bashrc
 

bash

# 编辑.bashrc文件
gedit ~/.bashrc &
# 添加以下内容到文件末尾:
# ROS Kinetic环境变量
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
# 自定义别名
alias ll='ls -lh'
alias cdw='cd ~/catkin_ws'
alias cds='cd ~/catkin_ws/src'
# 修改命令提示符
PS1="\[\e[32;1m\]\u@\h:\w\n\[\e[0;0m\]\$ "
# 使修改生效
source ~/.bashrc

5. 进程管理

5.1 查看与控制ROS进程
 

bash

# 查看所有roslaunch进程
ps aux | grep roslaunch
# 终止指定PID的进程
kill -9 12345 # 替换为实际PID
# 暂停与恢复进程(需先通过Ctrl+Z暂停)
jobs # 查看后台任务
bg %1 # 恢复任务1到后台
fg %1 # 将任务1恢复到前台

6. SSH安全连接

6.1 配置SSH服务
 

bash

# 安装SSH服务
sudo apt install openssh-server
# 启动SSH服务
sudo service ssh start
# 检查SSH状态
sudo service ssh status
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096 # 生成高强度密钥
# 将公钥复制到远程服务器(假设IP为192.168.1.100)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.100
# 免密登录测试
ssh user@192.168.1.100

7. 软件包管理

7.1 使用apt管理ROS Kinetic软件包
 

bash

# 更新软件包列表
sudo apt update
# 安装ROS Kinetic可视化工具
sudo apt install ros-kinetic-rviz
# 安装ROS Kinetic功能包(如turtlesim)
sudo apt install ros-kinetic-turtlesim
# 卸载软件包
sudo apt remove ros-kinetic-rviz
# 清理无用软件包
sudo apt autoremove

四、实验总结

  1. 目录管理
    • tree命令可视化目录结构,mkdir -p支持多级目录创建。
    • gedit提供图形化编辑,适合脚本开发。
  2. 权限控制
    • chmod通过数字或符号修改权限,确保脚本可执行。
    • 权限管理是系统安全的基础。
  3. 脚本自动化
    • Bash脚本结合错误处理和日志记录,简化重复任务。
    • 支持参数传递,增强灵活性。
  4. 环境配置
    • .bashrc自定义终端行为,export管理环境变量。
    • ROS Kinetic需显式加载环境配置。
  5. 进程管理
    • pskill组合实现进程监控与控制。
    • 合理使用后台任务(bg/fg)提高效率。
  6. SSH安全连接
    • 密钥认证替代密码登录,提升安全性。
    • 适用于远程开发或服务器管理。
  7. 软件包管理
    • apt统一管理ROS Kinetic软件包,简化安装与更新。

五、实验问题与解决

  1. 问题:执行脚本时报“权限不足”。
    解决:使用chmod +x script.sh添加执行权限,或通过bash script.sh直接运行。

  2. 问题:SSH登录时提示“Connection refused”。
    解决:检查SSH服务是否运行(sudo service ssh status),并确认防火墙未阻止22端口。

  3. 问题:ROS命令未找到。
    解决:确保已正确加载ROS环境(source /opt/ros/kinetic/setup.bash)。


六、实验扩展

  1. 定时备份

     

    bash

    # 编辑crontab
    crontab -e
    # 添加每日凌晨2点备份任务
    0 2 * * * /home/user/catkin_ws/src/scripts/backup/backup_kinetic.sh >> /var/log/ros_backup.log 2>&1
  2. ROS节点自动化启动
    在脚本中调用roslaunch命令,例如:

     

    bash

    #!/bin/bash
    source /opt/ros/kinetic/setup.bash
    source ~/catkin_ws/devel/setup.bash
    roslaunch package_name launch_file.launch
  3. 日志轮转
    使用logrotate管理备份日志文件大小和保留周期。


通过本实验,系统掌握了Linux系统操作与自动化工具,结合ROS Kinetic开发环境,为机器人开发及服务器管理提供了完整解决方案。



推荐:

001:https://automaticaddison.com/the-complete-guide-to-linux-fundamentals-for-robotics/002:https://www.lanqiao.cn/courses/854

001:

该网页是一篇关于在Linux系统上使用ROS(机器人操作系统)进行机器人项目开发的基础教程。教程内容涵盖了Linux系统下ROS开发所需的最常用命令和工具,旨在帮助读者快速掌握在Linux环境中进行ROS开发的基本技能。

教程内容概述:
  1. 准备工作
    • 确保在Ubuntu Linux上运行ROS(作者在Windows 10上的虚拟机中运行Ubuntu Linux)。
  2. 探索文件夹层次结构
    • 使用tree命令查看catkin_ws(ROS工作空间)文件夹的层次结构。
    • 学习如何导航到不同文件夹,使用cd命令。
  3. 创建新文件夹和文件
    • 使用mkdir命令创建新文件夹。
    • 使用touch命令创建新文件。
    • 使用gedit文本编辑器打开和编辑文件。
  4. 文件权限
    • 了解Linux中的文件权限(读、写、执行)和用户权限组(所有者、组、所有用户)。
    • 使用chmod命令修改文件权限。
  5. 创建Bash脚本
    • 学习如何编写和运行Bash脚本,以自动化命令执行。
    • 了解如何向Bash脚本传递参数。
  6. 探索.bashrc文件
    • 了解.bashrc文件的作用,它包含在打开新终端时自动运行的命令和配置。
  7. 环境变量
    • 使用export命令查看和修改环境变量。
    • 使用grep命令过滤包含特定字符串的环境变量。
  8. 理解Linux进程
    • 了解Linux中的前台进程和后台进程。
    • 使用ps命令查看当前运行的进程。
    • 学习如何启动、暂停、恢复和终止进程。
  9. 使用SSH协议
    • 了解SSH协议的作用,它提供了通过不安全网络安全访问计算机的方式。
    • 学习如何在Ubuntu Linux和Raspberry Pi之间设置SSH连接。
  10. 探索“sudo”和“apt”命令
    • 了解sudo命令的作用,它允许用户以超级用户权限运行命令。
    • 使用apt命令更新软件包列表和安装软件。

002:

蓝桥云课的ROS教程提供了ROS1(Kinetic版本)和ROS2(Ardent版本)的综合介绍,具有大量官方制定的教程源码和定制化学习方案。结合上述Linux基础教程,读者可以更全面地掌握在Linux系统上进行ROS开发所需的技能。

  • ROS环境配置:蓝桥云课教程详细介绍了如何在Linux上配置ROS环境,这与AutomaticAddison教程中的准备工作相呼应。
  • ROS项目实践:通过蓝桥云课的教程源码,读者可以在掌握Linux基础命令和工具后,进一步实践ROS项目的开发,加深对ROS的理解和应用能力。
  • 综合学习体验:结合两个教程,读者可以从Linux基础到ROS高级应用,逐步构建起完整的机器人开发知识体系。

相关文章:

ROS云课基础篇-01-Linux-250529

ROS云课基础篇收到了很多反馈,正面评价比例高,还有很多朋友反馈需要写更具体一点。 ROS云课基础篇极简复习-C、工具、导航、巡逻一次走完-CSDN博客 于是,有了这篇以及之后的案例,案例均已经测试过8年,但没有在博客公…...

通俗易懂解析:@ComponentScan 与 @MapperScan 的异同与用法

在 Spring 和 MyBatis 集成开发中,ComponentScan 和 MapperScan 是两个核心注解,但它们的用途和工作机制截然不同。本文将通过通俗的语言和示例代码,带您轻松掌握它们的区别和使用方法。 一、基础概念 ComponentScan:Spring 的“通…...

深入了解 C# 异步编程库 AsyncEx

在现代应用程序开发中,异步编程已经成为提升性能和响应能力的关键,尤其在处理网络请求、I/O 操作和其他耗时任务时,异步编程可以有效避免阻塞主线程,提升程序的响应速度和并发处理能力。C# 提供了内建的异步编程支持(通…...

NodeJS全栈开发面试题讲解——P1Node.js 基础与核心机制

✅ 1.1 Node.js 的事件循环原理?如何处理异步操作? 面试官您好,我理解事件循环是 Node.js 的异步非阻塞编程核心。 Node.js 构建在 V8 引擎与 libuv 库之上。虽然 Node.js 是单线程模型,但它通过事件循环(event loop&a…...

Vulhub靶场搭建(Ubuntu)

前言:Vulhub 是一个开源的漏洞靶场平台,全称是 Vulhub: Vulnerable Web Application Environments,主要用于学习和复现各类 Web 安全漏洞。它的核心特征是通过 Docker 环境快速搭建出带有特定漏洞的靶场系统,适合渗透测试学习者、…...

C++:参数传递方法(Parameter Passing Methods)

目录 1. 值传递(Pass by Value) 2. 地址传递(Pass by Address) 3. 引用传递(Pass by Reference) 数组作为函数参数(Array as Parameter) 数组作为函数返回值 什么是函数&#xff…...

大语言模型的推理能力

2025年,各种会推理的AI模型如雨后春笋般涌现,比如ChatGPT o1/o3/o4、DeepSeek r1、Gemini 2 Flash Thinking、Claude 3.7 Sonnet (Extended Thinking)。 对于工程上一些问题比如复杂的自然语言转sql,我们可能忍受模型的得到正确答案需要更多…...

基于BERT和GPT2的实现来理解Transformer的结构和原理

Transformer 核心就是编码器和解码器,简单理解:编码器就是特征提取,解码器就是特征还原。 Transformer 完整架构 Transformer最初是一个Encoder-Decoder架构,用于机器翻译任务: 输入序列 → [Encoder] → 编码表示…...

.net consul服务注册与发现

.NET中Consul服务注册与发现的技术实践 在微服务架构中,服务的注册与发现是至关重要的环节,它能帮助各个服务之间实现高效的通信和协作。Consul作为一款功能强大的工具,为我们提供了优秀的服务注册与发现解决方案。今天,我们就来…...

WifiEspNow库函数详解

WifiEspNow库 项目地址https://github.com/yoursunny/WifiEspNow WifiEspNow 是 ESP-NOW 的 Arduino 库,ESP-NOW 是乐鑫定义的无连接 WiFi 通信协议。 有关 ESP-NOW 工作原理及其限制的更多信息,请参阅 ESP-NOW 参考。 WifiEspNow是 ESP-IDF 中 ESP-N…...

rsync使用守护进程启动服务

rsync 本身通常使用 SSH(Secure Shell)协议来进行数据传输,因此它默认使用 SSH 的端口 22。如果使用 rsync 进行通过 SSH 的数据同步,它会通过端口 22 来建立连接。 然而,如果你使用 rsync 作为一个守护进程进行文件同步(即不通过 SSH),则可以配置它使用 TCP 端口 873…...

React 核心概念与生态系统

1. React 简介 React 是由 Facebook 开发并开源的一个用于构建用户界面的 JavaScript 库。它主要用于构建单页应用(SPA),其核心理念是组件化和声明式编程,即 ui render(data)。 2. 核心特点 2.1. 声明式编程 React 使用声明式…...

使用React Native开发新闻资讯类鸿蒙应用的准备工作

以下是一篇关于使用React Native开发新闻资讯类鸿蒙应用的准备工作指南,结合鸿蒙生态特性与React Native技术栈整合要点: ​​一、环境搭建与工具链配置​​ ​​基础依赖安装​​ ​​Node.js 18​​:需支持ES2020语法(如可选链操…...

node-sass 报错

背景:一些老项目使用"node-sass": “^4.14.1” ,node版本要求 14.x,高版本不兼容 解决方案如下: 方案一:替换安装sass (无须降级Node版本) 卸载node-sass npm uninstall node-sass安装sass(Dart…...

Redis的安装与使用

网址:Spring Data Redis 安装包:Releases tporadowski/redis GitHub 解压后 在安装目录中打开cmd 打开服务(注意:每次客户端连接都有先打开服务!!!) 按ctrlC退出服务 客户端连接…...

Linux服务器运维10个基础命令

结合多篇权威资料,以下是运维工程师必须掌握的10个核心命令,涵盖文件管理、系统监控、网络操作等高频场景 1. "ls" 代码分析 "ls" 用于列出目录内容,通过参数组合可增强展示效果: "-l" 显示文件…...

2024年数维杯国际大学生数学建模挑战赛C题时间信号脉冲定时噪声抑制与大气时延抑制模型解题全过程论文及程序

2024年数维杯国际大学生数学建模挑战赛 C题 时间信号脉冲定时噪声抑制与大气时延抑制模型 原题再现: 脉冲星是一种快速旋转的中子星,具有连续稳定的旋转,因此被称为“宇宙灯塔”。脉冲星的空间观测在深空航天器导航和时间标准维护中发挥着至…...

C# 控制台程序获取用户输入数据验证 不合规返回重新提示输入

在 C# 控制台程序中实现输入验证并循环重试&#xff0c;可以通过以下方式实现高效且用户友好的交互。以下是包含多种验证场景的完整解决方案&#xff1a; 一、通用输入验证框架 public static T GetValidInput<T>(string prompt, Func<string, (bool IsValid, T Val…...

【大模型面试每日一题】Day 31:LoRA微调方法中低秩矩阵的秩r如何选取?

【大模型面试每日一题】Day 31&#xff1a;LoRA微调方法中低秩矩阵的秩r如何选取&#xff1f; &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官:LoRA微调方法中低秩矩阵的秩r如何选取&#xff1f;&#xff1a; #mermaid-svg-g5hxSxV8epzWyP98 {font-family:"…...

使用source ~/.bashrc修改环境变量之后,关闭服务器,在重启,环境变量还有吗?

环境变量在服务器重启后的留存性分析 1. 环境变量的存储机制 临时环境变量&#xff1a; 通过命令直接设置的环境变量&#xff08;如 export MY_VARvalue&#xff09;仅存在于当前 shell 会话中&#xff0c;服务器重启后会丢失。永久环境变量&#xff1a; 写入 配置文件&#…...

SQL 窗口函数深度解析:ROW_NUMBER 实战指南

SQL 窗口函数深度解析:ROW_NUMBER 实战指南 一、窗口函数核心概念 窗口函数(Window Function)是SQL中用于在结果集的"窗口"(即特定行集合)上执行计算的高级功能。与聚合函数不同,窗口函数不会将多行合并为单行,而是为每行返回一个计算值。 关键特性:窗口函数通…...

React从基础入门到高级实战:React 生态与工具 - React 国际化(i18n)

React 国际化&#xff08;i18n&#xff09; 引言 随着全球化的加速&#xff0c;开发支持多语言的应用已成为现代Web开发的重要需求。无论是面向国际市场的电商平台&#xff0c;还是提供多语言服务的SaaS应用&#xff0c;国际化&#xff08;i18n&#xff09;功能都是提升用户体…...

leetcode93.复原IP地址:回溯算法中段控制与前导零处理的深度解析

一、题目深度解析与IP地址规则 题目描述 给定一个只包含数字的字符串s&#xff0c;返回所有可能的有效IP地址组合。有效IP地址需满足以下条件&#xff1a; 由4个0-255的整数组成&#xff0c;用.分隔每个整数不能以0开头&#xff08;除非该整数本身是0&#xff09;例如输入s&…...

TDengine 运维——巡检工具(安装前检查)

简介 本文档旨在介绍 TDengine 安装部署前后配套的巡检工具。 相关工具的功能简介&#xff1a; 工具名称功能简介安装前检查部署前对 TDengine 安装部署的依赖要素进行安装前检查安装前预配置部署前对 TDengine 安装部署的依赖要素进行安装前预配置安装部署指定环境安装部署…...

MySQL主从复制深度解析:原理、架构与实战部署指南

一、主从复制核心原理 复制流程解析 MySQL主从复制本质是通过二进制日志(binlog)实现数据同步的异步复制机制&#xff1a; 写操作记录&#xff1a;主库执行写操作时&#xff0c;将变更记录到binlog 日志传输&#xff1a;主库的binlog dump线程将日志发送给从库 中继存储&am…...

[SC]SystemC dont_initialize的应用场景详解(二)

SystemC dont_initialize的应用场景详解(二) 摘要:下面给出一个稍复杂一点的 SystemC 示例,包含三个模块(Producer/Filter/Consumer)和一个 Testbench(Top)模块,演示了在不同的进程类型中如何使用 dont_initialize() 来抑制 time 0 的自动调用。 一、源代码 …...

【Linux】权限chmod命令+Linux终端常用快捷键

目录 linux中权限表示形式 解析标识符 权限的数字序号 添加权限命令chmod 使用数字表示法设置权限 使用符号表示法设置权限 linux终端常用快捷键 &#x1f525;个人主页 &#x1f525; &#x1f608;所属专栏&#x1f608; 在 Linux 系统里&#xff0c;权限管理是保障系…...

Java八股文智能体——Agent提示词(Prompt)

这个智能体能够为正在学习Java八股文的同学提供切实帮助&#xff1a;不仅可以帮你优化答案表述&#xff0c;还能直接解答八股文相关问题——它会以面试者的视角&#xff0c;给出贴合求职场景的专业回答。 将以下内容发送给任何一个LLM&#xff0c;他会按照你提示词的内容&…...

Go语言的context

Golang context 实现原理 本篇文章是基于小徐先生的文章的修改和个人注解&#xff0c;要查看原文可以点击上述的链接查看 目前我这篇文章的go语言版本是1.24.1 context上下文 context被当作第一个参数&#xff08;官方建议&#xff09;&#xff0c;并且不断的传递下去&…...

快速掌握 GO 之 RabbitMQ 结合 gin+gorm 案例

更多个人笔记见&#xff1a; &#xff08;注意点击“继续”&#xff0c;而不是“发现新项目”&#xff09; github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习&#xff0c;学习过程中还会不断补充&…...