Ubuntu24.04下ROS2和MoveIt2控制六轴机械臂(持续更新)

Ubuntu24.04下ROS2和MoveIt2控制六轴机械臂

一.安装Ubuntu24.04

二.安装ROS2(来源于ROS2官网)

1.Set locale

bash 复制代码
locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings

2.Enable required repositories

bash 复制代码
sudo apt install software-properties-common
sudo add-apt-repository universe
bash 复制代码
sudo apt update && sudo apt install curl -y
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb

3.Install development tools (optional)

bash 复制代码
sudo apt update && sudo apt install ros-dev-tools
bash 复制代码
sudo apt update
sudo apt upgrade
sudo apt install ros-jazzy-desktop

4.Setup environment

bash 复制代码
source /opt/ros/jazzy/setup.bash
echo " source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
bash 复制代码
echo " source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

5.install MoveIt2

bash 复制代码
sudo apt install ros-$ROS_DISTRO-rmw-cyclonedds-cpp
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
echo " export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
bash 复制代码
sudo apt install ros-jazzy-moveit

6.install vscode

bash 复制代码
sudo snap install code --classic

vscode需要下载的插件:

7.install terminator

bash 复制代码
sudo apt install terminator

三.制作URDF

1.创建工作空间:

bash 复制代码
mkdir ros2_ws
cd ros2_ws/
mkdir src
colcon build
cd install/
source setup.bash
echo " source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

2.创建功能包:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~$ cd ros2_ws/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ cd src
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ ros2 pkg create my_robot_description #

完成后终端如下所示

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ cd my_robot_description/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ ls
CMakeLists.txt  include  package.xml  src
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ rm -r include/ src/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ ls
CMakeLists.txt  package.xml
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ mkdir urdf launch rviz
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ ls
CMakeLists.txt  launch  package.xml  rviz  urdf
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ cd ..
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ code .

将如下部分删除:

修改后的CMakeLists.txt

cmake 复制代码
cmake_minimum_required(VERSION 3.8)
project(my_robot_description)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)

#-----增加的内容------
install(
  DIRECTORY launch rviz urdf
  DESTINATION share/${PROJECT_NAME}
)
#-------------------

ament_package()

修改后重新编译:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ colcon build --packages-select my_robot_description

执行如下指令:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ cd src/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ ls
my_robot_description
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ cd my_robot_description/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ ls
CMakeLists.txt  launch  package.xml  rviz  urdf
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ cd urdf/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ls
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ touch arm.urdf
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ls
arm.urdf
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ cd ~/ros2_ws/src/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ code .

3.制作arm.urdf文件代码:

xml 复制代码
<?xml version="1.0"?>
<robot name="my_robot">

    <material name="grey">
        <color rgba="0.5 0.5 0.5 1" />
    </material>

    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.4 0.4 0.1" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

</robot>

返回命令行执行:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ sudo apt install ros-jazzy-urdf-tutorial
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src$ cd my_robot_description/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description$ cd urdf/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ source ~/.bashrc 
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ros2 launch urdf_tutorial display.launch.py model:=/home/wzy/ros2_ws/src/my_robot_description/urdf/arm.urdf 

界面显示:

4.更新arm.urdf文件代码:

xml 复制代码
<?xml version="1.0"?>
<robot name="my_robot">

    <material name="grey">
        <color rgba="0.5 0.5 0.5 1" />
    </material>

    <material name="blue">
        <color rgba="0 0 0.5 1" />
    </material>

    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.4 0.4 0.1" />
            </geometry>
            <origin xyz="0 0 0.05" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="shoulder_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.1" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <joint name="joint1" type="revolute">
        <parent link="base_link" />
        <child link="shoulder_link" />
        <origin xyz="0 0 0" rpy="0 0 0" />
        <axis xyz="1 0 0" />
        <limit effort="1000.0" velocity="1.0" lower="-3.14" upper="3.14" />
    </joint>
    
</robot>

然后在终端执行:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ros2 launch urdf_tutorial display.launch.py model:=/home/wzy/ros2_ws/src/my_robot_description/urdf/arm.urdf 

5.完整版URDF

