ROS机器人小车建模仿真与SLAM

一、功能包创建

新建一个项目文件夹,放接下来要做的文件
在文件夹打开终端,输入以下代码

mkdir -p catkin_ws/src cd catkin_ws/src catkin_init_workspace
导入依赖,在src文件夹输入以下代码
catkin_create_pkg jubot_demo urdf xacro #创建功能包、添加依赖 cd jubot_demo/ mkdir urdf mkdir launch mkdir meshes #存放渲染机器人模型的文件 mkdir config #存放rviz配置的文件
打开VS Code写两个文件
jubot_base.urdf(放urdf文件夹下)
display_jubot_base_urdf.launch(放launch文件夹下)
config里的rviz文件是保存生成的,不用写

二、urdf文件

Unified Robot Description Format,统一机器人描述格式,简称为URDF在基础模型之上,我们为机器人添加尺寸大小。由于每个环节的参考系都位于该环节的底部,关节也是如此,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系即可。URDF中的 origin 域就是用来表示这种相对关系。
如果我们为机器人的关节添加 axis 旋转轴参数,那么该机器人模型就可以具备基本的运动学参数。

<?xml version="1.0" ?>
<robot name="jubot">
    
<!--base_car-->
    <link name="base_link">   
        <visual> 
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/> 
            <geometry>  
                <cylinder radius="0.20" length="0.16"/>             
            </geometry>
            <material name="yellow"> 
                <color rgba="1 0.4 0 1"/>  
            </material>
        </visual>
    </link>
 
<!--left_wheel-->
    <joint name="left_wheel_joint" type="continuous">   
        <origin xyz="0.0 0.19 -0.05" rpy="0.0 0.0 0.0"/> 
        <parent link="base_link"/>  
        <child link="left_wheel_link"/> 
        <axis xyz="0.0 1.0 0.0"/>  
    </joint>
 
    <link name="left_wheel_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/>
            <geometry>
                <cylinder radius="0.06" length="0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>
 
<!--right_wheel-->
    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0.0 -0.19 -0.05"/>
        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    </joint>
 
    <link name="right_wheel_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/>
            <geometry>
                <cylinder radius="0.06" length="0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1.0 1.0 0.9"/>
            </material>
        </visual>
    </link>
 
<!--front_caster-->
    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    </joint>
 
    <link name="front_caster_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <geometry>
                    <sphere radius="0.015"/>
                </geometry>
                <material name="black">
                    <color rgba="0.0 0.0 0.0 0.95"/>
                </material>
        </visual>
    </link>
 
<!--back_caster-->
    <joint name="back_caster_joint" type="continuous">
        <origin xyz="-0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    </joint>
 
    <link name="back_caster_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <geometry>
                    <sphere radius="0.015"/>
                </geometry>
            <material name="black">
                <color rgba="0.0 0.0 0.0 0.95"/>
            </material>
        </visual>
    </link>
</robot>

三、launch文件

display_jubot_base_urdf.launch 代码如下(示例):

`

<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />

<!-- 运行robot_state_publisher节点,发布tf  -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />

<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find jubot_demo)/config/jubot_urdf.rviz" required="true" />  

`

四、图形化显示

安装一个检查urdf语法的工具:

sudo apt-get install liburdfdom-tools
在urdf文件夹下打开终端检查语法:

check_urdf jubot_base.urdf
在urdf文件夹下打开终端,图形化显示URDF模型

urdf_to_graphiz jubot_base.urdf

此时会生成两个文件,打开pdf文件

五、RVIZ可视化

启动launch文件
roslaunch jubot_demo display_jubot_base_urdf.launch

