Skip to content

Commit a72ef3a

Browse files
authored
Release 0.7.0
AIRO-1696
2 parents d324209 + e1bf935 commit a72ef3a

37 files changed

+677
-154
lines changed

.github/workflows/jira-link.yaml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: jira-link
2+
3+
on:
4+
pull_request:
5+
types: [opened, edited, reopened, synchronize]
6+
7+
jobs:
8+
jira-link:
9+
runs-on: ubuntu-20.04
10+
steps:
11+
- name: check pull request title and source branch name
12+
run: |
13+
echo "Checking pull request with title ${{ github.event.pull_request.title }} from source branch ${{ github.event.pull_request.head.ref }}"
14+
if ! [[ "${{ github.event.pull_request.title }}" =~ ^AIRO-[0-9]+[[:space:]].*$ ]] && ! [[ "${{ github.event.pull_request.head.ref }}" =~ ^AIRO-[0-9]+.*$ ]]
15+
then
16+
echo -e "Please make sure one of the following is true:\n \
17+
1. the pull request title starts with 'AIRO-xxxx ', e.g. 'AIRO-1024 My Pull Request'\n \
18+
2. the source branch starts with 'AIRO-xxx', e.g. 'AIRO-1024-my-branch'"
19+
exit 1
20+
else
21+
echo "Completed checking"
22+
fi

.github/workflows/snyk.yaml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
name: Snyk Monitor
2+
3+
on:
4+
pull_request:
5+
6+
jobs:
7+
security:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/checkout@v2
11+
- name: Run Snyk to check for vulnerabilities
12+
uses: snyk/actions/python-3.8@master
13+
env:
14+
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
15+
with:
16+
command: monitor
17+
args: --file=tutorials/ros_unity_integration/ros2_packages/unity_robotics_demo/setup.py

