uc网站模板,泰国云服务器,类似稿定设计的网站,网站改进建议0、何为仿真 通过计算机对实体机器人系统进行模拟的技术。 1、为何仿真
低成本#xff1a; 机器人实体一般价格昂贵#xff0c;为降低机器人学习、调试的成本#xff1b;高效#xff1a; 搭建的环境更为多样且灵活#xff0c;可以提高测试效率以及测试覆盖率#xff1b…0、何为仿真 通过计算机对实体机器人系统进行模拟的技术。 1、为何仿真
低成本 机器人实体一般价格昂贵为降低机器人学习、调试的成本高效 搭建的环境更为多样且灵活可以提高测试效率以及测试覆盖率高安全性 仿真环境下无需要考虑耗损问题。 2、仿真技术的内容与要求 1、【建模】学习如何创建 并 显示机器人模型 能够独立使用urdf创建机器人模型并在Rviz与Gazebo中分别显示 2、【搭建环境】学习如何搭建仿真环境 能够使用Gazebo搭建仿真环境 3、【感知环境】学习如何实现机器人模型与仿真环境的交互 能够使用机器人模型中的传感器【相机、雷达…】获取仿真环境数据Rviz。 2.0、介绍创建ros包的流程。 创建工作空间 创建Ros包 编写源码 编译 运行包 2.0.1 创建工作空间【并初始化】 mkdir -p catkin_ws/src // 若创建嵌套文件夹必须使用 -p创建单个文件夹则不用cd catkin_ws // 进入该工作空间catkin_make // 初始化工作空间 2.0.2 创建Ros包【使用依赖】 cd src // 进入工作空间的src内catkin_create_pkg ros_test roscpp rospy std_msgs 2.0.3 编写源码 cd catkin_ws/src/ros_test/src编写 src 内的源码文件 ***.cppcd catkin_ws/src/ros_test改写 ros_test 内的 CMakeLists.txt 文件 2.0.4 编译Ros包 cd catkin_wscatkin_make 2.0.5 运行Ros包 // 新开终端执行
roscore//另一终端执行
ca catkin_ws
source devel/setup.bash
rosrun ros_test ros_test_node // rusrun 包名 节点名 3、 URDF
URDF是 Unified Robot Description Format 的首字母缩写直译为 统一(标准化)机器人描述格式 可以以一种 XML 的方式描述机器人的部分结构比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C 内置的解释器转换成可视化的机器人模型是 ROS 中实现机器人仿真的重要组件。
URDF 不能单独使用需要结合 Rviz 或 GazeboURDF 只是一个文件需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型。 4、 URDF 集成 Rviz 流程 1. 准备 新建功能包导入依赖 创建一个新的功能包导入依赖 urdf xacro
// 创建工作空间 并 初始化
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make// 创建功能包 并 导入依赖
cd catkin_ws/src/
catkin_create_pkg ros_test urdf xacro在当前功能包下再新建几个目录 urdf存储urdf文件的目录 meshes存储机器人模型渲染文件 config存储配置文件比如 **.rviz 文件 launch存储launch启动文件
// 功能包内新建文件夹
cd catkin_ws/src/ros_test
mkdir -p urdf/urdf // 此为创建均为urdf的两层目录也可以只创建一层urdf目录【双层是为了之后建urdf/xacro】
mkdir meshes
mkdir config
mkdir launch2.1 核心 编写【 urdf 文件】 与 launch 文件 // 创建urdf文件并填入相应内容
cd catkin_ws/src/ros_test/urdf/urdf
gedit urdf01_HelloWorld.urdf// 填入如下内容robot namemycarlink namebase_linkvisualgeometrybox size0.5 0.2 0.1 //geometry/visual/link
/robot
// 解释urdf文件
一、robot
urdf 中为了保证 xml 语法的完整性使用了robot标签作为根标签
所有的 link 和 joint 以及其他标签都必须包含在 robot 标签内,在该标签内可以通过 name 属性设置机器人模型的名称1.属性
name: 指定机器人模型的名称2.子标签其他标签都是子级标签 // 解释urdf文件
二、linkurdf 中的 link 标签用于描述机器人某个部件(也即刚体部分)的外观和物理属性比如: 机器人底座、轮子、激光雷达、摄像头...每一个部件都对应一个 link, 在 link 标签内可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性1.属性name --- 为连杆命名2.子标签visual --- 描述外观(对应的数据是可视的)geometry 设置连杆的形状标签1: box(盒状)属性:size长(x) 宽(y) 高(z)标签2: cylinder(圆柱)属性:radius半径 length高度标签3: sphere(球体)属性:radius半径标签4: mesh(为连杆添加皮肤)属性: filename资源路径(格式:package://packagename/path/文件)origin 设置偏移量与倾斜弧度属性1: xyzx偏移 y便宜 z偏移属性2: rpyx翻滚 y俯仰 z偏航 (单位是弧度)metrial 设置材料属性(颜色)属性: name标签: color属性: rgba红绿蓝权重值与透明度 (每个权重值以及透明度取值[0,1])collision --- 连杆的碰撞属性Inertial --- 连杆的惯性矩阵在此只演示visual使用。 link 案例
需求:分别生成长方体、圆柱与球体的机器人部件
URDF文件示例如下: link namebase_linkvisual!-- 形状 --geometry!-- 长方体的长宽高 --!-- box size0.5 0.3 0.1 / --!-- 圆柱半径和长度 --!-- cylinder radius0.5 length0.1 / --!-- 球体半径--!-- sphere radius0.3 / --/geometry!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14180度 1.5790度) --origin xyz0 0 0 rpy0 0 0 /!-- 颜色: rred ggreen bblue aalpha --material nameblackcolor rgba0.7 0.5 0 0.5 //material/visual/link // 解释urdf文件
三、jointurdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性还可以指定关节运动的安全极限机器人的两个部件(分别称之为 parent link 与 child link)以关节的形式相连接不同的关节有不同的运动形式: 旋转、滑动、固定、旋转速度、旋转角度限制....,比如:安装在底座上的轮子可以360度旋转而摄像头则可能是完全固定在底座上。joint标签对应的数据在模型中是不可见的
1.属性name --- 为关节命名type --- 关节运动形式continuous: 旋转关节可以绕单轴无限旋转revolute: 旋转关节类似于 continues,但是有旋转角度限制prismatic: 滑动关节沿某一轴线移动的关节有位置极限planer: 平面关节允许在平面正交方向上平移或旋转floating: 浮动关节允许进行平移、旋转运动fixed: 固定关节不允许运动的特殊关节2.子标签parent(必需的)parent link的名字是一个强制的属性link:父级连杆的名字是这个link在机器人结构树中的名字。child(必需的)child link的名字是一个强制的属性link:子级连杆的名字是这个link在机器人结构树中的名字。origin属性: xyz各轴线上的偏移量 rpy各轴线上的偏移弧度。axis属性: xyz用于设置围绕哪个关节轴运动。 joint 案例
需求:创建机器人模型底盘为长方体在长方体的前面添加一摄像头摄像头可以沿着 Z 轴 360 度旋转。
URDF文件示例如下:
!-- 需求: 创建机器人模型底盘为长方体在长方体的前面添加一摄像头摄像头可以沿着 Z 轴 360 度旋转--
robot namemycar!-- 底盘 --link namebase_linkvisualgeometrybox size0.5 0.2 0.1 //geometryorigin xyz0 0 0 rpy0 0 0 /material namebluecolor rgba0 0 1.0 0.5 //material/visual/link!-- 摄像头 --link namecameravisualgeometrybox size0.02 0.05 0.05 //geometryorigin xyz0 0 0 rpy0 0 0 /material nameredcolor rgba1 0 0 0.5 //material/visual/link!-- 关节 --joint namecamera2baselink typecontinuousparent linkbase_link/child linkcamera /!-- 需要计算两个 link 的物理中心之间的偏移量 --origin xyz0.2 0 0.075 rpy0 0 0 /axis xyz0 0 1 //joint/robot 2.2 核心 编写 urdf 与【 launch 文件】 编写launch文件 launch文件示例如下
cd launch
gedit launchparam namerobot_description textfile$(find urdf_rviz_demo)/urdf/urdf/urdf03_joint.urdf /node pkgrviz typerviz namerviz args-d $(find urdf_rviz_demo)/config/helloworld.rviz / !-- 添加关节状态发布节点 --node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher /!-- 添加机器人状态发布节点 --node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher /!-- 可选:用于控制关节运动的节点 --node pkgjoint_state_publisher_gui typejoint_state_publisher_gui namejoint_state_publisher_gui //launch 3. 核心 在launch文件集成URDF与Rviz 在 launch 目录下新建一个launch文件该 launch 文件需要启动 Rviz并导入 urdf 文件【此处的包名应为 ros_test】Rviz 启动后可以自动载入解析urdf文件并显示机器人模型核心问题:如何导入 urdf 文件? 在 ROS 中可以将 urdf 文件的路径设置到参数服务器使用的参数名是:robot_description,示例代码如下:
cd catkin_ws/src/ros_test/launch
gedit urdf01_HelloWorld.launch
// 填入如下内容launch!-- 设置参数 --param namerobot_description textfile$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf /!-- 启动 rviz --node pkgrviz typerviz namerviz //launch 4. 1 显示 在Rviz中显示机器人模型。 roslaunch ros_test urdf01_HelloWorld.launchrviz 启动后会发现并没有盒装的机器人模型这是因为默认情况下没有添加机器人显示组件需要手动添加添加方式如下: 设置完毕后可以正常显示了 4. 2.优化 rviz 启动 重复启动launch文件时Rviz 之前的组件配置信息不会自动保存需要重复执行步骤4的操作为了方便使用可以使用如下方式优化: 首先将当前配置保存进config目录
// 在当前路径下
catkin_ws/src/ros_test/config/
// 保存rivz配置文件
show_mycar.rviz然后urdf01_HelloWorld.launch文件中 Rviz 的启动配置添加参数:args,值设置为-d 配置文件路径
launchparam namerobot_description textfile$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf /node pkgrviz typerviz namerviz args-d $(find 报名)/config/rviz/show_mycar.rviz /
/launch
最后再启动时就可以包含之前的组件配置了使用更方便快捷。 5、 xacro 集成Rviz【单个xacro文件】 // 创建工作空间 并 初始化
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make// 创建ros功能包
cd catkin_ws/src
catkin_create_pkg demo_pkg urdf xacro// 功能包内创建多个文件夹
cd catkin_ws/src/demo_pkg
mkdir -p urdf/xacro
mkdir launch
mkdir configcd urdf/xacro
gedit my_car.urdf.xacro
// 填入如下内容robot namemy_base xmlns:xacrohttp://www.ros.org/wiki/xacro!----xacro:property namePI value3.141/!-- --material nameblackcolor rgba0.0 0.0 0.0 1.0 //material!-- --xacro:property namebase_footprint_radius value0.001 / !-- base_footprint --xacro:property namebase_link_radius value0.1 / !-- base_link --xacro:property namebase_link_length value0.08 / !-- base_link --xacro:property nameearth_space value0.015 / !-- --!-- --link namebase_footprintvisualgeometrysphere radius${base_footprint_radius} //geometry/visual/linklink namebase_linkvisualgeometrycylinder radius${base_link_radius} length${base_link_length} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameyellowcolor rgba0.5 0.3 0.0 0.5 //material/visual/linkjoint namebase_link2base_footprint typefixedparent linkbase_footprint /child linkbase_link /origin xyz0 0 ${earth_space base_link_length / 2 } //joint!-- --!-- --xacro:property namewheel_radius value0.0325 /!-- --xacro:property namewheel_length value0.015 /!-- --!-- --xacro:macro nameadd_wheels paramsname flaglink name${name}_wheelvisualgeometrycylinder radius${wheel_radius} length${wheel_length} //geometryorigin xyz0.0 0.0 0.0 rpy${PI / 2} 0.0 0.0 /material nameblack //visual/linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz0 ${flag * base_link_radius} ${-(earth_space base_link_length / 2 - wheel_radius) } /axis xyz0 1 0 //joint/xacro:macroxacro:add_wheels nameleft flag1 /xacro:add_wheels nameright flag-1 /!-- --!-- --xacro:property namesupport_wheel_radius value0.0075 / !-- --!-- --xacro:macro nameadd_support_wheel paramsname flag link name${name}_wheelvisualgeometrysphere radius${support_wheel_radius} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameblack //visual/linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz${flag * (base_link_radius - support_wheel_radius)} 0 ${-(base_link_length / 2 earth_space / 2)} /axis xyz1 1 1 //joint/xacro:macroxacro:add_support_wheel namefront flag1 /xacro:add_support_wheel nameback flag-1 //robot
cd launch
gedit my_car.launch
// 填入如下内容launchparam namerobot_description command$(find xacro)/xacro $(find demo64)/urdf/xacro/my_car.urdf.xacro /node pkgrviz typerviz namerviz /node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher outputscreen /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreen /node pkgjoint_state_publisher_gui typejoint_state_publisher_gui namejoint_state_publisher_gui outputscreen /
/launch// 进入工作空间内进行编译
cd catkin_ws
catkin_make// 执行权限
source devel/setup.bash// 启动launch文件
roslaunch demo_pkg my_car.launch// Rviz启动后将对Rviz界面进行设置【同上面】设置好后将其保存进config文件夹内命名my_car.rviz// 修改my_car.launch
// 修改如下指定了Rviz的路径
launchparam namerobot_description command$(find xacro)/xacro $(find demo64)/urdf/xacro/my_car.urdf.xacro/node pkgrviz typerviz namerviz args-d $(find demo64)/config/demo64.rviz/node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher outputscreen /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreen /node pkgjoint_state_publisher_gui typejoint_state_publisher_gui namejoint_state_publisher_gui outputscreen /
/launch// 再次启动launch文件
roslaunch demo_pkg my_car.launch// 会看到模型就在打开的Rviz界面内。 6、 xacro 集成Rviz【多个xacro文件】 // 创建工作空间 并 初始化
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make// 创建ros功能包
cd catkin_ws/src
catkin_create_pkg demo_pkg urdf xacro// 功能包内创建多个文件夹
cd catkin_ws/src/demo_pkg
mkdir -p urdf/xacro
mkdir launch
mkdir configcd urdf/xacro// 此处需要创建多个xacro文件gedit my_car.urdf.xacrogedit my_camrea.urdf.xacrogedit my_laser.urdf.xacrogedit my_car_camera_laser.urdf.xacro
// 分别填入如下内容!-- my_car.urdf.xacro --
robot namemy_base xmlns:xacrohttp://www.ros.org/wiki/xacro!----xacro:property namePI value3.141/!-- --material nameblackcolor rgba0.0 0.0 0.0 1.0 //material!-- --xacro:property namebase_footprint_radius value0.001 / !-- base_footprint --xacro:property namebase_link_radius value0.1 / !-- base_link --xacro:property namebase_link_length value0.08 / !-- base_link --xacro:property nameearth_space value0.015 / !-- --!-- --link namebase_footprintvisualgeometrysphere radius${base_footprint_radius} //geometry/visual/linklink namebase_linkvisualgeometrycylinder radius${base_link_radius} length${base_link_length} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameyellowcolor rgba0.5 0.3 0.0 0.5 //material/visual/linkjoint namebase_link2base_footprint typefixedparent linkbase_footprint /child linkbase_link /origin xyz0 0 ${earth_space base_link_length / 2 } //joint!-- --!-- --xacro:property namewheel_radius value0.0325 /!-- --xacro:property namewheel_length value0.015 /!-- --!-- --xacro:macro nameadd_wheels paramsname flaglink name${name}_wheelvisualgeometrycylinder radius${wheel_radius} length${wheel_length} //geometryorigin xyz0.0 0.0 0.0 rpy${PI / 2} 0.0 0.0 /material nameblack //visual/linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz0 ${flag * base_link_radius} ${-(earth_space base_link_length / 2 - wheel_radius) } /axis xyz0 1 0 //joint/xacro:macroxacro:add_wheels nameleft flag1 /xacro:add_wheels nameright flag-1 /!-- --!-- --xacro:property namesupport_wheel_radius value0.0075 / !-- --!-- --xacro:macro nameadd_support_wheel paramsname flag link name${name}_wheelvisualgeometrysphere radius${support_wheel_radius} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameblack //visual/linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz${flag * (base_link_radius - support_wheel_radius)} 0 ${-(base_link_length / 2 earth_space / 2)} /axis xyz1 1 1 //joint/xacro:macroxacro:add_support_wheel namefront flag1 /xacro:add_support_wheel nameback flag-1 //robot
!-- my_camrea.urdf.xacro --
robot namemy_camera xmlns:xacrohttp://wiki.ros.org/xacro!-- --xacro:property namecamera_length value0.01 / !-- (x) --xacro:property namecamera_width value0.025 / !-- (y) --xacro:property namecamera_height value0.025 / !-- (z) --xacro:property namecamera_x value0.08 / !-- --xacro:property namecamera_y value0.0 / !-- --xacro:property namecamera_z value${base_link_length / 2 camera_height / 2} / !-- --!-- --link namecameravisualgeometrybox size${camera_length} ${camera_width} ${camera_height} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameblack //visual/linkjoint namecamera2base_link typefixedparent linkbase_link /child linkcamera /origin xyz${camera_x} ${camera_y} ${camera_z} //joint
/robot
!-- my_laser.urdf.xacro --
robot namemy_laser xmlns:xacrohttp://wiki.ros.org/xacro!-- --xacro:property namesupport_length value0.15 / !-- --xacro:property namesupport_radius value0.01 / !-- --xacro:property namesupport_x value0.0 / !-- --xacro:property namesupport_y value0.0 / !-- --xacro:property namesupport_z value${base_link_length / 2 support_length / 2} / !-- --link namesupportvisualgeometrycylinder radius${support_radius} length${support_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameredcolor rgba0.8 0.2 0.0 0.8 //material/visual/linkjoint namesupport2base_link typefixedparent linkbase_link /child linksupport /origin xyz${support_x} ${support_y} ${support_z} //joint!-- --xacro:property namelaser_length value0.05 / !-- --xacro:property namelaser_radius value0.03 / !-- --xacro:property namelaser_x value0.0 / !-- --xacro:property namelaser_y value0.0 / !-- --xacro:property namelaser_z value${support_length / 2 laser_length / 2} / !-- --!-- --link namelaservisualgeometrycylinder radius${laser_radius} length${laser_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameblack //visual/linkjoint namelaser2support typefixedparent linksupport /child linklaser /origin xyz${laser_x} ${laser_y} ${laser_z} //joint
/robot
!-- my_car_camera_laser.urdf.xacro --
robot namemy_car_camera_laser xmlns:xacrohttp://wiki.ros.org/xacroxacro:include filenamemy_car.urdf.xacro /xacro:include filenamemy_camera.urdf.xacro /xacro:include filenamemy_laser.urdf.xacro //robotcd launch
gedit my_car_camera_laser.launch
// 填入如下内容launchparam namerobot_description command$(find xacro)/xacro $(find demo_pkg)/urdf/xacro/my_car_camera_laser.urdf.xacro /node pkgrviz typerviz namerviz /node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher outputscreen /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreen /node pkgjoint_state_publisher_gui typejoint_state_publisher_gui namejoint_state_publisher_gui outputscreen /
/launch// 进入工作空间内进行编译
cd catkin_ws
catkin_make// 执行权限
source devel/setup.bash// 启动launch文件
roslaunch demo_pkg my_car_camera_laser.launch// Rviz启动后将对Rviz界面进行设置【同上面】设置好后将其保存进config文件夹内命名my_car_camera_laser.rviz
config/my_car_camera_laser.rviz// 修改my_car.launch
// 修改如下指定了Rviz的路径
launchparam namerobot_description command$(find xacro)/xacro $(find demo_pkg)/urdf/xacro/my_car_camera_laser.urdf.xacro/node pkgrviz typerviz namerviz args-d $(find demo_pkg)/config/my_car_camera_laser.rviz/node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher outputscreen /node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher outputscreen /node pkgjoint_state_publisher_gui typejoint_state_publisher_gui namejoint_state_publisher_gui outputscreen /
/launch// 再次启动launch文件
roslaunch demo_pkg my_car_camera_laser.launch// 会看到模型就在打开的Rviz界面内。 7、URDF 集成Gazebo URDF 与 Gazebo 集成流程与 Rviz 实现类似主要步骤如下: 1. 创建功能包导入依赖项 2. 编写 URDF 或 Xacro 文件 3. 启动 Gazebo 并显示机器人模型 7.1 创建功能包 创建新功能包导入依赖包: urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins // 创建工作空间 并 初始化
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make// 创建Ros功能包 并 导入依赖
cd catkin_ws/src
catkin_create_pkg demo_pkg urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins 7.2 编写URDF文件 // 新建功能包内的文件夹
mkdir urdf
mkdir launch
mkdir configcd urdf
gedit urdf01_helloworld.urdf
// 填入如下内容!-- 创建一个机器人模型(盒状即可)显示在 Gazebo 中
--robot namemycarlink namebase_linkvisualgeometrybox size0.5 0.2 0.1 //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameyellowcolor rgba0.5 0.3 0.0 1 //material/visualcollisiongeometrybox size0.5 0.2 0.1 //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 //collisioninertialorigin xyz0 0 0 /mass value6 /inertia ixx1 ixy0 ixz0 iyy1 iyz0 izz1 //inertial/linkgazebo referencebase_linkmaterialGazebo/Blue/material/gazebo/robot 注意 当 URDF 需要与 Gazebo 集成时和 Rviz 有明显区别: 1.必须使用 collision 标签因为既然是仿真环境那么必然涉及到碰撞检测collision 提供碰撞检测的依据。 2.必须使用 inertial 标签此标签标注了当前机器人某个刚体部分的惯性矩阵用于一些力学相关的仿真计算。 3.颜色设置也需要重新使用 gazebo 标签标注因为之前的颜色设置为了方便调试包含透明度仿真环境下没有此选项。 7.3 启动Gazebo并显示模型 cd launch
gedit urdf01_helloworld.launch
// 填入如下内容launch!-- 将 Urdf 文件的内容加载到参数服务器 --param namerobot_description textfile$(find demo02_urdf_gazebo)/urdf/urdf01_helloworld.urdf /!-- 启动 gazebo --include file$(find gazebo_ros)/launch/empty_world.launch /!-- 在 gazebo 中显示机器人模型 --node pkggazebo_ros typespawn_model namemodel args-urdf -model mycar -param robot_description /
/launch
!-- 代码解释--include file$(find gazebo_ros)/launch/empty_world.launch /
!-- 启动 Gazebo 的仿真环境当前环境为空环境 --node pkggazebo_ros typespawn_model namemodel args-urdf -model mycar -param robot_description /!-- 在 Gazebo 中加载一个机器人模型该功能由 gazebo_ros 下的 spawn_model 提供:-urdf 加载的是 urdf 文件-model mycar 模型名称是 mycar-param robot_description 从参数 robot_description 中载入模型-x 模型载入的 x 坐标-y 模型载入的 y 坐标-z 模型载入的 z 坐标
-- 8、xacro 集成Gazebo 在 ctrlc 退出gazebo时出现killed 再次启动roslaunch时就会报如下错误 翻译过来的意思就是说 “执行XXX/gzserver 时进程挂掉程序退出 执行XXX/gzclient 时进程挂掉程序退出。” 根据报错解释可以确定主要是gazebo在之前的操作中打开过而没有完全的关闭使用ctrlc仅关闭了了gazebo的gui界面并没有完全关闭gazebo。 解决方法终端执行 killall gzserver killall gzclient // 解决方法---输入如下指令
killall gzserver killall gzclient [gazebo-1] process has died [pid 108415, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode /home/hzx/hzx_ws/demo_gazebo_ws/src/demo_gazebo/world/box_house.world __name:gazebo __log:/home/hzx/.ros/log/fd9008b8-0d3a-11ef-9a38-000c29915674/gazebo-1.log].
log file: /home/hzx/.ros/log/fd9008b8-0d3a-11ef-9a38-000c29915674/gazebo-1*.log[gazebo_gui-2] process has died [pid 108418, exit code 134, cmd /opt/ros/melodic/lib/gazebo_ros/gzclient __name:gazebo_gui __log:/home/hzx/.ros/log/fd9008b8-0d3a-11ef-9a38-000c29915674/gazebo_gui-2.log].
log file: /home/hzx/.ros/log/fd9008b8-0d3a-11ef-9a38-000c29915674/gazebo_gui-2*.log 8.1 报如下错误Error [Converter.cc:151] Unable to convert from SDF version 1.7 to 1.6 翻译过来的意思就是说 “无法将SDF的版本从1.7转成1.6” 根据报错解释可以确定在执行world.launch 文件时出现了错误通过查看world.launch文件发现启动该launch文件时调用了如下三个文件。 具体三个文件如下 1、my_car_camera_laser.urdf.xacro 2、empty_world.launch 3、box_house.world 通过逐个文件排查发现是 3、box_house.world 文件存在问题 解决方法将box_house.world中的 1.7 改写成 1.6 就可以正常启动了。 报如下错误UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 7323-7324: ordinal not in range(128) 翻译过来的意思就是说 “Unicode编码错误:“ascii”编解码器无法对位置7323-7324中的字符进行编码:序号不在范围内128” 根据报错解释可以确定在启动 my_sensors_car_camera_laser.launch文件时需要调用一些xacro文件这些文件中应该是存在中文导致编码错误。 ubuntu18.04 melodic版本中一般使用python2.7环境,该环境下urdf文件中不能有中文注释出现,否则报错 解决方法一将调用的xacro文件中的中文全部去掉即可。 解决方法二进行一些设置可以避免报 error但会引入其他问题【引入的问题不影响启动xacro文件】参考链接在此。 // urdf文件不注释阅读起来很麻烦,可以通过如下解决// cd到根目录下cd /opt/ros/melodic/lib/python2.7/dist-packages sudo gedit sitecustomize.py// 在其中添加如下内容:#codingutf8import sysreload(sys)sys.setdefaultencoding(utf8) // 引入的问题如下
Error in sitecustomize; set PYTHONVERBOSE for traceback:
NameError: name reload is not defined
Error in sitecustomize; set PYTHONVERBOSE for traceback:
NameError: name reload is not defined// 不影响启动 xacro 文件介意者可以选择方法一。 9、载入 100、ROS过程中的错误 1. RLException: multiple files named XXX hzxvm:~/hzx_ws/demo_gazebo_ws$ roslaunch demo_gazebo my_sensors_car_camera_laser.urdf.xacro
RLException: multiple files named [my_sensors_car_camera_laser.urdf.xacro] in package [demo_gazebo]:
- /home/hzx/hzx_ws/demo_gazebo_ws/src/demo_gazebo/urdf/xacro/my_sensors_car_camera_laser.urdf.xacro
- /home/hzx/hzx_ws/demo_gazebo_ws/src/demo_gazebo/launch/my_sensors_car_camera_laser.urdf.xacro
Please specify full path instead
The traceback for the exception was written to the log file 翻译过来的意思就是说 “报了一个RLException错误在【demo_gazebo】功能包内有多个叫做【my_sensors_car_camera_laser.urdf.xacro】的文件 并且之后也给你指出了这重名文件的各个路径。” 根据报错解释可以明显的发现问题所在直接修改重名文件即可。 2、RLException: Invalid roslaunch XML syntax: no root launch tag hzxvm:~/hzx_ws/demo_gazebo_ws$ roslaunch demo_gazebo my_sensors_car_camera_laser.urdf.xacro
... logging to /home/hzx/.ros/log/fd9008b8-0d3a-11ef-9a38-000c29915674/roslaunch-vm-110873.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is 1GB.RLException: Invalid roslaunch XML syntax: no root launch tag
The traceback for the exception was written to the log file 翻译过来的意思就是说 “ 报了一个RLException错误无效的roslaunch XML语法:没有根 launch标记 ” 根据报错解释可以明显的发现问题所在执行roslaunch时选定的launch文件有问题一看确实有问题修改launch文件就好了。 3、RLException: [my_sensors_car_camera_laser.launch] is neither a launch 报如下错误RLException: [my_sensors_car_camera_laser.launch] is neither a launch file in package [demo_gazebo] nor is [demo_gazebo] a launch file name 翻译过来的意思就是说 “XXX.launch 既不是demo_gazebo 功能包内的launch文件也不是demo_gazebo 功能包内的launch文件名” 根据报错解释可以确定此刻并未将devel/setup.bash添加到系统。 解决方法进入工作空间执行source具体如下 hzxvm:~/hzx_ws/demo_gazebo_ws$ source devel/setup.bash 第三
第 5号大小