xml 复制代码
<?xml version="1.0"?>
<robot name="my_robot">

    <material name="grey">
        <color rgba="0.5 0.5 0.5 1" />
    </material>

    <material name="blue">
        <color rgba="0 0 0.5 1" />
    </material>

    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.4 0.4 0.1" />
            </geometry>
            <origin xyz="0 0 0.05" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="shoulder_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.1" />
            </geometry>
            <origin xyz="0 0 0.25" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="arm_link">
        <visual>
            <geometry>
                <cylinder length="0.6" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.3" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="elbow_link">
        <visual>
            <geometry>
                <cylinder length="0.1" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.05" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="forearm_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.25" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="wrist_link">
        <visual>
            <geometry>
                <box size="0.1 0.1 0.05" />
            </geometry>
            <origin xyz="0 0 0.025" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="hand_link">
        <visual>
            <geometry>
                <box size="0.1 0.1 0.02" />
            </geometry>
            <origin xyz="0 0 0.01" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="tool_link" />

    <joint name="joint1" type="revolute">
        <parent link="base_link" />
        <child link="shoulder_link" />
        <origin xyz="0 0 0.1" rpy="0 0 0" />
        <axis xyz="0 0 1" />
        <limit effort="1000.0" velocity="1.0" lower="-3.14" upper="3.14" />
    </joint>
    
    <joint name="joint2" type="revolute">
        <parent link="shoulder_link" />
        <child link="arm_link" />
        <origin xyz="0 0 0.5" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="0" upper="2.5" />
    </joint>

    <joint name="joint3" type="revolute">
        <parent link="arm_link" />
        <child link="elbow_link" />
        <origin xyz="0 0 0.6" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="0" upper="2.5" />
    </joint>

    <joint name="joint4" type="revolute">
        <parent link="elbow_link" />
        <child link="forearm_link" />
        <origin xyz="0 0 0.1" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="-3.14" upper="3.14" />
    </joint>

    <joint name="joint5" type="revolute">
        <parent link="forearm_link" />
        <child link="wrist_link" />
        <origin xyz="0 0 0.5" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="-1.57" upper="1.57" />
    </joint>

    <joint name="joint6" type="continuous">
        <parent link="wrist_link" />
        <child link="hand_link" />
        <origin xyz="0 0 0.05" rpy="0 0 0" />
        <axis xyz="0 0 1" />
    </joint>

    <joint name="hand_tool_joint" type="fixed">
        <parent link="hand_link" />
        <child link="tool_link" />
        <origin xyz="0 0 0.02" rpy="0 0 0" />
    </joint>

</robot>

然后在终端执行:

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ros2 launch urdf_tutorial display.launch.py model:=/home/wzy/ros2_ws/src/my_robot_description/urdf/arm.urdf 

四.将URDF修改为xacro格式

1.各自文件内容

1.1.arm.xacro
xml 复制代码
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">

    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.4 0.4 0.1" />
            </geometry>
            <origin xyz="0 0 0.05" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="shoulder_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.1" />
            </geometry>
            <origin xyz="0 0 0.25" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="arm_link">
        <visual>
            <geometry>
                <cylinder length="0.6" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.3" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="elbow_link">
        <visual>
            <geometry>
                <cylinder length="0.1" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.05" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="forearm_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.05" />
            </geometry>
            <origin xyz="0 0 0.25" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="wrist_link">
        <visual>
            <geometry>
                <box size="0.1 0.1 0.05" />
            </geometry>
            <origin xyz="0 0 0.025" rpy="0 0 0" />
            <material name="blue" />
        </visual>
    </link>

    <link name="hand_link">
        <visual>
            <geometry>
                <box size="0.1 0.1 0.02" />
            </geometry>
            <origin xyz="0 0 0.01" rpy="0 0 0" />
            <material name="grey" />
        </visual>
    </link>

    <link name="tool_link" />

    <joint name="joint1" type="revolute">
        <parent link="base_link" />
        <child link="shoulder_link" />
        <origin xyz="0 0 0.1" rpy="0 0 0" />
        <axis xyz="0 0 1" />
        <limit effort="1000.0" velocity="1.0" lower="-3.14" upper="3.14" />
    </joint>
    
    <joint name="joint2" type="revolute">
        <parent link="shoulder_link" />
        <child link="arm_link" />
        <origin xyz="0 0 0.5" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="0" upper="2.5" />
    </joint>

    <joint name="joint3" type="revolute">
        <parent link="arm_link" />
        <child link="elbow_link" />
        <origin xyz="0 0 0.6" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="0" upper="2.5" />
    </joint>

    <joint name="joint4" type="revolute">
        <parent link="elbow_link" />
        <child link="forearm_link" />
        <origin xyz="0 0 0.1" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="-3.14" upper="3.14" />
    </joint>

    <joint name="joint5" type="revolute">
        <parent link="forearm_link" />
        <child link="wrist_link" />
        <origin xyz="0 0 0.5" rpy="0 0 0" />
        <axis xyz="0 1 0" />
        <limit effort="1000.0" velocity="1.0" lower="-1.57" upper="1.57" />
    </joint>

    <joint name="joint6" type="continuous">
        <parent link="wrist_link" />
        <child link="hand_link" />
        <origin xyz="0 0 0.05" rpy="0 0 0" />
        <axis xyz="0 0 1" />
    </joint>

    <joint name="hand_tool_joint" type="fixed">
        <parent link="hand_link" />
        <child link="tool_link" />
        <origin xyz="0 0 0.02" rpy="0 0 0" />
    </joint>

