ROS:Robot Operating System 【适用于机器人的开源元操作系统】
ROS = Plumbing + Tools + Capabilities + Ecosystem
特点:代码复用、分布式(进程 Nodes
分布式框架)、松耦合(只规定传感器接口规则)、精简、语言独立性(C, Python ...
)、易于测试(内置测试框架rostest
)、大型应用、丰富的组件化工具包、免费且开源。
Linux
:Ubuntu20.04ITEM | REFERENCE |
---|---|
VMware Workstation Pro v16 | https://www.ruanhuicn.com/soft/vmware-workstation-pro.html |
Ubuntu20.04 iso | http://mirrors.aliyun.com/ubuntu-releases/20.04/ |
ROS
:Noeticsudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full # 如果网卡则重复执行下 update 和 install
# 如果需要卸载: sudo apt remove ros-noetic-*
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
# 如果网络无法成功运行上述代码:
# cd /usr/lib/python3/dist-packages/
# find . -type f | xargs grep "raw.githubusercontent"
# 修改 raw.githubusercontent.com/ros/rosdistro/master -> gitee.com/zhao-xuzuo/rosdistro/raw/master
# sudo gedit ./rosdistro/__init__.py
# sudo gedit ./rosdep2/gbpdistro_support.py
# sudo edit ./rosdep2/sources_list.py
# sudo edit ./rosdep2/rep3.py
安装终端:sudo apt install terminator
Ctrl+Shift+O //水平分割终端 Ctrl+Shift+P //移动到前一个终端
Ctrl+Shift+E //垂直分割终端 Ctrl+Shift+N //移动到下一个终端
安装 vsc:
wget https://code.visualstudio.com/docs?start=true
sudo dpkg -i xxxx.deb # 卸载 sudo dpkg --purge code
# 为 VSC 安装插件: Python, ROS, CMake Tools
a. 首先启动三个命令行(ctrl + alt + T)
b. 命令行1键入:roscore
c. 命令行2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
d. 命令行3键入:rosrun turtlesim turtle_teleop_key(上下左右控制2中乌龟的运动)
另外,使用ROS需要 C++ 或者Python的编程经验,可以在网上找的很多学习资料!
# Create workspace: tutu_ws
mkdir -p tutu_ws/src; cd work_space; catkin_make
# Create package: helloworld
cd src; catkin_create_pkg helloworld roscpp rospy std_msgs message_generation
# Edit .py source file: hello_world.py
mkdir scripts; > hello_world.py; chmod +x hello_world.py
# Edite configuration file: CamkeList.txt
catkin_install_python(PROGRAMS scripts/自定义文件名(hello_world).py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
# Build
# 1.command line method:
cd tutu_ws; catkin_make
# 2.vsc method: ctrl + shift + B
cd tutu_ws; code .
# Run
roscore; cd tutu_ws; source ./devel/setup.bash; rosrun helloworld hello_world.py
hello_world.py 的具体内容如下所示:
#! /usr/bin/env python
import rospy
# sys.path.insert(0,path + "/src/pkg/scripts") # 如果需要导入自己的包
# import your_py
if __name__ == "__main__":
rospy.init_node("Hello")
'''
在ROS msater中注册节点
@param name: 节点名称(唯一),节点名称中不能使用命名空间(不能包含 '/')
@type name: str
@param argv: 封装节点调用时传递的参数,存到参数服务器
@type argv: None
@param anonymous: 取值为 true 时,为节点名称后缀随机编号可以解决重名
@type anonymous: bool
'''
rospy.loginfo("Hello World!!!!") # 打印
也使用 launch
来实现 Run
步骤: 【可以摆脱需要多个 terminal 的问题】
cd tutu_ws; mkdir src/helloworld/launch; > new.launch
roslaunch helloworld new.launch
new.launch 的具体内容如下所示:
<build_depend>message_generation</build_depend>
<build_export_depend>message_runtime</build_export_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>roscpp</exec_depend>
<depend>std_msgs</depend>
find_package(roscpp, ...)
add_message_files(xxx.msg, ...)
add_service_files(xxx.srv, ...)
add_action_files(xxx.action, ...)
generate_messages(std_msgs, ...)
add_executable(/.../xxx.cpp)
add_dependencies(xxx ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(xxx ${catkin_LIBRARIES})
WorkSpace --- 自定义的工作空间
|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
|--- src: 源码
|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
|-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
|-- scripts 存储 python 文件
|-- src 存储 C++ 源文件
|-- include 头文件
|-- msg 消息通信格式文件
|-- srv 服务通信格式文件
|-- action 动作格式文件(goal definition, result definition, feedback definition)
|-- launch 可一次性运行多个节点
|-- config 配置信息
|-- CMakeLists.txt: 编译的基本配置
catkin_create_pkg pkg_name roscpp rospy std_msgs
;查 rospack list, rospack find
;改 rosed pkg_name file_name
;roscore
是先决条件;rosrun pkg_name exefile_name
;roslaunch pkg_name exefile_name
;roscd, rosls, apt search pkg
。rqt_graph
启动:rosrun rqt_graph rqt_graph
参考资料如下: ROS理论与实践