在启动launch文件之前,需要编译配置一下:
(1)退到主目录catkin_ws下,执行catkin_make
(2)执行成功之后,再执行catkin_make install
(3)在主目录catkin_make下配置环境变量source devel/setup.bash
(4)检测环境变量是否配置成功echo $ROS_PACKAGE_PATH
到此,终于可以启动launch文件了
进入src目录下,输入命令roslaunch jubot_demo/launch/display_jubot_base_urdf.launch ,窗口自动打开了RVIZ,在global options下的Fixed Frame改为base_link,
然后我们看到在屏幕左下方有一个add按钮,单击,添加robotmodel,确定以后,就会发现图形正确显示了。
以上圆形步骤就完成了, 初步实现了urdf模型+rviz可视化。

五、创建一个四轮圆柱状机器人模型

配置urdf和launch文件
在一的urdf和launch文件基础上进行修改
添加摄像头和雷达传感器
摄像头和雷达 Xacro 文件实现
创建

my_camera.urdf.xacro

my_laser.urdf.xacro

my_car_camera.urdf.xacro

三个文件

六、安装 Arbotix

命令行调用

sudo apt-get install ros-<<VersionName()>>-arbotix
将 <<VsersionName()>> 替换成当前 ROS 版本名称,我使用的是noetic版本的,因此我使用命令sudo apt-get install ros-noetic-arbotix

创建新功能包,准备机器人 urdf、xacro

添加 arbotix 所需的配置文件

在config文件夹下新建hello.yaml文件

launch 文件中配置 arbotix 节点

启动 launch 文件并控制机器人模型运动

启动launch文件并配置 rviz
控制小车运动:
此时调用 rostopic list 会发现一个熟悉的话题: /cmd_vel

七、在gazebo中显示简单模型

创建功能包,导入依赖

找一个空闲文件夹,在终端中输入以下命令:

cd ~/fjy_xm //这是自定义的文件夹
mkdir catkin_urdf_gazebo
cd catkin_urdf_gazebo
mkdir src
catkin_make
source devel/setup.bash
cd src
catkin_create_pkg urdf_gazebo urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins
cd urdf_gazebo
mkdir launch //存储launch文件
mkdir urdf //存储urdf文件的目录
cd urdf
mkdir urdf
mkdir xacro
cd urdf
touch urdf_gazebo.urdf

编写URDF文件

在urdf_gazebo.urdf文件中编写以下程序,生成一个长度为0.5,宽度为0.2,高度为0.1的长方体

<robot name="mycar">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.5 0.2 0.1" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
            <material name="yellow">
                <color rgba="0.5 0.3 0.0 1" />
            </material>
        </visual>
 
        <collision>
            <geometry>
                <box size="0.5 0.2 0.1" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
 
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="6" />
            <inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1" />
        </inertial>
    </link>
    <gazebo reference="base_link">
        <material>Gazebo/Black</material>
    </gazebo>
 
</robot>

在gazebo中显示机器人模型

在gazebo中导入小车模型

八、ROS中使用摄像头

在ROS中使用摄像头的前提是,摄像头在Linux系统下是可识别的,通常来说UVC协议的USB摄像头都可以正常使用,大部分笔记本电脑自带的摄像头都是UVC协议的,所以也是可以直接使用的。

验证摄像头设备可用

使用命令 ls /dev/ 检查当前设备列表
如果设备列表中有video*设备,则摄像头设备在当前系统中有被正确的识别。
安装cheese

sudo apt install cheese

摄像头标定

在执行摄像头标定前,需要先准备一块标定板。
标定板有两种获得方法,第一种是采购成品的标定板,A4纸大小的标定板通常价格在300~400的样子。
如果不想采购,可以使用打印机将下面的文件按照1:1打印在A4纸上,然后贴在一块纯平的版上,例如亚克力板。
打印的标定板缺点在于,第一打印机的精度有限,边缘可能会产生模糊,另外就是在粘贴时很难做到极高的平整度,这两项都会对标定结果产生一定的影响,但是优点时便宜易得。
标定只针对手动对焦的相机,自动对焦的相机由于焦距变化,难以形成固定的标定参数。
相机在标定前,需要调整好焦距(拧镜头),使成像清晰,并将当前焦距固定住,防止焦距产生变化。
标定需要用到camera_calibration功能包,可以通过apt方式安装

