[Books/Ros Leanring at main · felix-lhz/Books (github.com)](https://github.com/felix-lhz/Books/tree/main/Ros Leanring)
https://github.com/huchunxu/ros_exploring.git
windows11 安装WSL2全流程_win11安装wsl2-CSDN博客
WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建_wsl安装cudnn-CSDN博客
使用 WSL 运行 Linux GUI 应用 | Microsoft Learn
Miniconda — Anaconda documentation
mkdir ~/p ~/ros-learning/src
cd ~/ros-learning/src
catkin_init_workspace
cd ~/ros-learning
catkin_make
-- Could NOT find PY_em (missing: PY_EM)
CMake Error at cmake/empy.cmake:30 (message):
Unable to find either executable 'empy' or Python module 'em'... try
installing the package 'python-empy'
ImportError: "from catkin_pkg.package import parse_package" failed: No module named 'catkin_pkg'
Make sure that you have installed "catkin_pkg", it is up to date and on the PYTHONPATH
[Ubuntu20.04安装Ros Noetic版本,在catkin_make编译时出现的问题_unable to find either executable 'empy' or python -CSDN博客](https://blog.csdn.net/qq_39437730/article/details/118272390#:~:text=-- Could N)
WSL2安装locate命令一直显示Initializing mlocate database; this may take some time,进度一直卡在60%。
[WSL2安装locate命令一直显示Initializing mlocate database; this may take some time,进度一直卡在60%_initializing plocate database; this may take some -CSDN博客](https://blog.csdn.net/qq_15969343/article/details/129189584#:~:text=再次运行sudo a)
echo "source ~/ros-learning/devel/setup.bash">>~/.bashrc
cd ~/ros-learning/src
catkin_create_pkg learning_communication std_msgs rospy roscpp
cd ..
catkin_make
【ROS】VSCODE + ROS 配置方法(保姆级教程,总结了多篇)_vscode ros-CSDN博客
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(talker_node src/talker.cpp)
add_executable(listener_node src/listener.cpp)
add_dependencies(talker_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(listener_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(talker_node
${catkin_LIBRARIES}
)
target_link_libraries(listener_node
${catkin_LIBRARIES}
)
catkin_make
roscore
rosrun learning_communication talker_node
rosrun learning_communication listener_node
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
find_package(catkin REQUIRED COMPONENTS
......
message_generation
)
catkin_package(
......
CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime
......
)
add_message_files(
FILES
Person.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
rosmsg show Person
# 其他配置已在2.1.5完成
add_service_files(
FILES
addTwoInts.srv
)
add_executable(server src/server.cpp)
add_executable(client src/client.cpp)
add_dependencies(server ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(client ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(server
${catkin_LIBRARIES}
)
target_link_libraries(client
${catkin_LIBRARIES}
)
catkin_make
roscore
rosrun learning_communication server
rosrun learning_communication client 3 5
# 常用属性
pkg:节点所在的功能包的名称
name:节点名称
type:节点的可执行文件名称
# Others
output = "screen":将节点的标准输出打印到终端屏幕,默认输出为日志文档
respawn = "true":复位属性,该节点停止时,会自动重启,默认为false
required = "true":必要节点,该节点终止时,launch文件中的其他节点也被终止
ns = "namespace":命名空间,为节点内的相对名称添加命名空间前缀
args = "arguments":节点需要的输入参数
<param>
<arg>
<remap>:重映射指令话题
<include>:嵌套服用,
坐标系变换:平移+旋转,4×4矩阵(齐次矩阵)
打印TF树中所有坐标系的发布状态。
查看指定坐标系之间的发布状态
th_echo <source_frame> <target_frame>
查看指定坐标系之间的坐标系变化。
th_echo <source_frame> <target_frame>
发布两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化
# yaw:围绕z轴的偏航角,pitch:围绕y轴旋转的俯仰角,roll:围绕x轴旋转的翻滚角
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id
# 四元数
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id
可视化的调试工具,可以生成pdf文件,显示整棵TF树的信息。
start_demo_with_listener.launch
!!! 修改CMakeList.txt and package.xml
rqt_console:图像化显示和过滤ros系统运行状态中的所有日志消息,包括info/warn/error等级别的日志
rqt_graph:图形化显示当前ros系统中的计算图(节点之间的话题通讯)
rqt_plot:将需要显示的数据在xy坐标系中使用曲线描绘
rqt_reconfigure:ros系统的动态参数配置(rosrun rqt_reconfigure rqt_reconfigure)
- 0:3D视图区,用于显示可视化数据
- 1:工具栏,用于提供视角控制/目标控制/发布地点等工具
- 2:显示项列表,用于显示当前选择的显示插件,可以配置每个插件的属性
- 3:视角设置区,用于选择多种观测视角
- 4:时间显示区,用于显示当前的系统时间和ROS时间
插件名 | 描述 | 消息类型 |
---|---|---|
Axes | 显示坐标轴 | - |
Effort | 显示机器人转动关节的力 | sensor_msgs/JointStates |
Camera | 打开一个新窗口并显示摄像头图像 | sensor_msgs/Image sensor_msgs/CameraInfo |
Grid | 显示2D或者3D栅格 | |
Grid Cells | 显示导航功能包中代价地图的障碍物栅格信息 | nav_msgs/GridCells |
Image | 打开一个窗口并显示图像信息(不需要订阅摄像头校准信息) | sensor_msgs/Image |
InteractiveMarker | 显示3D交互式标记 | visualization_msgs/InteractiveMarker |
Laser Scan | 显示激光雷达数据 | sensor_msgs/LaserScan |
Map | 在大地平面上显示地图信息 | nav_msgs/OccupancyGrid |
Markers | 绘制各种基本形状(箭头/立方体等) | visualization_msgs/Marker visualization_msgs/MarkerArray |
Path | 显示导航过程中的路径信息 | nav_msgs/Path |
Point | 使用圆球体绘制一个点 | geometry_msgs/PointStamped |
Pose | 使用箭头或者坐标轴的方式绘制一个位姿 | geometry_msgs/PoseStamped |
Pose Array | 根据位姿列表,绘制一组位姿箭头 | geometry_msgs/PoseArray |
Point Cloud(2) | 显示点云数据 | sensor_msgs/PointCloud sensor_msgs/PointCloud2 |
Polygon | 绘制多边形轮廓 | geometry_msgs/Polygon |
Odometry | 绘制一段时间内的里程计位姿信息 | nav_msgs/Odometry |
Range | 显示声纳或者红外传感器反馈的测量数据(锥形范围) | sensor_msgs/Range |
TF | 显示TF变换的层次关系 | |
RobotModel | 显示机器人模型 | |
Wrench | 显示力信息(力用箭头表示,转矩用箭头和园表示) | geometry_msgs/WrenchStamped |
- 动力学仿真:支持多种高性能的物理引擎
- 三维可视化环境:支持显示逼真的三位环境,包括光线/纹理/影子
- 传感器仿真:支持传感器数据的仿真,同时可以仿真传感器噪声
- 可扩展插件:用户可以定制化开发插件以扩展Gazebo的功能,满足个性化的需求
- 多种机器人模型:官方提供PR2/Pioneer2 DX/TurtleBot等机器人模型,也可使用自己创建的机器人模型
- TCP/IP传输:Gazebo的后台仿真处理和前台图形显示可以通过网络通信实现远程仿真
- 云仿真:Gazebo仿真可以在Amazon/Softlayer等云端运行,也可以在自己搭建的云服务器上运行
- 终端工具:用户可以使用Gazebo提供的命令行工具在终端实现仿真控制
cd .gazebo/
git clone https://github.com/osrf/gazebo_models
sudo apt-get update
mv gazebo_models models
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a
rosbag info <your bagfile>
rosbag play <your bagfile>
标签用于描述机器人某个刚体部分的外观和物理属性,包括size/color/shape/inertial matrix/collision properties
标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制。
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以围绕单轴无限旋转 |
revolute | 转动关节,可以围绕单轴有限旋转 |
prismatic | 滑动关节,沿某一轴线移动的关节,带有位置极限 |
planar | 平面关节,允许在平面正交方向上平移或者旋转 |
floating | 浮动关节,允许进行平移/旋转运动 |
fixed | 固定关节,不允许运动的特殊关 |
- :关节的参考位置,用来校准关节的绝对位置
- :用于描述关节的物理属性,如阻尼值/物理静摩擦力等
- :用于描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等
- :用于描述该关节与已有关节的关系
- <safety_controller>:用于描述安全控制器参数
是完整机器人模型的最顶层标签,和标签必须包含在标签内。
标签用于描述机器人模型在Gazebo中仿真所需要的参数,包括机器人材料的属性、Gazebo插件等。(只有在Gazebo仿真时才需加入)
cd ~/ros-learning/src
catkin_create_pkg mrobot_description urdf xacro
- urdf:用于存放机器人模型的URDF或xacro文件
- meshes:用于放置URDF中引用的模型渲染文件
- launch:用于保存相关启动文件
- config:用于保存rviz的配置文件
该机器人底盘模型包含7个link和6个joint(model中只有6个link和5个joint):
- link:1个机器人底板、2个电机、2个驱动轮、2个万向轮
- joint:电机、驱动轮、万向轮和底板的连接
- 解析URDF文件,并显示解析过程中发现的错误。
check_urdf mrobot_chassis.urdf
- 生成模型的整体结构图PDF文件
urdf_to_graphiz mrobot_chassis.urdf
display_mrobot_chassis_urdf.launch
roslaunch mrobot_description display_mrobot_chassis_urdf.launch
<?xml version="1.0"?>
<robot name="robot_name" xmlns:xacro="https://www.ros.org/wiki/xacro>"
<xacro:property name="M_PI" value="3.1415926535"/>
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
<origin xyz="0 ${(motor_length + wheel_length)/2} 0" rpy="0 0 0"/>
<xacro:macro name="mrobot_standoff_2in" params="parent number x_loc y_loc z_loc">
·····
</xacro>
<mrobot_standoff_2in parent="base_link" number="4" x_loc="${standoff_x/2}" y_loc="${standoff_y/2}" z_loc="${standoff_z/2}"/>
cd ~/ros-learning/src/mrobot_description/urdf
rosrun xacro xacro mrobot.urdf.xacro > mrobot.urdf
可以省略手动转换模型的过程,直接在启动文件中调用xacro解析器,自动将xacro转换成URDF文件。
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot.urdf.xacro'" />
<arg name="gui" default="true" />
<param name="robot_description" command="$(arg model)" />
roslaunch mrobot_description display_mrobot.launch
display_mrobot_with_camera.launch
display_mrobot_with_kinect.launch
mrobot_with_rplidar.urdf.xacro
display_mrobot_with_laser.launch
sudo apt-get install ros-noetic-arbotix
git clone https://github.com/vanadiumlabs/arbotix_ros.git
cd arbotix_ros
catkin_make
arbotix_mrobot_with_camera.launch
arbotix_mrobot_with_kinect.launch
arbotix_mrobot_with_laser.launch
每个机器人可能有多个控制器, 所以这里有一个控制器管理器的概念, 提供一种通用的接口来管理不同的控制器。 控制器管理器的输入就是ROS上层应用功能包的输出。
rosrun controller_manager controller_manager <command> <controller_name>
- load: 加载一个控制器。
- unload: 卸载一个控制器。
- start: 启动控制器。
- stop: 停止控制器。
- spawn: 加载并启动一个控制器。
- kill: 停止并卸载一个控制器。
rosrun controller_manager controller_manager <command>
- list: 根据执行顺序列出所有控制器, 并显示每个控制器的状态。
- list-types: 显示所有控制器的类型。
- reload-libraries: 以插件的形式重载所有控制器的库, 不需要重新启动, 方便对控制器的开发和测试。
- reload-libraries--restore: 以插件的形式重载所有控制器的库, 并恢复到初始状态。
rosrun controller_manager spawner [--stopped] name1 name2 name3
上面的命令可以自动加载、 启动控制器, 如果加上--stopped参数,那么控制器则只会被加载, 但是并不会开始运行。 如果想要停止一系列控制器, 但是不需要卸载, 可以使用如下命令:
rosrun controller_manager unspawner name1 name2 name3
<launch>
<node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2" />
</launch>
<launch>
<node pkg="controller_manager" type="spawner" args="--stopped controller_name1 controller_name2>
</launch>
sudo apt-get install ros-noetic-rqt-controller-manager
rosrun rqt_controller_manager rqt_controller_manager
控制器可以完成每个joint的控制, 读取硬件资源接口中的状态, 再发布控制命令, 并且提供PID控制器。
- effort_controllers
- joint_effort_controller
- joint_position_controller
- joint_velocity_controller
- joint_state_controller
- joint_state_controller
- position_controllers
- joint_position_controller
- velocity_controllers
- joint_velocity_controller
https://github.com/ros-controls/ros_control/wiki/controller_interface
为上下两层提供硬件资源的接口。
https://github.com/ros-controls/ros_control/wiki/hardware_interface
机器人硬件抽象和硬件资源直接打交道, 通过write和read方法完成硬件操作, 这一层也包含关节约束、 力矩转换、 状态转换等功能。
真实机器人上也需要有自己的嵌入式控制器, 将接收到的命令反映到执行器上, 比如接收到旋转90度的命令后, 就需要让执行器快速、 稳定地旋转90度。
传动系统(Transmission) 可以将机器人的关节指令转换成执行器的控制信号。
<transmission name="simple_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="foo_joint">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="foo_motor">
<mechanicalReduction>50</mechanicalReduction>
<hardwareInterface>EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
关节约束(Joint Limits) 是硬件抽象层中的一部分, 维护一个关节约束的数据结构, 这些约束数据可以从机器人的URDF文件中加载, 也可以在ROS的参数服务器上加载(需要先用YAML配置文件导入ROS参数服务器)。
<joint name="$foo_joint" type="revolute">
<!-- other joint description elements -->
<!-- Joint limits -->
<limit lower="0.0" upper="1.0" effort="10.0" ="5.0" />
<!-- Soft limits -->
<safety_controller k_position="100" k_velocity="10"
soft_lower_limit="0.1" soft_upper_limit="0.9" />
</joint>
joint_limits:
foo_joint:
has_position_limits: true
min_position: 0.0
max_position: 1.0
has_velocity_limits: true
max_velocity: 2.0
has_acceleration_limits: true
max_acceleration: 5.0
has_jerk_limits: true
max_jerk: 100.0
has_effort_limits: truemax_effort: 5.0
bar_joint:
has_position_limits: false # Continuous joint
has_velocity_limits: true
max_velocity: 4.0
Gazebo学习(一)Ubuntu20.04安装ROS+gazebo11+模型库导入(汇总跳转连接+个人安装记录)_gazebo模型库-CSDN博客
roslaunch mrobot_description view_mrobot_with_camera_gazebo.launch
rqt_image_view
/camera/image_raw
roslaunch mrobot_description view_mrobot_with_kinect_gazebo.launch
rosrun rviz rviz
Fixed Frame:camera_frame_optical
add PointCloud2
Topic:/camera/depth/points
Unreliable:√
roslaunch mrobot_description view_mrobot_with_kinect_gazebo.launch
rosrun rviz rviz
Fixed Frame:base_footprint
add LaserScan
Topic:/scan
roslaunch usb_cam usb_cam-test.launch
无freenect_launch package
cd ~/ros-learning/src
git clone [email protected]:machinekoder/ar_track_alvar.git -b noetic-devel
cd ..
catkin_make