.yamato/PickAndPlaceTests/ros.bash

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
#!/bin/bash
2+
# Assuming this script is invoked from the root of the repository...
3+
help() {
4+
echo "usage: $0 [COMMAND] [ROS]"
5+
echo "COMMAND:"
6+
echo " - stop"
7+
echo " - build_pick_and_place"
8+
echo " - start_pick_and_place"
9+
echo " - build_ros"
10+
echo " - start_ros"
11+
echo " - run_ros_color_publisher"
12+
echo " - run_ros_pose_service_client"
13+
echo " - run_ros_position_service"
14+
echo "ROS"
15+
echo " - ros1"
16+
echo " - ros2"
17+
}
18+
19+
COMMAND=$1
20+
ROS=$2
21+
22+
if [ "$COMMAND" == "stop" ]; then
23+
echo "Terminating process $3"
24+
pkill -15 -P $3
25+
sleep 10
26+
27+
elif [ "$COMMAND" == "build_pick_and_place" ]; then
28+
source /opt/ros/noetic/setup.bash
29+
pushd $PWD
30+
cd tutorials/pick_and_place/ROS
31+
catkin_make
32+
source devel/setup.bash
33+
popd
34+
35+
elif [ "$COMMAND" == "start_pick_and_place" ]; then
36+
echo "Starting ROS for Pick and Place"
37+
source tutorials/pick_and_place/ROS/devel/setup.bash
38+
roslaunch niryo_moveit part_3.launch
39+
40+
elif [ "$COMMAND" == "build_ros" ]; then
41+
if [ "$ROS" == "ros1" ]; then
42+
export ROS_WORKSPACE=$(pwd)/ros1_ws
43+
mkdir -p $ROS_WORKSPACE/src
44+
cp -r tutorials/ros_unity_integration/ros_packages/ $ROS_WORKSPACE/src/
45+
git clone https://github.com/Unity-Technologies/ROS-TCP-Endpoint $ROS_WORKSPACE/src/ros_tcp_endpoint -b main
46+
/bin/bash tutorials/ros_unity_integration/ros_docker/set-up-workspace
47+
chmod +x $ROS_WORKSPACE/src/ros_tcp_endpoint/src/ros_tcp_endpoint/*.py
48+
elif [ "$ROS" == "ros2" ]; then
49+
export ROS_WORKSPACE=$(pwd)/ros2_ws
50+
mkdir -p $ROS_WORKSPACE/src
51+
cp -r tutorials/ros_unity_integration/ros2_packages/ $ROS_WORKSPACE/src/
52+
git clone https://github.com/Unity-Technologies/ROS-TCP-Endpoint $ROS_WORKSPACE/src/ros_tcp_endpoint -b main-ros2
53+
source /opt/ros/$ROS_DISTRO/setup.sh
54+
pushd $(pwd)
55+
cd $ROS_WORKSPACE
56+
colcon build
57+
popd
58+
else
59+
help
60+
fi
61+
62+
elif [ "$COMMAND" == "start_ros" ]; then
63+
if [ "$ROS" == "ros1" ]; then
64+
source ros1_ws/devel/setup.bash
65+
echo "Starting ROS1 master"
66+
roscore &
67+
sleep 5 # Wait ROS master to stand up
68+
rosparam set ROS_IP 127.0.0.1
69+
echo "Starting ROS1 default server endpoint"
70+
rosrun ros_tcp_endpoint default_server_endpoint.py
71+
elif [ "$ROS" == "ros2" ]; then
72+
source ros2_ws/install/setup.bash
73+
echo "Starting ROS2 default server endpoint"
74+
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=127.0.0.1
75+
else
76+
help
77+
fi
78+
79+
elif [ "$COMMAND" == "run_ros_color_publisher" ]; then
80+
if [ "$ROS" == "ros1" ]; then
81+
source ros1_ws/devel/setup.bash
82+
elif [ "$ROS" == "ros2" ]; then
83+
source ros2_ws/install/setup.bash
84+
else
85+
help
86+
fi
87+
echo "Starting to run $ROS color publisher every 30 seconds"
88+
count=0
89+
while [[ $count -le 6 ]]
90+
do
91+
sleep 5
92+
if [ "$ROS" == "ros1" ]; then
93+
rosrun unity_robotics_demo color_publisher.py
94+
elif [ "$ROS" == "ros2" ]; then
95+
ros2 run unity_robotics_demo color_publisher
96+
else
97+
help
98+
fi
99+
count=$(( $count + 1 ))
100+
done
101+
echo "Completed run: $ROS color publisher"
102+
103+
elif [ "$COMMAND" == "run_ros_pose_service_client" ]; then
104+
if [ "$ROS" == "ros1" ]; then
105+
source ros1_ws/devel/setup.bash
106+
elif [ "$ROS" == "ros2" ]; then
107+
source ros2_ws/install/setup.bash
108+
else
109+
help
110+
fi
111+
echo "Starting to run $ROS pose service client and send requests every 30 seconds"
112+
count=0
113+
while [[ $count -le 6 ]]
114+
do
115+
sleep 5
116+
if [ "$ROS" == "ros1" ]; then
117+
rosservice call /obj_pose_srv Cube
118+
elif [ "$ROS" == "ros2" ]; then
119+
ros2 service call obj_pose_srv unity_robotics_demo_msgs/ObjectPoseService "{object_name: Cube}"
120+
else
121+
help
122+
fi
123+
count=$(( $count + 1 ))
124+
done
125+
echo "Completed run: $ROS pose service client"
126+
127+
elif [ "$COMMAND" == "run_ros_position_service" ]; then
128+
if [ "$ROS" == "ros1" ]; then
129+
source ros1_ws/devel/setup.bash
130+
elif [ "$ROS" == "ros2" ]; then
131+
source ros2_ws/install/setup.bash
132+
else
133+
help
134+
fi
135+
echo "Starting $ROS position service"
136+
if [ "$ROS" == "ros1" ]; then
137+
rosrun unity_robotics_demo position_service.py
138+
elif [ "$ROS" == "ros2" ]; then
139+
ros2 run unity_robotics_demo position_service
140+
else
141+
help
142+
fi
143+
144+
else
145+
help
146+
fi

.yamato/PickAndPlaceTests/set-up-integration-tests.py

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
external_scripts_dir = os.path.join(root_dir, "Scripts")
1818
project_dir = os.path.join(root_dir, "PickAndPlaceProject")
1919
project_scripts_dir = os.path.join(project_dir, "Assets", "Scripts")
20+
external_ros_scripts_dir = os.path.join(script_dir, "..", "..", "tutorials", "ros_unity_integration", "unity_scripts")
2021
# project_settings_file = os.path.join(project_dir, "ProjectSettings", "ProjectSettings.asset")
2122

2223
scripts_to_move = glob.glob(os.path.join(external_scripts_dir, "*.cs"))
@@ -26,6 +27,13 @@
2627
print(f">>> Copying {external_script} to {script_destination}")
2728
shutil.copyfile(external_script, script_destination)
2829

30+
scripts_to_move = glob.glob(os.path.join(external_ros_scripts_dir, "*.cs"))
31+
for external_script in scripts_to_move:
32+
script_name = os.path.basename(external_script)
33+
script_destination = os.path.join(project_scripts_dir, script_name)
34+
print(f">>> Copying {external_script} to {script_destination}")
35+
shutil.copyfile(external_script, script_destination)
36+
2937
files_to_cat = []
3038
message_dir = os.path.join(project_dir, "Assets", "RosMessages")
3139
print(f">>> Files in {message_dir}:")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from unityparser import UnityDocument
2+
3+
import argparse
4+
import os
5+
6+
parser = argparse.ArgumentParser(description='Add ROS define symbols')
7+
parser.add_argument('ros', type=str, help='ROS version: ros1 or ros2')
8+
9+
project_settings_filepath = os.path.join(".", "tutorials", "pick_and_place", "PickAndPlaceProject", "ProjectSettings", "ProjectSettings.asset")
10+
if not os.path.exists(project_settings_filepath):
11+
raise FileNotFoundError("Not found %s".format(project_settings_filepath))
12+
settings = UnityDocument.load_yaml(project_settings_filepath)
13+
symbols = settings.entries[0].scriptingDefineSymbols
14+
15+
args = parser.parse_args()
16+
if args.ros == "ros1":
17+
if symbols[1] is None:
18+
symbols[1] = "ROS1"
19+
else:
20+
symbols[1] += ";ROS1"
21+
elif args.ros == "ros2":
22+
if symbols[1] is None:
23+
symbols[1] = "ROS2"
24+
else:
25+
symbols[1] += ";ROS2"
26+
else:
27+
raise ValueError("Invalid input ROS version. Must be either ros1 or ros2")
28+
settings.dump_yaml(project_settings_filepath)
29+

.yamato/PickAndPlaceTests/start-ros.bash

-11
This file was deleted.

.yamato/sonar.yml

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
csharp:
2+
name: Sonarqube C# Scan
3+
agent:
4+
type: Unity::metal::macmini
5+
image: package-ci/mac
6+
flavor: m1.mac
7+
variables:
8+
PROJECT_PATH: tutorials/pick_and_place/PickAndPlaceProject
9+
SONARQUBE_PROJECT_KEY: ai-robotics-hub-csharp
10+
SONARQUBE_PROJECT_BASE_DIR: /Users/bokken/build/output/Unity-Technologies/Unity-Robotics-Hub/tutorials/pick_and_place/PickAndPlaceProject
11+
MSBUILD_SLN_PATH: ./tutorials/pick_and_place/PickAndPlaceProject/PickAndPlaceProject.sln
12+
PROJECT_ROOT: /Users/bokken/build/output/Unity-Technologies/Unity-Robotics-Hub/
13+
UNITY_VERSION: 2020.3.11f1
14+
commands:
15+
- npm install upm-ci-utils@stable -g --registry https://artifactory.prd.it.unity3d.com/artifactory/api/npm/upm-npm
16+
- unity-downloader-cli -u $UNITY_VERSION -c Editor
17+
- brew install mono corretto
18+
- curl https://github.com/SonarSource/sonar-scanner-msbuild/releases/download/5.2.1.31210/sonar-scanner-msbuild-5.2.1.31210-net46.zip -o sonar-scanner-msbuild-net46.zip -L
19+
- unzip sonar-scanner-msbuild-net46.zip -d ~/sonar-scanner-msbuild
20+
- chmod a+x ~/sonar-scanner-msbuild/sonar-scanner-4.6.1.2450/bin/sonar-scanner
21+
- .Editor/Unity.app/Contents/MacOS/Unity -projectPath $PROJECT_PATH -batchmode -quit -nographics -logFile - -executeMethod "UnityEditor.SyncVS.SyncSolution"
22+
- command: |
23+
cd $PROJECT_PATH
24+
for file in *.csproj; do sed -i.backup "s/^[[:blank:]]*<ReferenceOutputAssembly>false<\/ReferenceOutputAssembly>/<ReferenceOutputAssembly>true<\/ReferenceOutputAssembly>/g" $file; rm $file.backup; done
25+
cd $PROJECT_ROOT
26+
- mono ~/sonar-scanner-msbuild/SonarScanner.MSBuild.exe begin /k:$SONARQUBE_PROJECT_KEY /d:sonar.host.url=$SONARQUBE_ENDPOINT_URL_PRD /d:sonar.login=$SONARQUBE_TOKEN_PRD /d:sonar.projectBaseDir=$SONARQUBE_PROJECT_BASE_DIR
27+
- msbuild $MSBUILD_SLN_PATH
28+
- mono ~/sonar-scanner-msbuild/SonarScanner.MSBuild.exe end /d:sonar.login=$SONARQUBE_TOKEN_PRD
29+
triggers:
30+
cancel_old_ci: true
31+
expression: |
32+
((pull_request.target eq "main" OR pull_request.target eq "dev")
33+
AND NOT pull_request.push.changes.all match "**/*.md") OR
34+
(push.branch eq "main" OR push.branch eq "dev")
35+
standard:
36+
name: Sonarqube Standard Scan
37+
agent:
38+
type: Unity::metal::macmini
39+
image: package-ci/mac
40+
flavor: m1.mac
41+
variables:
42+
SONARQUBE_PROJECT_KEY: ai-robotics-hub-standard
43+
commands:
44+
- curl https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-macosx.zip -o sonar-scanner-macosx.zip -L
45+
- unzip sonar-scanner-macosx.zip -d ~/sonar-scanner
46+
- ~/sonar-scanner/sonar-scanner-4.6.2.2472-macosx/bin/sonar-scanner -Dsonar.projectKey=$SONARQUBE_PROJECT_KEY -Dsonar.sources=. -Dsonar.host.url=$SONARQUBE_ENDPOINT_URL_PRD -Dsonar.login=$SONARQUBE_TOKEN_PRD
47+
triggers:
48+
cancel_old_ci: true
49+
expression: |
50+
((pull_request.target eq "main" OR pull_request.target eq "dev")
51+
AND NOT pull_request.push.changes.all match "**/*.md") OR
52+
(push.branch eq "main" OR push.branch eq "dev")

0 commit comments

Comments
 (0)