</robot>
1.2 common_properties.xacro
xml 复制代码
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">

    <material name="grey">
        <color rgba="0.5 0.5 0.5 1" />
    </material>

    <material name="blue">
        <color rgba="0 0 0.5 1" />
    </material>

</robot>
1.3 my_robot.urdf.xacro
xml 复制代码
<?xml version="1.0"?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">

    <xacro:include filename="common_properties.xacro" />
    <xacro:include filename="arm.xacro" />

</robot>

2.终端运行命令

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws/src/my_robot_description/urdf$ ros2 launch urdf_tutorial display.launch.py model:=/home/wzy/ros2_ws/src/my_robot_description/urdf/my_robot.urdf.xacro

会出现跟之前一样的rviz机械臂界面,XACRO作为主要描述文件,可以提供了更好的可维护性和重用性,特别是在多个相似关节的情况下。

五.制作launch文件(display.launch.xml)

1.文件内容

xml 复制代码
<launch>
    <let name="urdf_path"
         value="$(find-pkg-share my_robot_description)/urdf/my_robot.urdf.xacro"/>
    <let name="rviz_config_path"
         value="$(find-pkg-share my_robot_description)/rviz/urdf_config.rviz"/>

    <node pkg="robot_state_publisher" exec="robot_state_publisher">
        <param name="robot_description"
               value="$(command 'xacro $(var urdf_path)')" />
    </node>

    <node pkg="joint_state_publisher_gui" exec="joint_state_publisher_gui" />

    <node pkg="rviz2" exec="rviz2" output="screen" 
          args="-d $(var rviz_config_path)" />
</launch>

2.终端输入如下命令行

bash 复制代码
wzy@wzy-VMware-Virtual-Platform:~$ cd ros2_ws/
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ ls
build  install  log  src
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ colcon build
Starting >>> my_robot_description
Finished <<< my_robot_description [0.40s]                  

Summary: 1 package finished [0.97s]
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ source install/setup.bash
wzy@wzy-VMware-Virtual-Platform:~/ros2_ws$ ros2 launch my_robot_description display.launch.xml 

3.弹出rviz界面

3.1 进行配置

首先将Fixed Frame设置为:base_link

然后点击左下角的Add按钮,往下拉选择RobotModel:

继续配置如下部分:

最终效果:

相关推荐
小屁猪qAq9 小时前
ROS2 节点中使用参数
开发语言·c++·参数·ros2
WWZZ20251 天前
Isaac Sim入门——基础用法
机器人·大模型·机械臂·ros2·具身智能·isaac sim
岱宗夫up2 天前
基于ROS的视觉导航系统实战:黑线循迹+激光笔跟随双模态实现(冰达机器人Nano改造)
linux·python·机器人·ros
General_G3 天前
ROS2资源汇总
linux·机器人·ros2
lq mm5 天前
3d-navi 3D导航模拟仿真项目复现
ros
涅小槃6 天前
Carla仿真学习笔记(版本0.9.16)
开发语言·python·ros·carla
佚明zj8 天前
深入浅出 ROS2 QoS:如何为你的机器人选择通信策略
ros
-点灯-9 天前
【无标题】
ros2
General_G9 天前
irobot_benchmark的编译和使用
linux·中间件·机器人·ros2