安装ros2
很多镜像源无法直接安装ROS2,需要添加ROS2的地址到源列表,然后更新。
sudo apt install curl -y
sudo apt install gnupg2 -y
curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update
这里安装foxy桌面版:
sudo apt install ros-foxy-desktop
顺便安装个编译工具colcon
sudo apt install python3-colcon-common-extensions
要运行ros前需要先设置环境
source /opt/ros/foxy/setup.bash
环境设置成功可以用printenv | grep -i ROS查看相关信息
printenv | grep -i ROS
如果需要启动时自动设置环境,可以这样
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
运行helloworld测试例程
ros2 run demo_nodes_cpp talker &
ros2 run demo_nodes_cpp listener &
运行小乌龟测试例程
ros2 run turtlesim turtlesim_node &
ros2 run turtlesim turtle_teleop_key &
按键盘小乌龟会动,比如方向键
HelloWorld实现
创建工作空间
首先创建个ROS的工作空间
mkdir ~/ROSWorkspace
创建功能包和节点
创建功能包和节点一般可以用下面这个命令:
ros2 pkg create <package_name> --build-type <build-type> --dependencies <dependencies> --node-name
其中:
package_name:是我们要创建的功能包名称
build-type:用于指定构建系统类型,例如ament_cmake 和ament_python
dependencies:表示功能包的依赖项,例如:一般C++会需要rclcpp,Python会需要rclpy,当然这个不是强制的。
node-name:节点名称,也是可执行程序的名称,会自动生成对应的源文件并生成配置文件
先创建一个ament_cmake的hello world,这里虽然指定了dependencies rclcpp,不过目前的例程暂时没有用到,仅仅是个示例,不用纠结后面没有用到。
ros2 pkg create pkg_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld_cpp
指定–node-name会帮我们自动创建.cpp源文件
当然不指定–node-name,我们也可以手动创建一个自己的.cpp,然后在CMakeLists.txt中根据实际情况添加类似如下的内容:
源代码和工程配置完成后就可以编译我们的工程了,我们这里使用colcon来编译,当然也还有其他方式,这里暂时不做介绍。
前面已经安装了colcon,没安装的执行下面的命令安装一下
sudo apt install python3-colcon-common-extensions
编译工作包时我们可以直接编译工作空间里的所有工作包
colcon build
编译工作空间中的所有功能包可能会比较耗时,也可以单独编译指定的工作包,可以节省时间
colcon build --packages-select pkg_helloworld_cpp
可能我这里实在wsl环境下编译的,就几行代码耗时20多秒
编译完后,工作空间例会多出几个文件夹,build、install、log
install中有配置当前工作空间环境的脚本,运行helloworld前先配置下环境
. install/setup.bash
然后就可以使用我们的helloworld_cpp了,命令格式如下
ros2 run package_name executable_name ...
这里跑下helloworld_cpp
ros2 run pkg_helloworld_cpp helloworld_cpp
到这里我们就是先一个最简单hello world例程了。