sudo apt install ros-noetic-camera-calibration

拿着标定板放在相机视野内,标定板上出现彩色线条则为有效图像,反之无效,需要调整标定板位置。
分别在左右移动(X),直到标定界面上X下方的精度条为绿色,然后依次在上下(Y),远近(Size),倾斜(Skew)方向移动,移动过程尽量缓慢,避免大幅度的移动使相机成像产生拖影。

ORB-SLAM2 安装和编译

ORB-SLAM2下载

从github.com下载ORB-SLAM2,可以在github上直接download ZIP压缩文件。也可在安装git之后,用以下命令在终端上下载。配置环境。
安装Pangolin,安装OpenCV3,解压文件
进行cmake,进行编译安装
配置环境
修改ld.so.conf文件
用gedit打开/etc/ld.so.conf
在文件中加上一行 /usr/loacal/lib
其中/user/loacal是opencv安装路径也就是makefile中指定的安装路径
终端执行

检验是否安装成功

在命令行中输入如下命令:

pkg-config opencv

安装Eigen3,Ceres,DBoW3, g2o,ORB_SLAM2

九、运行Kitee数据集

数据集准备

下载好后,进入ORB_SLAM2文件夹创建一个文件夹:data,将下载好的数据集压缩包提取到data下面,然后打开一个新终端输入以下命令:

cd ORB_SLAM2
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml data/rgbd_dataset_freiburg1_xyz

制作自己的数据集

1、下载我给的这两个文档=文档=,一个CPP,一个yaml文件,将其复制到ORB_SLAM2下面,再用自己的手机拍一个视频,1、手机横向,2、开始拍摄时,首先手机左右缓慢水平移动,像螃蟹一样横着左右运动!,然后大概5s后,再慢慢往前走,不要走的太快,转弯时不要太快,以防跟踪丢失!

2、录制完成后,将其复制到ORB_SLAM2文件下,重命名为test.mp4,用微信传到电脑时,最好选择原图传送!,

3、以上步骤完成后,ORB_SLAM2里面应该多了三个文件:test.cpp,test.yaml,test.mp4.

4、修改ORB_SLAM2里面的CMakeLists.txt,添加如下代码:保存

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
add_executable(test test.cpp)
target_link_libraries(test ${PROJECT_NAME})

5、编译运行

  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(Robot Operating System)是一个开源的机器人操作系统,它提供了一系列的软件库和工具,可以帮助开发者轻松地构建机器人应用程序。在ROS中,可以使用各种传感器和执行器来感知和操纵机器人,同时还有众多功能强大的软件包可供使用。 对于ROS机器人小车建模,首先需要定义其物理模型和运动模型。物理模型涉及到小车的尺寸、质量分布以及各个部件之间的连接关系等,可以使用三维建模软件(如SolidWorks、Blender等)进行建模。在模型中,可以添加传感器和执行器的模型,以便在软件层面对其进行控制和感知。 接下来,需要在ROS中创建一个软件包,该软件包将包含小车的相关源代码和配置文件。在软件包中,可以编写小车的控制算法、传感器数据处理和与外部环境的通信接口等。根据小车的物理模型和运动模型,可以在软件包中定义小车的运动规划和控制算法,使其能够实现自主导航、避障等功能。 在ROS的开发过程中,可以使用ROS提供的各种工具和软件包快速构建和测试小车的功能。例如,可以使用Gazebo仿真平台对小车进行虚拟环境下的仿真测试,通过仿真可以更快速地验证和优化算法;同时,可以使用Rviz可视化工具对小车的运动、传感器数据等进行可视化展示和调试。 总之,ROS提供了丰富的功能和工具,可用于对机器人小车进行建模和开发。通过合理的物理模型设计和运动算法编写,可以实现小车的各种功能,从而实现自主导航、运动规划、避障等应用。在开发过程中,可以利用ROS的丰富生态系统和强大的社区支持,使机器人小车建模更加高效和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值